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

时间:2011-06-09 16:53:26

标签: statistics wolfram-mathematica

这个问题建立在我在之前的问题上得到的很好的答案上:

Can one extend the functionality of PDF, CDF, FindDistributionParameters etc in 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的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相对于我适合分布的某些数据的拟合度。


非常感谢所有人。

3 个答案:

答案 0 :(得分:5)

虽然您已经为Mathematica提供了自定义分发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[ pdf, {x, min, max}]的{​​{3}}进行比较,您明确指出该域名。

为了使ProbabilityExpectation及其数字对应物等符号解算器能够处理这些问题,我们还建议设置DistributionParameterQDistributionParameterAssumptions

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

答案 1 :(得分:1)

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

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

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

您的上一个代码段对我不起作用。我不知道它是v8代码还是自定义定义,或者你是否想说这是你想要的功能......

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

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

答案 2 :(得分:0)

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