PyMC3 - 将观察结果传递给模型的方式的差异 - >结果有何不同?

时间:2017-10-26 11:20:48

标签: python bayesian pymc pymc3

我试图了解将数据传递到模型中的方式是否存在任何有意义的差异 - 无论是聚合还是单个试验(请注意,这只会是某些分布的一个敏感问题,例如二项式)。

使用具有二项分布的简单模型预测 p 的是/否路径。

以下型号(如果有)的计算/结果有何不同?

我选择了两个极端,要么一次传入一条路径(减少到伯努利),要么传递整个系列路径的总和,以举例说明我的意思,尽管我对这些极端之间的差异感兴趣

# set up constants
p_true = 0.1
N = 3000
observed = scipy.stats.bernoulli.rvs(p_true, size=N)

模型1:将所有观察结果组合成单个数据点

with pm.Model() as binomial_model1:
    p = pm.Uniform('p', lower=0, upper=1)
    observations = pm.Binomial('observations', N, p, observed=np.sum(observed))
    trace1 = pm.sample(40000)

模型2:单独使用每个观察

with pm.Model() as binomial_model2:
    p = pm.Uniform('p', lower=0, upper=1)
    observations = pm.Binomial('observations', 1, p, observed=observed)
    trace2 = pm.sample(40000)

在这种情况下,痕迹或后验没有任何明显的差异。我试图深入研究pymc3源代码,试图看看如何处理观察结果,但找不到合适的部分。

可能的预期答案:

  • pymc3聚合了Binomial引擎盖下的观察结果,所以它们没有区别
  • 所得到的后表面(在样品处理中探索)在每种情况下是相同的 - >两个模型没有任何意义/统计差异
  • 因此而产生的统计数据存在差异......

1 个答案:

答案 0 :(得分:1)

这是一个有趣的例子!你的第二个建议是正确的:你实际上可以通过分析来计算后验,然后根据

进行分配。
Beta(sum(observed), N - sum(observed))

无论哪种情况。

如果您使用pm.sample_ppc,则会出现建模方法的差异,因为第一个将根据Binomial(N, p)分发,第二个将N绘制Binomial(1, p)