๊น์ค ์ํ๋ง(Gibbs sampling)์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค. ๋ค๋ฃฐ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๊น์ค ์ํ๋ง
2. ๊น์ค ์ํ๋ง์ ์์
1. ๊น์ค ์ํ๋ง
๊น์ค ์ํ๋ง์ Metropolis Hastings(์ดํ MH) ์๊ณ ๋ฆฌ์ฆ์ ํน๋ณํ ํํ๋ก, ์ ์ ๋ถํฌ(Proposal distribution)๋ฅผ ์์ ์ Full conditional distribution๋ก ๋์ด ์ํ๋งํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ, ๊ฐ ์ํ์์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ์ ๋ํด Acceptance probability๋ 1์ด ๋๋ ์ฑ์ง์ ๊ฐ์ง๊ฒ ๋๋ค. ๋ค์์ ์ฆ๋ช ์ ํตํ์ฌ ์ด๋ฅผ ํ์ธํด๋ณด์.
โท ์ ์ ๋ถํฌ๋ฅผ Full conditional posterior๋ก ๋ ์ผ๋ก์จ ๋ฏธ์ธ ๊ท ํ ์กฐ๊ฑด(Detailed balance condition)์ด ์ฑ๋ฆฝํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ alpha๋ฅผ ํตํด ์ ์ดํ๋ฅ (Transition probability)์ ๋ณด์ ํ ํ์ ์์ด, ๋งค ์ํ์์ ์์ฑํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋ค์ด๋ฉด(Accept) ๋๋ค.
๊น์ค ์ํ๋ง์ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
โท ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ์๊ฐ 2๊ฐ์ธ ๊ฒฝ์ฐ์ ๋ํ ๊ฒ์ด๊ณ , ์ด๋ฅผ ์ผ๋ฐํํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ชจ์์ ์ฌํ๋ถํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ ์์ฑ์ ํ ์ ์๋ค.
2. ๊น์ค ์ํ๋ง์ ์์
๋ฌธ์ )
์๋ ๋ชจ๋ธ์ ๋ชจ์์ธ mu์ sigma^2๋ฅผ ์ฌํ๋ถํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์์ค.
ํ์ด)
โท Full joint posterior์ ์ ๋ฆฌํ๋ฉด ์์ ์์ ๊ตฌํ ์ ์๋ค. ์ด๋, ๊ฐ ๋ชจ์์ ๋ํ์ฌ full conditional posterior์ ๊ตฌํ๋ ค๋ฉด Full joint posterior์์ ๊ด์ฌ ๋ชจ์๋ฅผ ์ ์ธํ ๋ค๋ฅธ ๋ชจ์๋ ์์๋ก ์ทจํ๊ณ , ์ด๋ฅผ ํตํด ๋ถํฌ๋ฅผ ์ถ๋ก ํ๋ค. mu์ sigma^2๋ ๋ชจ๋ ์ผค๋ ์ฌ์ ๋ถํฌ๋ก์จ ์ฌ์ ๋ถํฌ์ ์ฌํ๋ถํฌ๊ฐ ๊ฐ์ ๋ถํฌ๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฐ ๋ชจ์์ ์ฌํ๋ถํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ธฐ ์ํด ๊น์ค ์ํ๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ ๋ณด์.
In:
update_mu = function(n, ybar, sig2, mu_0, sig2_0) {
sig2_1 = 1.0 / (n / sig2 + 1.0 / sig2_0)
mu_1 = sig2_1 * (n * ybar / sig2 + mu_0 / sig2_0)
return(rnorm(n = 1, mean = mu_1, sd = sqrt(sig2_1)))
}
update_sig2 = function(n, y, mu, nu_0, beta_0) {
nu_1 = nu_0 + n / 2.0
sumsq = sum( (y - mu)^2 )
beta_1 = beta_0 + sumsq / 2.0
out_gamma = rgamma(n = 1, shape = nu_1, rate = beta_1)
return(1.0 / out_gamma)
}
gibbs_sampl = function(y, n_iter, init, prior) {
ybar = mean(y)
n = length(y)
mu_out = numeric(n_iter)
sig2_out = numeric(n_iter)
mu_now = init$mu
for (i in 1:n_iter) {
sig2_now = update_sig2(n = n,
y = y,
mu = mu_now,
nu_0 = prior$nu_0,
beta_0 = prior$beta_0)
mu_now = update_mu(n = n,
ybar = ybar,
sig2 = sig2_now,
mu_0 = prior$mu_0,
sig2_0 = prior$sig2_0)
sig2_out[i] = sig2_now
mu_out[i] = mu_now
}
return(cbind(mu = mu_out, sig2 = sig2_out))
}
โท update_mu()์ update_sigma()๋ฅผ ๋ง๋ค์ด ๋ชจ์๋ณ ์ ๋ฐ์ดํธ๋ฅผ ํ ์ ์๋๋ก ํ๋ค.
โท gibs_sampl()์ ๊น์ค ์ํ๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ์ํ ํ์๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.
In:
y = c(1.2, 1.4, -0.5, 0.3, 0.9, 2.3, 1.0, 0.1, 1.3, 1.9)
ybar = mean(y)
n = length(y)
prior = list()
prior$mu_0 = 0.0
prior$sig2_0 = 1.0
prior$n_0 = 2.0
prior$s2_0 = 1.0
prior$nu_0 = prior$n_0 / 2.0
prior$beta_0 = prior$n_0 * prior$s2_0 / 2.0
init = list()
init$mu = 0.0
library('coda')
post_sampl = gibbs_sampl(y = y, n_iter = 1e3, init = init, prior = prior)
plot(as.mcmc(post_sampl))
summary(as.mcmc(post_sampl))
โท y๋ ์ฌํ๋ถํฌ๋ฅผ ๊ตฌํ๊ธฐ ์ํ ๋ฐ์ดํฐ์ด๋ค. prior์ ์ฌ์ ๋ถํฌ์ ๋ชจ์์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ค.
โท init์ ๊น์ค ์ํ๋ง์ ํ๊ธฐ ์ํ ์ด๊ธฐ๊ฐ์ ์ฃผ๊ณ , gibbs_sampl()์ ํตํด ์ฌํ๋ถํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.
โท coda ํจํค์ง๋ฅผ ์ด์ฉํ์ฌ plot()๊ณผ summary()๋ฅผ ํตํด ๊น์ค ์ํ๋ง ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ์ ๋ํด ํ์ธํ ์ ์๋ค.
Out:
Iterations = 1:1000
Thinning interval = 1
Number of chains = 1
Sample size per chain = 1000
1. Empirical mean and standard deviation for each variable,
plus standard error of the mean:
Mean SD Naive SE Time-series SE
mu 0.9188 0.2758 0.008723 0.008723
sig2 0.9065 0.4727 0.014949 0.015826
2. Quantiles for each variable:
2.5% 25% 50% 75% 97.5%
mu 0.3451 0.7533 0.9268 1.093 1.454
sig2 0.3796 0.5968 0.7957 1.085 2.179
Reference:
"Bayesian Statistics: From Concept to Data AnalysisTechniques and Models," Coursera, www.coursera.org/learn/bayesian-statistics/.
"(๊ธฐ๊ณ ํ์ต, Machine Learning) Week 10 Sampling Based Inference | Lecture 7 Gibbs Sampling," AAILab Kaist, www.youtube.com/watch?v=Q9EYGw5QbHc&t=633s.
'Statistics > Bayesian Statistics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฒ ์ด์ง์ ์ ํ ํ๊ท(Bayesian linear regression) (0) | 2020.08.17 |
---|---|
MCMC(Markov Chain Monte-Carlo)์ ์๋ ด(Convergence) (0) | 2020.08.16 |
JAGS(Just Another Gibbs Sampler) ์ฌ์ฉ๋ฒ (0) | 2020.08.11 |
๋ฉํธ๋กํด๋ฆฌ์ค ํค์ด์คํ ์ค ์๊ณ ๋ฆฌ์ฆ(Metropolis-Hastings algorithm) (1) | 2020.08.11 |
๋ชฌํ ์นด๋ฅผ๋ก ์ถ์ (Monte-carlo estimation) (0) | 2020.08.09 |