如果您有一个随机变量$X$和一个函数$f$,则可以将$y=f(X)$定义为具有概率密度函数的新随机变量,如下所示:
$p(y)=(f^{-1})'(y)p(x)$。有关详情,请参阅here。
现在,我在下面的代码中定义了一个随机变量alpha,它具有指数分布。我想将log(alpha)作为新的随机变量添加到我的模型中。我应该如何在我的模型中实现它?
我已经做出了努力,但它似乎是错误的,答案中指出的原因是我使用了随机装饰器而不是确定性装饰器。但是因为稍后我想在这个变量上应用MCMC Metropolis,所以我需要它是统计的!为了更清楚地说明这一点,我想对log(alpha)应用高斯建议。所以我需要向Metropolis函数提交一个随机输入。
这就是我的模型:
import numpy as np
import pymc
lambd=1;
__all__=['alpha']
alpha=pymc.Exponential('alpha', beta=lambd)
@pymc.stochastic(plot=False)
def logalpha(value=0,c=alpha):
return np.log(c)发布于 2013-10-17 21:58:24
log alpha是alpha的确定性函数,因此您应该将其建模为@deterministic。反映您自己问题的一个很好的玩具示例是the regression example。
发布于 2013-10-17 22:58:10
正如@Max已经提到的,logalpha应该是一个确定性变量,因为它的值是由alpha唯一确定的。无论何时对模型进行采样,logalpha的值都会相应地更新。例如:
>>> import numpy as np
>>> import pymc
>>> lambd = 1
>>>
>>> alpha = pymc.Exponential('alpha', beta=lambd)
>>>
>>> @pymc.deterministic(plot=False)
... def logalpha(value=0, c=alpha):
... return np.log(c)
...
>>> M = pymc.Model([alpha, logalpha])
>>> for i in range(3):
... M.draw_from_prior()
... print (alpha.value, logalpha.value)
...
(array(1.888410537018971), 0.63573548954043602)
(array(0.23180935966225977), -1.4618399707110767)
(array(0.3381518219555991), -1.0842603069656513)https://stackoverflow.com/questions/19428338
复制相似问题