记录pymc的随机变量

时间:2014-05-29 22:52:29

标签: python distribution pymc mcmc

我对logp有一个非常内在的困惑。我想通过na网页上的一个例子进行解释,这样我就不会很好地解释它。

我在本教程中将disaster_model.py描述为illlustrated: http://pymc-devs.github.io/pymc/tutorial.html

我启动了一个python shell,在导入了所有必需的模块后,我做了以下

In [2]: import disaster_model
Out[2]: -2.9780301980174

In [3]: disaster_model.switchpoint.logp
Out[3]: -4.709530201312334

In [4]: disaster_model.late_mean.logp
Out[4]: -2.407183392124894

In [5]: disaster_model.early_mean.logp
Out[5]: -2.9780301980174

M = MCMC(disaster_model)
M.sample(iter = 10000, burn = 1000, thin = 10)

In [11]: M.switchpoint.logp
Out[11]: -4.709530201312334

In [12]: M.early_mean.logp
Out[12]: -3.2263189370368117

In [13]: M.late_mean.logp
Out[13]: -0.9012784557735074

In [14]: M.disasters.logp
Out[14]: -164.37141285002255

我将重新强调该行(用disaster_model.py编写)

disasters = Poisson('disasters', mu=rate, value=disasters_array, observed=True

因此,灾难的价值永远不会改变。

现在我的问题是

1)除了switchpoint之外,为什么每个变量的日志概率都会发生变化?

(请解释为什么日志概率应该改变,如果它们应该改变,那么为什么swithpoint没有改变)

2)新旧日志概率代表什么?

(这是ipython shell而不是python,但它几乎不重要)

1 个答案:

答案 0 :(得分:1)

反而迟到了,但无论如何。你的问题。

1)除了switchpoint之外,为什么每个变量的日志概率都会发生变化?

logp属性给出变量的对数概率,给定其父项。 switchpoint的先验分布是从0到110年的离散均匀分布,其父母是均匀分布的下界和上界。无论考虑switchpoint的什么值,其概率质量为1/111,因此其先验对数概率为ln(1/111)= -4.70953,并且永远不会改变。

其他变量(early_meanlate_mean)的对数概率发生变化,因为MCMC算法会跳过随机变量的空间,因为它们的先验分布被定义为指数,而不是统一。

2)新旧日志概率代表什么?

在您的问题中,对数概率表示随机变量early_meanlate_meanswitchpoint的“当前”值的对数先验概率。您可以通过评估early_mean并与np.log(scipy.stats.expon.pdf(M.early_mean.value, scale=1))进行比较来自行验证M.early_mean.logp。请注意,指数分布中的scale参数反映了disaster_model.py中定义的scale参数。