0

如果你有一个随机变量 $X$ 和一个函数 $f$,你可以将 $y=f(X)$ 定义为一个新的随机变量,其概率密度函数如下:

$p(y)=(f^{-1})'(y)p(x)$。有关详细信息,请参见此处

现在我已经定义了一个随机变量 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)
4

2 回答 2

1

log alpha 是 alpha 的确定性函数,因此您应该将其建模为@deterministic. 一个很好的反映您自己问题的玩具示例是回归示例

于 2013-10-17T13:58:24.477 回答
0

正如@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)
于 2013-10-17T14:58:10.133 回答