Python PyMC3-观察值传递给模型的方式差异->;结果有什么不同?

Python PyMC3-观察值传递给模型的方式差异->;结果有什么不同?,python,bayesian,pymc,pymc3,Python,Bayesian,Pymc,Pymc3,我试图了解在将数据传递到模型中的方式上是否存在任何有意义的差异——无论是聚合还是作为单个试验(注意,对于某些分布,这只是一个感性的问题,例如二项式分布) 使用二项分布的简单模型预测是/否线索的p 以下模型(如有)的计算/结果有什么不同 我选择两个极端,要么一次通过一条小径(减少到伯努利),要么通过整个小径系列的总和,来举例说明我的意思,尽管我也对这些极端之间的差异感兴趣 # set up constants p_true = 0.1 N = 3000 observed = scipy.stats

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

使用二项分布的简单模型预测是/否线索的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\u ppc
    ,建模方法的差异就会显现出来,因为第一种方法将根据
    二项式(N,p)
    分布,第二种方法将是
    N
    绘制
    二项式(1,p)