Answers:
理想的蒙特卡洛算法使用独立的连续随机值。在MCMC中,连续的值不是独立的,这使得该方法的收敛速度比理想的Monte Carlo方法慢。但是,它混合得越快,相依性在连续迭代中的衰减就越快¹,并且收敛速度也越快。
¹我的意思是这里说的连续值是迅速“几乎独立”的初始状态的,或者更确切地说,该给定的值在一个点上,值X ń + ķ变得迅速“几乎独立”的X Ñ作为ķ生长; 因此,正如qkhhly在评论中说的那样,“链条不会一直卡在状态空间的某个区域中”。
编辑:我认为以下示例可以帮助
假设您想通过MCMC 估算上的均匀分布的均值。从有序序列(1 ,… ,n )开始 ; 在每一步中,您都选择了序列中的k > 2个元素,并随机对其进行洗牌。在每个步骤中,记录位置1处的元素;这收敛到均匀分布。k的值控制混合速度:当k = 2时,它很慢;当k = 2时,它很慢。当k = n时,连续元素是独立的,并且混合很快。
这是此MCMC算法的R函数:
mcmc <- function(n, k = 2, N = 5000)
{
x <- 1:n;
res <- numeric(N)
for(i in 1:N)
{
swap <- sample(1:n, k)
x[swap] <- sample(x[swap],k);
res[i] <- x[1];
}
return(res);
}
让我们将其应用于,并绘制沿MCMC迭代的均值μ = 50的连续估计:
n <- 99; mu <- sum(1:n)/n;
mcmc(n) -> r1
plot(cumsum(r1)/1:length(r1), type="l", ylim=c(0,n), ylab="mean")
abline(mu,0,lty=2)
mcmc(n,round(n/2)) -> r2
lines(1:length(r2), cumsum(r2)/1:length(r2), col="blue")
mcmc(n,n) -> r3
lines(1:length(r3), cumsum(r3)/1:length(r3), col="red")
legend("topleft", c("k = 2", paste("k =",round(n/2)), paste("k =",n)), col=c("black","blue","red"), lwd=1)
您可以在此处看到,对于(黑色),收敛速度很慢;对于k = 50(蓝色),它比k = 99(红色)更快,但仍然较慢。
您还可以绘制直方图,以计算固定次数(例如100次迭代)后估计平均值的分布:
K <- 5000;
M1 <- numeric(K)
M2 <- numeric(K)
M3 <- numeric(K)
for(i in 1:K)
{
M1[i] <- mean(mcmc(n,2,100));
M2[i] <- mean(mcmc(n,round(n/2),100));
M3[i] <- mean(mcmc(n,n,100));
}
dev.new()
par(mfrow=c(3,1))
hist(M1, xlim=c(0,n), freq=FALSE)
hist(M2, xlim=c(0,n), freq=FALSE)
hist(M3, xlim=c(0,n), freq=FALSE)
> mean(M1)
[1] 19.046
> mean(M2)
[1] 49.51611
> mean(M3)
[1] 50.09301
> sd(M2)
[1] 5.013053
> sd(M3)
[1] 2.829185
(X n)π
此外,之间的独立性仅在某些设置中相关。以整合为目标时,负相关性(又称对立模拟)优于独立性。
关于您的具体评论
...可接受的候选抽奖应该并且将集中在后验分布的高密度部分。如果我理解的是正确的,那么我们是否仍希望链条穿过支撑物(包括低密度部分)?
MCMC链按照与目标高度(在静止状态下)的高度成正比的方式探索目标,因此确实会在密度较高的区域花费更多的时间。当目标具有由低密度区域分隔的几个高密度成分时,链必须穿过较低密度的区域至关重要。(这也称为多峰设置。)缓慢混合可能会阻止链条穿过此类低密度区域。链上永远不应该访问的唯一区域是目标分布下概率为零的区域。