Metropolis-Hastings(์ดํ MH) ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค.
MH ์๊ณ ๋ฆฌ์ฆ์ MCMC(Markov Chain Monte-Carlo)์ ์ผ๋ฐ์ ์ธ ํํ๋ก์จ ํน์ ๋ถํฌ๋ก๋ถํฐ ์ ์๋ถํฌ๋ก ๊ฐ๋ ์ฒด์ธ์ ๋ฐ์์ํฌ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํ์ฌ ํน์ ๋ถํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ์ ์๋ค.
๋ค๋ฃฐ ๋ด์ฉ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. MH ์๊ณ ๋ฆฌ์ฆ
2. Random walk MH ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
1. MH ์๊ณ ๋ฆฌ์ฆ
MH ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
โท q๋ ์ ์ ๋ถํฌ(Proposal distribution)๋ฅผ ์๋ฏธํ๊ณ , g๋ ์ฐ๋ฆฌ์ ๋ชฉ์ ๋ถํฌ(Target distribution)์์ ์ ๊ทํ ์์(Normalizing constant)๋ฅผ ์ ์ธํ ๋ถ๋ถ์ด๋ค. ์ฆ, ๋ชฉ์ ๋ถํฌ์ g(theta)๋ ๋น๋ก ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค.
โท ์ด๊ธฐ๊ฐ theta 0๋ฅผ ์ ํ๊ณ , q(theta i-1 | theta star)๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๋ค, alpha๋ฅผ ๊ตฌํ๋ค. alpha๊ฐ 1 ์ด์์ด๋ฉด theta star๋ฅผ theta i๋ก ์ ํ๊ณ , ์๋ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด์ theta i-1๋ฅผ theta i๋ก ์ ํ๋ค.
โท ์ด ๊ณผ์ ์ ํตํด ์์ฑํ theta ์ค ์๋ ดํ๊ธฐ ์์ํ ๋ถ๋ถ๋ถํฐ ๋ชฉ์ ๋ถํฌ๋ก๋ถํฐ ์์ฑํ ๋ฐ์ดํฐ๋ก์จ ํ์ฉํ ์ ์๋ค.
MH ์๊ณ ๋ฆฌ์ฆ์ ํต์ฌ์ธ alpha๊ฐ ์ด๋ป๊ฒ ๋ง๋ค์ด์ก๋์ง ์์๋ณด์.
โท ์์ ๊ทธ๋ฆผ์ ๋ ๋ ธ๋๊ฐ์ ์ฒด์ธ์ ๋ํ๋ธ ๊ฒ์ด๋ค. ๋ชฉ์ ๋ถํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ๋ง๋ฅด์ฝํ ์ฒด์ธ(Markov chain)์ด ์ ์ ์ํ(Stationary state)๊ฐ ๋์ด์ผ ํ๋ค. ์ด๋ฅผ ์ํด ๋ฏธ์ธ ๊ท ํ ์กฐ๊ฑด(Detailed balance condition)์ ๋ง์กฑํ๋๋ก ์ ์ฝ์ ์ค๋ค. ์ ์ฝ์ผ๋ก์จ ์์ ์๊ณผ ๊ฐ์ด ๊ฐ ์ํ์ ์ ์ดํ๋ฅ (Transition probability)์ r์ ๊ณฑํ์ฌ ๊ฐ๋๋ก ๋ง๋ ๋ค.
โท alpha์ ๋ถ์ q(theta i | theta star)×g(theta star)๊ฐ ๋ถ๋ชจ q(theta star | theta i)×g(theta i)๋ณด๋ค ํฌ๋ฉด ๋ถ์์ ๊ณฑํด์ง๋ r์ ์๊ฒ, ๋ถ๋ชจ์ ๊ณฑํด์ง r์ ํฌ๊ฒ ๋ง๋ค์ด ์ค์ผ ๋ฏธ์ธ ๊ท ํ ์กฐ๊ฑด์ด ์ฑ๋ฆฝํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ r theta i -> theta star์ 1๋ก r theta star -> theta i๋ alpha์ ์ญ์๋ก ๋๋ค. ๋ฐ๋์ ๊ฒฝ์ฐ์๋ r theta i -> theta star์ alpha๋ก r theta i -> theta star๋ 1๋ก ๋๋ค. ์ด๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
โท ์ด์ ์ํ๋ก๋ถํฐ ๋ค์ ์ํ์ ์์ธก์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ฏ๋ก, r theta i -> theta star๋ฅผ ํตํด ๋ค์ ์ํ๋ฅผ ๊ฒฐ์ ํ์ฌ์ผ ํ๋ค. ์ฆ, alpha์ ๋ฐ๋ฅธ r theta i -> theta star๊ฐ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋ค์ผ์ง ๋ง์ง(Accept or not)์ ๋ํด ๊ฒฐ์ ํ๋ค. ์ด๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
2. Random walk MH ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
๋ฌธ์ )
๊ฐ๋ฅ๋ ํจ์๊ฐ ์ ๊ท๋ถํฌ๋ฅผ ๋ฐ๋ฅด๊ณ , ์ ๊ท๋ถํฌ์ ํ๊ท ์ t ๋ถํฌ๋ฅผ ๋ฐ๋ฅธ๋คํ๋ค. ๋ฐ์ดํฐ๋ก 1.2, 1.4, -0.5, 0.3, 0.9, 2.3, 1.0, 0.1, 1.3, 1.9๊ฐ ์ฃผ์ด์ก์ ๋, ํ๊ท ์ ์ฌํ๋ถํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ฌ๋ผ.
ํ์ด)
โท ์ ๊ทํ ์์๋ฅผ ๋ชจ๋ฅธ๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ฌ์ ๋ถํฌ์ ๊ฐ๋ฅ๋ ํจ์์ ๊ณฑ์ ์ด์ฉํ์ฌ ์ฌํ๋ถํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๊ฒ์ด๋ค. Random walk MH ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฑํด๋ณด์. ์๋์ ์ฝ๋๋ R์ ์ด์ฉํ Random walk MH ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ๊ฒ์ด๋ค.
In:
log_g <- function(mu, n, x_bar) {
mu2 <- mu^2
return(n * (x_bar * mu - mu2 / 2.0) - log(1.0 + mu2))
}
mh_sampl <- function(n_data, x_bar, n_iter, mu_init, prop_sd) {
mu_out <- numeric(n_iter)
accpt_cnt <- 0
mu_now <- mu_init
log_g_now <- log_g(mu_now, n_data, x_bar)
for (i in 1:n_iter) {
mu_cand <- rnorm(1, mu_now, prop_sd)
log_cand <- log_g(mu_cand, n_data, x_bar)
log_alpha <- log_cand - log_g_now
alpha <- exp(log_alpha)
if (runif(1) < alpha) {
mu_now <- mu_cand
accpt_cnt <- accpt_cnt + 1
log_g_now <- log_cand
}
mu_out[i] <- mu_now
}
return(list(mu = mu_out, accpt_rate = accpt_cnt/n_iter))
}
โท ๊ตฌํ ๊ณผ์ ์์ alpha๋ฅผ ๊ตฌํ๊ธฐ ์ํด ์ฝ๊ฐ์ ํธ๋ฆญ์ ์ฌ์ฉํ์๋ค. alpha๋ฅผ ๊ตฌํ ๋, ๋ก๊ทธ๋ฅผ ์ทจํ์ฌ ๊ณ์ฐํ ๋ค, ๋ค์ ์ง์๋ฅผ ํตํด ์๋์ alpha๋ก ๋ฐ๊ฟ์ฃผ์๋ค. ์ด๋ ๊ณ์ฐ๊ณผ์ ์ค ๋๋ฌด ์์ ์ซ์๋ก ์ธํด ๋ฐ์ํ๋ ๋ฐ์ฌ๋ฆผ ์ค๋ฅ(Rounding error)๋ฅผ ๋ง๊ธฐ ์ํจ์ด๋ค.
โท ์ ์ ๋ถํฌ๋ก ์ ๊ท๋ถํฌ๋ฅผ ์ฌ์ฉํ์๋๋ฐ, ์ด๋ alpha๋ฅผ ๊ณ์ฐ์ ํธ๋ฆฌํ๊ฒ ํด์ค๋ค. ์๋ํ๋ฉด alpha์ ๋ถ์ ๋ฐ ๋ถ๋ชจ์ ์ ์ ๋ถํฌ์ ๋ฐ๋ฅธ ํ๋ฅ ์ด ๊ฐ์์ ธ ์์๋๊ธฐ ๋๋ฌธ์ด๋ค.
In:
x <- c(1.2, 1.4, -0.5, 0.3, 0.9, 2.3, 1.0, 0.1, 1.3, 1.9)
x_bar <- mean(x)
n_data <- length(x)
library(coda)
post_sampl <- mh_sampl(n_data = n_data, x_bar = x_bar, n_iter = 1e4, mu_init = 0.0, prop_sd = 1)
traceplot(as.mcmc(post_sampl$mu))
Out:
โท ์์ ๊ทธ๋ฆผ์ ๊ฐ ๋ฐ๋ณต ์ํ์ ์งํ์ ๋ฐ๋ฅธ ์์ฑ๋ mu์ ๋ณํ๋ฅผ ๋ํ๋ธ ๊ฒ์ด๋ค. ํน์ ๊ตฌ๊ฐ์์ ๋์ผํ mu๋ก ์ ์งํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๋ alpha๊ฐ 1๋ณด๋ค ์์ ๊ฒฝ์ฐ, alpha์ ํ๋ฅ ๋ก ์๋ฝ ๋๋ ๊ฑฐ์ ํ๊ฒ(Accept or reject) ๋๋๋ฐ, ๊ฑฐ์ ์ด ๋ฐ๋ณต๋์ด ๋ํ๋ ๊ฒฐ๊ณผ์ด๋ค.
In:
str(post_sampl)
Out:
List of 2
$ mu : num [1:1000] 0.54 0.54 0.54 0.54 0.54 ...
$ accpt_rate: num 0.347
โท ํ์ฉ ๋น์จ์ด 34.7%์ธ ๊ฒ์ผ๋ก ๋ํ๋ฌ๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ฉ ๋น์จ์ 23 ~ 50%๊ฐ ์ ๋นํ๋ค๊ณ ํ๋ค.
MH ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ถํฐ ์์ฑ๋ ๋ฐ์ดํฐ์ ์ค์ ์ฌํ๋ถํฌ์์ ์ฐจ์ด๋ฅผ ํ์ธํด๋ณด์.
In:
plot(density(post_sampl$mu, adjust = 2.5), main = '', xlim = c(-1.0, 3.0), ylim = c(0, 1.2), xlab = expression(mu))
curve(dt(x = x, df = 1), lty = 2, add = T) # prior for mu
curve(0.017 * exp(log_g(mu = x, n = n_data, x_bar = x_bar)), from = -1.0, to = 3.0, add = TRUE, col = 'blue')
Out:
โท ํ๋์ ์ ์ค์ ์ฌํ๋ถํฌ๋ฅผ ๋ํ๋ด๊ณ , ๊ฒ์ ์ ์ ์์ฑํ ๋ฐ์ดํฐ๋ก๋ถํฐ ๋ฐ๋ ์ถ์ (Density estimation)์ ํตํด ์์ฑํ ์ ์ด๋ค. ์ ์ ์ ์ฌ์ ๋ถํฌ๋ฅผ ๋ํ๋ธ๋ค.
โท ๋น๊ต์ ํ๋์ ๊ณผ ๊ฒ์ ์ ์ด ๋น์ทํ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์์ฑ ๋ฐ์ดํฐ์ ๊ฐฏ์๋ฅผ ๋๋ฆฐ๋ค๋ฉด ์ค์ ์ฌํ๋ถํฌ์ ๋ ๊ฐ๊น์ด ๋ถํฌ๊ฐ ๋ํ๋ ๊ฒ์ด๋ค.
Reference:
"Bayesian Statistics: From Concept to Data AnalysisTechniques and Models," Coursera, https://www.coursera.org/learn/bayesian-statistics/.
'Statistics > Bayesian Statistics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊น์ค ์ํ๋ง(Gibbs sampling) (0) | 2020.08.14 |
---|---|
JAGS(Just Another Gibbs Sampler) ์ฌ์ฉ๋ฒ (0) | 2020.08.11 |
๋ชฌํ ์นด๋ฅผ๋ก ์ถ์ (Monte-carlo estimation) (0) | 2020.08.09 |
๊ทธ๋ํ ํํ(Graphical representation) (0) | 2020.08.09 |
์ ํ๋ฆฌ ์ฌ์ ๋ถํฌ(Jeffrey's prior) (0) | 2020.08.06 |