Związek między obiema koncepcjami polega na tym, że metody Markowa Monte Carlo (znane również jako MCMC) wykorzystują teorię łańcucha Markowa do tworzenia symulacji i aproksymacji Monte Carlo ze złożonego rozkładu docelowego .π
W praktyce te metody symulacyjne generują ciąg który jest łańcuchem Markowa, tj. Taki, że rozkład X i dla całej przeszłości { X i - 1 , … , X 1 } zależy tylko od X i - 1 . Innymi słowy, X i = f ( X i - 1X1,…,XNXi{Xi−1,…,X1}Xi−1 gdzie f
Xi=f(Xi−1,ϵi)
fjest funkcją określoną przez algorytm, a rozkład docelowy
i
ϵ i są iid. Gwarancje (ergodyczny) teorię, że
X i zbieżny (w dystrybucji) do
gatunku , jak
i trafia do
∞ .
πϵiXiπi∞
Najprostszym przykładem algorytmu MCMC jest próbnik wycinków : w iteracji i tego algorytmu wykonaj
- symulacja ϵ1i∼U(0,1)
- symulować (co oznacza wygenerowanie drugiego niezależnego ϵ 2Xi∼U({x;π(x)≥ϵ1iπ(Xi−1)}) )ϵ2i
Na przykład, jeśli rozkład docelowy jest normalnym [dla którego oczywiście nie potrzebujesz MCMC w praktyce, jest to zabawkowy przykład!]Powyższe tłumaczy się jakoN(0,1)
- symulować ϵ1i∼U(0,1)
- symulować , tj.Xi=±ϵ 2 i {-2log( √Xi∼U({x;x2≤−2log(2π−−√ϵ1i})
zε 2 i ~U(0,1)Xi=±ϵ2i{−2log(2π−−√ϵ1i)φ(Xi−1)}1/2ϵ2i∼U(0,1)
lub w 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]
N(0,1)(Xi)
(Xi,ϵ1iπ(Xi))
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")}
który podąża za pionowymi i poziomymi ruchami łańcucha Markowa pod docelową krzywą gęstości.