1

我正在自学 PyMC,但遇到了以下问题:

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

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

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

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

或者,可以将两个测量值组合为 n=15 和 k=12。然而,这太简单了。为了教育目的,我想采取艰苦的方式。

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

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

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?这甚至可能吗,还是我只是表现出对贝叶斯统计的终极无知?

4

1 回答 1

0

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

原则上,您将检查分布theta1并指定与其最相似的先验。在这个简单的例子中,它很容易——它会是:

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

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

于 2014-12-13T18:25:37.440 回答