理想的なモンテカルロアルゴリズムは、独立した連続したランダム値を使用します。MCMCでは、連続する値は独立していないため、メソッドの収束が理想的なモンテカルロより遅くなります。ただし、混合が速いほど、連続する反復で依存関係が急速に減衰し¹、収束が速くなります。
¹Iは、連続した値が値所与ことなく迅速に初期状態の「ほぼ独立した」、またはであることをここで意味一点で、値素早くの「ほぼ独立」なるとして大きくなります。そのため、コメントでqkhhlyが言っているように、「チェーンは状態空間の特定の領域に留まることはありません」。XnXń+kXnk
編集:次の例が役立つと思います
MCMCによっての均一分布の平均を推定したいと想像してください。順序付けられたシーケンスから始めます。各ステップで、シーケンスの要素を選択し、ランダムにシャッフルします。各ステップで、位置1の要素が記録されます。これは均一な分布に収束します。の値は混合の速さを制御します場合、遅いです。場合、連続した要素は独立して、混合を高速です。{1,…,n}(1,…,n)k>2kk=2k=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の反復に沿った平均の連続推定をプロットします。n=99μ=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=2k=50k=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)
(M1)の場合、100回の反復後の初期値の影響はひどい結果しか与えないことがわかります。ではこれは、[OK]をクリックしてよりもさらに大きな標準偏差と思わ。ここに手段とSDがあります:k=2k=50k=99
> 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