我们不使用 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)
直方图:

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