一般如何使用后验分布中的 MCMC 进行采样?

机器算法验证 贝叶斯 采样 模拟 马尔可夫链蒙特卡罗 大都会黑斯廷斯
2022-04-09 22:31:32

假设一个参数的后验分布并且我的意思是对于的每个点,可以使用蒙特卡罗方法+MCMC 来计算 . 现在我的问题是,如果我想从采样,基本上我必须做一个 Gibbs 采样(例如)从分布中采样,并且在任何时候我都必须运行 Monte Carlo 方法计算的值对吗?即它需要两个循环,一个在另一个内部。这个对吗?p(θ|y)θp(θ|y)p(θ|y)p(θ|y)

当我得到这个问题的答案时,我想也许我的问题含糊不清,我会尝试进一步澄清一下:

根据我整整一周阅读蒙特卡洛方法和 MCMC 的知识,我理解(如果我错了,请纠正我):

p(θ|y)=p(y|θ)p(θ)Θp(y|θ)p(θ)dθ.

现在,如果您认为我们只有一个用于的采样算法,并且我们只能显式计算(而不是其他函数!),因此要从中获取值,我们需要对分母进行数值积分。并且对于这个后验的每个值,需要应用像 Gibbs 采样这样的采样方案来生成的样本;的分布中采样,并计算应计算上述比例。θp(y|θ)p(θ|y)p(θ|y)p(θ|y)

2个回答

我们不使用 MCMC 来计算\theta的每个值(或多个值)MCMC(或 Gibbs 抽样的特殊情况)所做的是从生成一个(大)随机样本。注意没有被计算;你必须对随机数的向量(或矩阵)做一些事情来估计由于您没有为 \theta的许多值因此您不需要循环内的 Gibbs(或 MCMC)循环 - 只需一个(长)Gibbs(或 MCMC)循环。p(θ|y)θp(θ|y)p(θ|y)p(θ)p(θ)θθ

编辑以响应问题的更新:我们不需要积分分布来获得积分常数(CoI)!MCMC 的整个值是在我们无法计算 CoI 的情况下找到的。使用 MCMC,我们仍然可以从分布中生成随机数。如果我们可以计算 CoI,我们可以直接计算概率,而不需要求助于模拟。

再一次,我们不是使用 MCMC 计算生成随机数一个非常不同的东西。p(θ|y)p(θ|y)

这是一个简单案例的示例:尺度参数的后验分布来自具有均匀先验的指数分布。数据在 中x,我们N <- 10000从后验分布生成样本。请注意,我们只是在程序中计算p(x|θ)

x <- rexp(100)

N <- 10000
theta <- rep(0,N)
theta[1] <- cur_theta <- 1  # Starting value
for (i in 1:N) {
   prop_theta <- runif(1,0,5)  # "Independence" sampler
   alpha <- exp(sum(dexp(x,prop_theta,log=TRUE)) - sum(dexp(x,cur_theta,log=TRUE)))
   if (runif(1) < alpha) cur_theta <- prop_theta
   theta[i] <- cur_theta
}

hist(theta)

直方图:

$\theta$ 的后验分布

请注意,我们选择的采样器(prop_theta行)简化了逻辑,因为下一行 ( alpha <- ...) 中的几个其他项抵消了,所以根本不需要计算。我们选择统一的先验也简化了它。显然,我们可以对这段代码进行很多改进,但这是出于说明性而非功能性目的。

这是一个问题的链接,其中包含几个答案,为了解有关 MCMC 的更多信息提供了资源。

MCMC 是一系列采样方法(Gibbs、MH 等)。MCMC 的要点是您不能直接从您提到的后验分布中采样。MCMC 的工作方式是确定马尔可夫链(MCMC 中的第一个 MC),其平稳分布是您感兴趣的后验。您可以从此马尔可夫链中采样,当它收敛到其平衡分布时,您实际上是从您感兴趣的后验分布。