이상적인 Monte Carlo 알고리즘은 독립적 인 연속 임의 값을 사용 합니다. MCMC에서 연속적인 값은 독립적이지 않으므로 이상적인 Monte Carlo보다 수렴 속도가 느려집니다. 그러나 혼합 속도가 빠를수록 연속 반복에서 종속성이 더 빨리 붕괴되고 ¹ 수렴 속도가 빨라집니다.
¹ 나는 연속 값이 값 주어진 오히려 빨리 "거의 독립적 인"초기 상태의, 또는 것을 여기에서 의미 , 값이 한 지점에서 의 "거의 독립적 인"신속하게 로 성장; 따라서 qkhhly가 의견에서 말했듯이 "체인은 상태 공간의 특정 영역에 계속 붙어 있지 않습니다".X ń + k X n kXnXń+kXnk
편집 : 다음 예제가 도움이 될 수 있다고 생각합니다.
MCMC에 의해 에 대한 균일 분포의 평균을 추정한다고 가정합니다 . 순서대로 시작합니다 ; 각 단계 에서 시퀀스에서 요소 를 선택 하고 무작위로 섞습니다. 각 단계에서 위치 1의 요소가 기록됩니다. 이것은 균일 분포로 수렴합니다. 의 값은 혼합 속도를 제어한다 : 일 때 , 느리다; 일 때 , 연속적인 요소는 독립적이며 혼합은 빠르다.( 1 , … , n ) k > 2 k k = 2 k = n{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 반복을 따라 평균 의 연속 추정치를 플로팅합니다 .μ = 50n=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 = 50 k = 99k=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 개) 반복 한 후 초기 값의 영향은 당신에게 끔찍한 결과를 제공합니다. 와 는 확인보다 여전히 더 큰 표준 편차로 보인다 . 수단과 SD는 다음과 같습니다.k = 50 k = 99k=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