计算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与我适合分发的某些数据的拟合优度。
非常感谢大家。
虽然您为自定义分配提供了PDF
和CDF
,但您尚未给出域,因此它不知道集成的界限,实际上是否需要进行集成或求和。 添加这个可以让事情发挥作用
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
应该返回表示您的分布参数假设的布尔表达式。
我不确定我是否真的理解你的问题......期望值或平均值是分布的第一时刻,可以计算为
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