计算Mathematica中自定义分布的期望

这个问题建立在我早先提出的问题的基础上:

Mathematica能扩展PDF,CDF,FindDistributionParameters等的功能吗?

开始我有两个自定义发行版的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的x轴上的某个点计算期望值。 在生存分析中,他们将这称为平均残余寿命。 如下所示:

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

这不起作用,基本上只是将输入作为文本返回。

我了解如何使用TagSet为自定义分布定义PDF和CDF,我如何为Expectation []做类似的事情?


我将在一个单独的问题中发布更多关于此后续内容的信息,但我还需要一种策略来计算dplDist与我适合分发的某些数据的拟合优度。


非常感谢大家。


虽然您为自定义分配提供了PDFCDF ,但您尚未给出域,因此它不知道集成的界限,实际上是否需要进行集成或求和。 添加这个可以让事情发挥作用

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}] ,其中您明确指出了域。

为了使象ProbabilityExpectation和它们的数字对象这样的符号求解器能够处理这些符号,还建议设置DistributionParameterQDistributionParameterAssumptions

DistributionParameterQ应该给False参数明确违反假设,并且DistributionParameterAssumptions应该返回表示您的分布参数假设的布尔表达式。


我不确定我是否真的理解你的问题......期望值或平均值是分布的第一时刻,可以计算为

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

并将其用作expectation[f[x]] ,其中f[x]是您的pdf。

你的最后一段代码不适合我。 我不知道它是否是V8代码,或者它是否是自定义的,或者如果你想说这就是你希望你的函数是...

您也可以尝试查看Mathematica的ExpectedValue函数。

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

以下页面包含一些有关启用自定义分发(即从头开始编写而无需TransformedDisribution或ProbabilityDistribution)以便在CopulaDistribution,RandomVariate等中使用的提示:https://mathematica.stackexchange.com/questions/20067/efficient-generation-of-random -variates-从-A-系词分布/ 26169#26169

链接地址: http://www.djcxy.com/p/35621.html

上一篇: Calculating expectation for a custom distribution in Mathematica

下一篇: how to generate such an image in Mathematica