首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PyMC中实现可由MCMC Metropolis采样的随机变量函数?

如何在PyMC中实现可由MCMC Metropolis采样的随机变量函数?
EN

Stack Overflow用户
提问于 2013-10-17 21:39:27
回答 2查看 1.2K关注 0票数 0

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

$p(y)=(f^{-1})'(y)p(x)$。有关详情,请参阅here

现在,我在下面的代码中定义了一个随机变量alpha,它具有指数分布。我想将log(alpha)作为新的随机变量添加到我的模型中。我应该如何在我的模型中实现它?

我已经做出了努力,但它似乎是错误的,答案中指出的原因是我使用了随机装饰器而不是确定性装饰器。但是因为稍后我想在这个变量上应用MCMC Metropolis,所以我需要它是统计的!为了更清楚地说明这一点,我想对log(alpha)应用高斯建议。所以我需要向Metropolis函数提交一个随机输入。

这就是我的模型:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2013-10-17 21:58:24

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

票数 1
EN

Stack Overflow用户

发布于 2013-10-17 22:58:10

正如@Max已经提到的,logalpha应该是一个确定性变量,因为它的值是由alpha唯一确定的。无论何时对模型进行采样,logalpha的值都会相应地更新。例如:

代码语言:javascript
复制
>>> 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19428338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档