我试图了解将数据传递到模型中的方式是否存在任何有意义的差异 - 无论是聚合还是单个试验(请注意,这只会是某些分布的一个敏感问题,例如二项式)。
使用具有二项分布的简单模型预测 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源代码,试图看看如何处理观察结果,但找不到合适的部分。
可能的预期答案:
答案 0 :(得分:1)
这是一个有趣的例子!你的第二个建议是正确的:你实际上可以通过分析来计算后验,然后根据
进行分配。Beta(sum(observed), N - sum(observed))
无论哪种情况。
如果您使用pm.sample_ppc
,则会出现建模方法的差异,因为第一个将根据Binomial(N, p)
分发,第二个将N
绘制Binomial(1, p)
。