这个问题建立在我在之前的问题上得到的很好的答案上:
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相对于我适合分布的某些数据的拟合度。
非常感谢所有人。
答案 0 :(得分:5)
虽然您已经为Mathematica提供了自定义分发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[ pdf, {x, min, max}]
的{{3}}进行比较,您明确指出该域名。
为了使Probability
,Expectation
及其数字对应物等符号解算器能够处理这些问题,我们还建议设置DistributionParameterQ
和DistributionParameterAssumptions
。
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