R์ JAGS(Just Another Gibbs Sampler)์ ์ฌ์ฉ๋ฒ์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค. JAGS๋ฅผ ํตํ ๋ฐ์ดํฐ ์์ฑ ๊ณผ์ ์ 4๋จ๊ณ๋ก ๋๋ ์ ์๋ค.
1. Specify the model
2. Set up the model
3. Run the MCMC(Markov Chain Monte Carlo) sampler
4. Post processing
๋ค์์ ๋ชจ๋ธ์ ์ด๋ฅผ ๋จ๊ณ๋ณ๋ก ์ ์ฉํ์ฌ ์ฌํ๋ถํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ฌ ๋ณด์.
1. Specify the model
In:
library(rjags)
mod_string = " model {
for (i in 1:n) {
y[i] ~ dnorm(mu, 1.0/sig2)
}
mu ~ dt(0.0, 1.0/1.0, 1)
sig2 = 1.0
} "
โท ์์ ์ฝ๋์ ๊ฐ์ด ๊ฐ๋ฅ๋ ํจ์์ ์ฌ์ ๋ถํฌ์ ๋ํด ์ ์ํ๋ค.
โท R๊ณผ JAGS์ ๊ฐ์ฅ ์ฃผ์ํ ์ฐจ์ด๋ ๋ถํฌ ํจ์์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋ค. R์์๋ ํ๊ท ๊ณผ ํ์คํธ์ฐจ๋ฅผ rnorm()์ ๋ชจ์๋ก ๋ฐ์ง๋ง, JAGS์์๋ ํ์คํธ์ฐจ ๋์ ๋ถ์ฐ์ ์ญ์์ธ Precision์ ๋ชจ์๋ก ๋ฐ๋๋ค. ์ด์ธ์ JAGS์ ํจ์์ ๊ด๋ จ๋ ๋ด์ฉ์ ๋ฉ๋ด์ผ(https://web.sgh.waw.pl/~atoroj/ekonometria_bayesowska/jags_user_manual.pdf)์ ํตํด ํ์ธํ ์ ์๋ค.
2. Set up the model
In:
set.seed(777)
y = c(1.2, 1.4, -0.5, 0.3, 0.9,
2.3, 1.0, 0.1, 1.3, 1.9)
n = length(y)
data = list(y = y, n = n)
params = c('mu')
inits = function() {
inits = list('mu' = 0.0)
}
mod = jags.model(textConnection(mod_string),
data = data,
inits = inits)
Out:
Compiling model graph
Resolving undeclared variables
Allocating nodes
Graph information:
Observed stochastic nodes: 10
Unobserved stochastic nodes: 1
Total graph size: 15
Initializing model
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100%
โท ์์ ์ฝ๋์ ๊ฐ์ด ๋ฐ์ดํฐ์ ์ด๊ธฐ๊ฐ์ ์ค์ ํ ๋ค, jags.model()์ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋ค.
3. Run the MCMC sampler
In:
update(mod, 500)
mod_sim = coda.samples(model = mod,
variable.names = params,
n.iter = 1000)
Out:
|**************************************************| 100%
|**************************************************| 100%
โท update()๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ํ์ต์ํจ๋ค. ์ฆ, ์ด๊ธฐ๊ฐ๋ถํฐ ์์ํ์ฌ ์ฃผ์ด์ง Iteration ๋์ ๋ฐ์ดํฐ ์์ฑ๊ณผ์ ์ ๊ฑฐ์น๋ค. ์ด๋, ์์ฑ๋ ๋ฐ์ดํฐ๋ ์ ์ฅ๋์ง ์๋๋ค. ์ด ๊ณผ์ ์ ๋ง๋ฅด์ฝํ ์ฒด์ธ์ด ์ ์ ์ํ(Stationary state)์ ๋๋ฌํ๋๋ก ๋์์ ์ค๋ค.
โท coda.samples()๋ฅผ ์ด์ฉํ์ฌ ํ์ต๋ ๋ชจ๋ธ๋ก๋ถํฐ n.iter๋งํผ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.
4. Post processing
In:
summary(mod_sim)
plot(mod_sim)
Out:
Iterations = 1501:2500
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
0.88664 0.31683 0.01002 0.01315
2. Quantiles for each variable:
2.5% 25% 50% 75% 97.5%
0.2810 0.6746 0.8952 1.0971 1.5277
โท summary()์ plot()์ ์ด์ฉํ์ฌ ์์ฑ๋ ๋ฐ์ดํฐ์ ๋ํ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
Reference:
"Bayesian Statistics: From Concept to Data AnalysisTechniques and Models," Coursera, https://www.coursera.org/learn/bayesian-statistics/.
'Statistics > Bayesian Statistics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MCMC(Markov Chain Monte-Carlo)์ ์๋ ด(Convergence) (0) | 2020.08.16 |
---|---|
๊น์ค ์ํ๋ง(Gibbs sampling) (0) | 2020.08.14 |
๋ฉํธ๋กํด๋ฆฌ์ค ํค์ด์คํ ์ค ์๊ณ ๋ฆฌ์ฆ(Metropolis-Hastings algorithm) (1) | 2020.08.11 |
๋ชฌํ ์นด๋ฅผ๋ก ์ถ์ (Monte-carlo estimation) (0) | 2020.08.09 |
๊ทธ๋ํ ํํ(Graphical representation) (0) | 2020.08.09 |