El algoritmo ideal de Monte Carlo utiliza valores aleatorios sucesivos independientes . En MCMC, los valores sucesivos no son independientes, lo que hace que el método converja más lentamente que el Monte Carlo ideal; sin embargo, cuanto más rápido se mezcla, más rápido decae la dependencia en iteraciones sucesivas¹ y más rápido converge.
¹ Quiero decir aquí que los valores sucesivos son rápidamente "casi independientes" del estado inicial, o mejor dicho, dado el valor en un punto, los valores X ń + k se vuelven rápidamente "casi independientes" de X n a medida que k crece; entonces, como dice qkhhly en los comentarios, "la cadena no se atasca en una determinada región del espacio de estado".XnXń+kXnk
Editar: creo que el siguiente ejemplo puede ayudar
Imagine que desea estimar la media de la distribución uniforme en por MCMC. Empiezas con la secuencia ordenada ( 1 , ... , n ) ; en cada paso, elige k > 2 elementos en la secuencia y los baraja aleatoriamente. En cada paso, se registra el elemento en la posición 1; esto converge a la distribución uniforme. El valor de k controla la rapidez de mezcla: cuando k = 2 , es lento; cuando k = n , los elementos sucesivos son independientes y la mezcla es rápida.{1,…,n}(1,…,n)k > 2kk = 2k = n
Aquí hay una función R para este algoritmo 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);
}
Apliquemos para y grafiquemos la estimación sucesiva de la media μ = 50 a lo largo de las iteraciones de 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)
Puede ver aquí que para (en negro), la convergencia es lenta; para k = 50 (en azul), es más rápido, pero aún más lento que con k = 99 (en rojo).k = 2k = 50k=99
También puede trazar un histograma para la distribución de la media estimada después de un número fijo de iteraciones, por ejemplo, 100 iteraciones:
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)
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