我正在尝试了解将数据传递到模型的方式是否存在任何有意义的差异-汇总还是作为单个试验(请注意,这对于某些分布(例如二项式)仅是一个有意义的问题)。

使用具有二项分布的简单模型预测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无论如何都会汇总二项式的观察值,因此它们没有区别
每种情况下产生的后表面(在样本过程中进行了探索)都是相同的->在两个模型中没有有意义/统计上的差异
正因为如此,结果统计中存在差异...

最佳答案

这是一个有趣的例子!您的第二个建议是正确的:您实际上可以分析得出后验,并且将根据

Beta(sum(observed), N - sum(observed))


在任一情况下。

如果使用例如pm.sample_ppc,则会显示建模方法的差异,因为第一个将根据Binomial(N, p)进行分配,第二个将是NBinomial(1, p)绘制。

07-24 09:52
查看更多