我对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,但它几乎不重要)
答案 0 :(得分:1)
反而迟到了,但无论如何。你的问题。
1)除了switchpoint之外,为什么每个变量的日志概率都会发生变化?
logp
属性给出变量的对数概率,给定其父项。 switchpoint
的先验分布是从0到110年的离散均匀分布,其父母是均匀分布的下界和上界。无论考虑switchpoint
的什么值,其概率质量为1/111,因此其先验对数概率为ln(1/111)= -4.70953,并且永远不会改变。
其他变量(early_mean
和late_mean
)的对数概率发生变化,因为MCMC算法会跳过随机变量的空间,因为它们的先验分布被定义为指数,而不是统一。
2)新旧日志概率代表什么?
在您的问题中,对数概率表示随机变量early_mean
,late_mean
和switchpoint
的“当前”值的对数先验概率。您可以通过评估early_mean
并与np.log(scipy.stats.expon.pdf(M.early_mean.value, scale=1))
进行比较来自行验证M.early_mean.logp
。请注意,指数分布中的scale参数反映了disaster_model.py
中定义的scale参数。