Der ideale Monte-Carlo-Algorithmus verwendet unabhängige aufeinanderfolgende Zufallswerte. In MCMC sind aufeinanderfolgende Werte nicht unabhängig, was die Konvergenz der Methode langsamer macht als im idealen Monte Carlo. Je schneller es sich jedoch mischt, desto schneller fällt die Abhängigkeit in aufeinanderfolgenden Iterationen ab¹ und desto schneller konvergiert es.
¹ Ich meine hier, dass die aufeinanderfolgenden Werte schnell "fast unabhängig" vom Ausgangszustand sind, oder vielmehr, dass bei gegebenem Wert an einem Punkt die Werte schnell "fast unabhängig" von wenn wächst; Also, wie qkhhly in den Kommentaren sagt, "bleibt die Kette nicht in einer bestimmten Region des Staatsraums stecken".X ñ + k X n kXnXñ +kXnk
Bearbeiten: Ich denke, das folgende Beispiel kann helfen
Stellen Sie sich vor, Sie möchten den Mittelwert der Gleichverteilung auf durch MCMC schätzen . Sie beginnen mit der geordneten Sequenz ; Bei jedem Schritt wählten Sie Elemente in der Sequenz und mischten sie nach dem Zufallsprinzip. Bei jedem Schritt wird das Element an Position 1 aufgezeichnet. dies konvergiert zur gleichmäßigen Verteilung. Der Wert von steuert die Mischgeschwindigkeit: Wenn , ist es langsam; Wenn , sind die aufeinanderfolgenden Elemente unabhängig und das Mischen ist schnell.( 1 , … , n ) k > 2 k k = 2 k = n{ 1 , … , n }( 1 , … , n )k > 2kk = 2k = n
Hier ist eine R-Funktion für diesen MCMC-Algorithmus:
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);
}
Wenden wir es für an und zeichnen die sukzessive Schätzung des Mittelwerts entlang der MCMC-Iterationen auf:u = 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)
Sie können hier sehen, dass für (in Schwarz) die Konvergenz langsam ist; für (in blau) ist es schneller, aber immer noch langsamer als mit (in rot).k = 50 k = 99k = 2k = 50k = 99
Sie können auch ein Histogramm für die Verteilung des geschätzten Mittelwerts nach einer festgelegten Anzahl von Iterationen zeichnen, z. B. 100 Iterationen:
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