Расчет ожидания для пользовательского распределения в Mathematica - PullRequest
4 голосов
/ 09 июня 2011

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

Можно ли расширить функциональность 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]

В моем предыдущем вопросе ответы Джооболта и Саши и рекомендация использовать TagSet помогли мне продвинуться далеко вперед. Теперь мои вопросы касаются dplDist.

Теперь мне нужно вычислить ожидание от некоторой точки на оси x в 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 относительно некоторых данных, для которых я соответствую распределению.


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

Ответы [ 3 ]

5 голосов
/ 09 июня 2011

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

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

In[9]:= NExpectation[Log@X \[Conditioned] Log@X > 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 должен возвращать логическое выражение, представляющее предположения о параметрах вашего распределения.

1 голос
/ 09 июня 2011

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

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

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

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

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

ExpectedValue[x, NormalDistribution[m, s], x]
Out[1] = m
0 голосов
/ 31 мая 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...