Идеальный алгоритм Монте-Карло использует независимые последовательные случайные значения. В MCMC последовательные значения не являются независимыми, что заставляет метод сходиться медленнее, чем идеальный метод Монте-Карло; однако, чем быстрее он смешивается, тем быстрее затухает зависимость в последовательных итерациях¹ и быстрее сходится.
¹ Я имею в виду, что последовательные значения быстро «почти не зависят» от начального состояния, или, скорее, что, учитывая значение в одной точке, значения X ñ + k становятся быстро «почти независимыми» от X n с ростом k ; Итак, как говорит Кххли в комментариях, «цепочка не застревает в определенной области пространства состояний».ИксNИксн +кИксNК
Изменить: я думаю, что следующий пример может помочь
Представьте, что вы хотите оценить среднее значение равномерного распределения по по MCMC. Вы начинаете с упорядоченной последовательности ( 1 , … , n ) ; на каждом шаге вы выбираете k > 2 элементов в последовательности и случайным образом перемешиваете их. На каждом шаге элемент в позиции 1 записывается; это сходится к равномерному распределению. Значение k контролирует скорость перемешивания: когда k = 2 , это медленно; когда k = n , последовательные элементы независимы, и смешивание происходит быстро.{ 1 , … , n }( 1 , … , n )k > 2Кк = 2k = n
Вот функция R для этого алгоритма MCMC:
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);
}
Давайте применим его для и построим последовательную оценку среднего значения μ = 50 вдоль итераций 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 = 50 (синим цветом) это быстрее, но все же медленнее, чем с k = 99 (красным).к = 2К = 50к = 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)
к = 2К = 50к = 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