如何解释 MCMC 中的自相关图

机器算法验证 贝叶斯 解释 Python 马尔可夫链蒙特卡罗 自相关
2022-03-09 04:51:41

我通过阅读 John K. Kruschke 的书做贝叶斯数据分析来熟悉贝叶斯统计,也被称为“小狗书”。在第 9 章中,用这个简单的例子介绍了层次模型: 和伯努利观察是 3 个硬币,每个 10 次翻转。一个显示 9 个头,其他 5 个头和其他 1 个头。

yjiBernoulli(θj)θjBeta(μκ,(1μ)κ)μBeta(Aμ,Bμ)κGamma(Sκ,Rκ)

我已经使用 pymc 来推断超参数。

with pm.Model() as model:
# define the     
    mu = pm.Beta('mu', 2, 2)
    kappa = pm.Gamma('kappa', 1, 0.1)
    # define the prior
    theta = pm.Beta('theta', mu * kappa, (1 - mu) * kappa, shape=len(N))
    # define the likelihood
    y = pm.Bernoulli('y', p=theta[coin], observed=y)

    # Generate a MCMC chain
    step = pm.Metropolis()
    trace = pm.sample(5000, step, progressbar=True)
    trace = pm.sample(5000, step, progressbar=True)


burnin = 2000  # posterior samples to discard
thin = 10  # thinning 
pm.autocorrplot(trace[burnin::thin], vars =[mu, kappa])

我的问题是关于自相关。我该如何解释自相关?你能帮我解释一下自相关图吗?

在此处输入图像描述

它说随着样本彼此之间的距离越来越远,它们之间的相关性会降低。对?我们可以用它来绘制找到最佳细化吗?细化会影响后验样本吗?毕竟,这剧情有什么用?

1个回答

首先:如果处理 MCMC 输出的内存和计算时间不受限制,那么细化永远不是“最佳的”。在相同数量的 MCMC 迭代中,细化链总是(平均而言)导致 MCMC 近似的损失精度。

因此,基于自相关或任何其他诊断的常规细化是不可取的。参见 Link, WA & Eaton, MJ (2012) 关于 MCMC 中链条的细化。生态与进化方法,3, 112-115。

然而,在日常实践中,通常情况下您必须使用采样器不能很好地混合的模型(高自相关)。在这种情况下

1)闭链元素非常相似,这意味着扔掉一个不会丢失很多信息(这就是自相关图所显示的)

2)你需要大量的重复来获得收敛,这意味着如果你不瘦,你会得到非常大的链。正因为如此,使用完整的链可能会非常慢,需要大量存储,甚至在监控大量变量时会导致内存问题。

3)此外,我有一种感觉(但我从未系统地测试过)细化也使 JAGS 更快一些,因此可能能够同时获得更多迭代。

所以,我的观点是:自相关图可以粗略估计你通过细化丢失了多少信息(请注意,虽然这是整个后验的平均值,但在特定区域的损失可能更高)。

这个价格是否值得付出取决于您在节省计算资源和以后的时间方面通过细化获得的收益。如果 MCMC 迭代成本低,您总是可以通过运行更多迭代来补偿细化的损失。