Mối liên hệ giữa cả hai khái niệm là phương pháp chuỗi Markov Monte Carlo (còn gọi là MCMC) dựa trên lý thuyết chuỗi Markov để tạo ra mô phỏng và xấp xỉ Monte Carlo từ phân phối mục tiêu phức tạp .π
X1,…,XNXi{Xi−1,…,X1}Xi−1
Xi=f(Xi−1,ϵi)
fπϵiXiπi∞
Ví dụ đơn giản nhất về thuật toán MCMC là bộ lấy mẫu lát : tại lần lặp i của thuật toán này, hãy làm
- ϵ1i∼U(0,1)
- Xi∼U({x;π(x)≥ϵ1iπ(Xi−1)})ϵ2i
N(0,1)
- ϵ1i∼U(0,1)
- Xi∼U({x;x2≤−2log(2π−−√ϵ1i}),
i.e., Xi=±ϵ2i{−2log(2π−−√ϵ1i)φ(Xi−1)}1/2
with ϵ2i∼U(0,1)
or in 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]
Dưới đây là một đại diện của đầu ra, hiển thị phù hợp với N (0,1) mục tiêu và sự phát triển của chuỗi Markov ( XTôi).
Và đây là một phóng to về sự phát triển của chuỗi Markov ( XTôi, ε1Tôiπ( XTôi) ) trong hơn 100 lần lặp lại gần đây, thu được bởi
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")}
theo sau các chuyển động dọc và ngang của chuỗi Markov dưới đường cong mật độ mục tiêu.