PyMC中的顺序更新

时间:2014-12-04 10:55:44

标签: python bayesian pymc mcmc

我在教自己PyMC,但遇到了以下问题:

我有一个模型,其参数应该从连续测量中确定。在开始时,参数的先验是无信息的,但应在每次测量后更新(即由后验替换)。简而言之,我想用PyMC进行顺序更新。

考虑以下(有些构造的)示例:

  • 测量1:10个问题,9个正确答案
  • 测量2:5个问题,3个正确答案

当然,这可以通过beta /二项式共轭先验分析解决,但这不是重点:)

或者,两种测量可以组合成n = 15和k = 12。但是,这太简单了。我想为教育目的采取艰难的方式。

我在this answer找到了一个解决方案,从后方采样新的先验。这几乎是我想要的,但对先前的采样感觉有点乱,因为结果取决于样本数量和其他设置。

我尝试过的解决方案将测量和先验分别放在一个模型中,如下所示:

n1, k1 = 10, 9
n2, k2 = 5, 3

theta1 = pymc.Beta('theta', alpha=1, beta=1)
outcome1 = pymc.Binomial('outcome1', n=n1, p=theta1, value=k1, observed=True)

theta2 = ?  # should be the posterior of theta1
outcome2 = pymc.Binomial('outcome2', n=n2, p=theta2, value=k2, observed=True)

如何将theta1的后验作为theta2的先验? 这甚至是可能的,还是我只是表现出对贝叶斯统计数据的最终无知?

1 个答案:

答案 0 :(得分:0)

顺序更新的唯一方法是两种不同的模型。在同一模型中指定它们没有任何意义,因为在MCMC完成之前我们没有后验。

原则上,您将检查theta1的分布并指定一个最符合它的先验。在这个简单的例子中,它很容易 - 它将是:

theta2 = pymc.Beta('theta2', alpha=10, beta=2)

因为你不需要MCMC来确定theta的后部是什么。更一般地说,您可以将Beta分布适用于后验,例如使用scipy.stats.beta.fit