Подтвердить что ты не робот

Вычисление ожидания для пользовательского распределения в Mathematica

Этот вопрос основывается на замечательных ответах, которые я получил по более раннему вопросу:

Можно ли расширить функциональность PDF, CDF, FindDistributionParameters и т.д. в Mathematica?

Для начала у меня есть PDF файлы и CDF для двух пользовательских дистрибутивов: nlDist и dplDist, как вы можете видеть из кода dplDist строит на nlDist.

    nlDist /: PDF[nlDist[alpha_, beta_, mu_, sigma_], 
   x_] := (1/(2*(alpha + beta)))*alpha* 
   beta*(E^(alpha*(mu + (alpha*sigma^2)/2 - x))* 
      Erfc[(mu + alpha*sigma^2 - x)/(Sqrt[2]*sigma)] + 
     E^(beta*(-mu + (beta*sigma^2)/2 + x))* 
      Erfc[(-mu + beta*sigma^2 + x)/(Sqrt[2]*sigma)]); 

nlDist /: 
  CDF[nlDist[alpha_, beta_, mu_, sigma_], 
   x_] := ((1/(2*(alpha + beta)))*((alpha + beta)*E^(alpha*x)* 
        Erfc[(mu - x)/(Sqrt[2]*sigma)] - 
       beta*E^(alpha*mu + (alpha^2*sigma^2)/2)*
        Erfc[(mu + alpha*sigma^2 - x)/(Sqrt[2]*sigma)] + 
       alpha*E^((-beta)*mu + (beta^2*sigma^2)/2 + alpha*x + beta*x)*
        Erfc[(-mu + beta*sigma^2 + x)/(Sqrt[2]*sigma)]))/ 
   E^(alpha*x);         

dplDist /: PDF[dplDist[alpha_, beta_, mu_, sigma_], x_] := 
  PDF[nlDist[alpha, beta, mu, sigma], Log[x]]/x;
dplDist /: CDF[dplDist[alpha_, beta_, mu_, sigma_], x_] := 
  CDF[nlDist[alpha, beta, mu, sigma], Log[x]];

Plot[PDF[dplDist[3.77, 1.34, -2.65, 0.40], x], {x, 0, .3}, 
 PlotRange -> All]
Plot[CDF[dplDist[3.77, 1.34, -2.65, 0.40], x], {x, 0, .3}, 
 PlotRange -> All]

В моем предыдущем вопросе ответы joebolte и sasha и рекомендации по использованию TagSet помогли мне зайти так далеко. Теперь мои вопросы касаются dplDist.

Теперь мне нужно вычислить математическое ожидание от некоторой точки на оси х PDF. В анализе выживаемости они называют это средней остаточной жизнью. Что-то вроде следующего:

Expectation[X \[Conditioned] X > 0.1, 
  X \[Distributed] dplDist[3.77, 1.34, -2.65, 0.40]] - 0.1

Это не работает, по сути, просто возвращает входы как текст.

Я понимаю, как я могу использовать TagSet для определения PDF файлов и CDF для пользовательских дистрибутивов, как мне сделать что-то подобное для Expectation []?


Я расскажу об этом подробнее в отдельном вопросе, но мне также нужна стратегия для расчета добротности соответствия dplDist относительно некоторых данных, которым я поместил дистрибутив.


Большое спасибо всем.

4b9b3361

Ответ 1

Хотя вы предоставили как PDF, так и CDF для своего пользовательского дистрибутива в Mathematica, вы не дали домен, поэтому он не знает границ интеграции, и на самом деле, следует ли интегрировать или суммировать. Добавление этого делает работу:

In[8]:= nlDist /: 
 DistributionDomain[nlDist[alpha_, beta_, mu_, sigma_]] := 
 Interval[{-Infinity, Infinity}]

In[9]:= NExpectation[[email protected] \[Conditioned] [email protected] > 0.1, 
  X \[Distributed] nlDist[3.77, 1.34, -2.65, 0.40]] - 0.1

Out[9]= 0.199329

Сравните это с ProbabilityDistribution, который имеет формат ProbabilityDistribution[ pdf, {x, min, max}], где вы явно указываете домен.

Чтобы символические решатели вроде Probability, Expectation и их числовые аналоги работали над ними, рекомендуется также установить DistributionParameterQ и DistributionParameterAssumptions.

DistributionParameterQ должен указывать False, параметры явно нарушают предположения, а DistributionParameterAssumptions должен возвращать логическое выражение, представляющее предположения о параметрах вашего распределения.

Ответ 2

Я не уверен, что я действительно понимаю ваш вопрос... Ожидаемое значение или среднее значение - это первый момент распространения и может быть рассчитан как

expectation := Integrate[x #, {x,-Infinity,Infinity}]&;

и используйте его как expectation[f[x]], где f[x] - ваш pdf.

Ваш последний фрагмент кода не работает для меня. Я не знаю, является ли это кодом v8, или если он настроен на пользовательский или если вы пытаетесь сказать, что это то, что вы хотели бы, чтобы ваша функция была как...

Вы также можете попробовать посмотреть функцию Mathematica ExpectedValue.

ExpectedValue[x, NormalDistribution[m, s], x]
Out[1] = m

Ответ 3

На следующей странице приведены некоторые советы по включению пользовательских дистрибутивов (т.е. написанных с нуля без TransformedDisribution или ProbabilityDistribution) для использования в CopulaDistribution, RandomVariate и т.д.: https://mathematica.stackexchange.com/info/20067/efficient-generation-of-random-variates-from-a-copula-distribution/26169#26169