La conexión es que la cadena de Markov Monte Carlo (MCMC) los métodos se basan en la cadena de Markov teoría para producir y simulaciones de Monte Carlo de un complejo de distribución de destino $\pi$. En la práctica, estos métodos de salida de una secuencia $X_1,\ldots,X_N$ que es una cadena de Markov, es decir, que la distribución de $X_i$ dado todo el pasado $X_{i-1},\ldots,X_1$ sólo depende de $X_{i-1}$. En otras palabras, $$X_i=f(X_{i-1},\epsilon_i)$$ where $f$ is a function specified by the algorithm and the target distribution $\pi$ and the $\epsilon_i$'s are iid. The (ergodic) theory guarantees that $X_i$ converges (in distribution) to $\pi$ as $i$ gets to $\infty$.
La forma más fácil ejemplo de un algoritmo MCMC es el sector sampler: en la iteración i de este algoritmo, hacer
- simular $\epsilon^1_i\sim\mathrm{U}(0,1)$
- simular $X_{i}\sim\mathrm{U}(\{x;\pi(x)\ge\epsilon^1_i\pi(X_{i-1})\})$ (que
equivale a la generación de un segundo independientes $\epsilon^2_i$)
Por ejemplo, si el objetivo de la distribución es normal, a $\mathrm{N}(0,1)$ [para el que no sería necesario MCMC en la práctica] el anterior se traduce como
- simular $\epsilon^1_i\sim\mathrm{U}(0,1)$
- simular $X_{i}\sim\mathrm{U}(\{x;x^2\le-2\log(\sqrt{2\pi}\epsilon^1_i\})$,
es decir, $X_i=\pm
\epsilon_i^2\{-2\log(\sqrt{2\pi}\epsilon^1_i)\varphi(X_{i-1})\}^{1/2}$
con $\epsilon_i^2\sim\mathrm{U}(0,1)$
o en R
T=1e4
x=y=runif(T) #random initial value
for (t in 2:T){
epsilon=runif(2)#uniform white noise
y[t]=epsilon[1]*dnorm(x[t-1])#vertical move
x[t]=sample(c(-1,1),1)*epsilon[2]*sqrt(-2*#Markov move from
log(sqrt(2*pi)*y[t]))}#x[t-1] to x[t]
Aquí es una representación de la salida, mostrando un correcto ajuste a la $\mathrm{N}(0,1)$ destino y la evolución de la cadena de Markov $(X_i)$.
Y aquí es un zoom sobre la evolución de la cadena de Markov $(X_i,\epsilon^1_i\pi(X_i))$ durante los últimos 100 iteraciones, obtenidos por
curve(dnorm,-3,3,lwd=2,col="sienna",ylab="")
for (t in (T-100):T){
lines(rep(x[t-1],2),c(y[t-1],y[t]),col="steelblue");
lines(x[(t-1):t],rep(y[t],2),col="steelblue")}
que sigue vertical y horizontal se mueve de la cadena de Markov bajo el objetivo curva de densidad.