๋ค์์ ์์ ๋ฅผ ํตํด ๊ณ์ธต์ ๋ชจ๋ธ(Hierarchical model)์ ํน์ง์ ์์๋ณด๊ณ , ๋ชจ๋ธ๋ง ๊ฒฐ๊ณผ์ ๋ํด ๋ถ์ํด ๋ณด์.
๋ฌธ์ )
์น์ด์ ์์ฐํ๋ 5๊ฐ์ ๊ณต์ฅ์ด ์๋ค. ๊ฐ ๊ณต์ฅ์์ ์์ฐ๋ ์น์ด ๊ณผ์ 1๊ฐ์ ๋ฐํ ์๋ ์ด์ฝ์นฉ ๊ฐ์๊ฐ ํฌ์์ก ๋ถํฌ๋ฅผ ๋ฐ๋ฅด๊ณ , ํฌ์์ก ๋ถํฌ์ ๋ชจ์๋ ๊ฐ๋ง๋ถํฌ๋ฅผ ๋ฐ๋ฅธ๋ค. cookies ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์น์ด ๊ณผ์๊ฐ ์์ฐ๋ ๋, ๋ฐํ ์๋ ์ด์ฝ์นฉ ๊ฐ์์ ๋ํ ๋ชจ๋ธ๋ง์ ์ํํ ํ, ๋ถ์ํ์์ค.
ํ์ด)
โท ์์ ๋ฌธ์ ์ ๋ํด ํฌ๊ฒ 3๊ฐ์ง ๋ชจ๋ธ๋ง ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
(1) Fully independent model: ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ ๋ฆฝ์ด๋ผ ๊ฐ์ ํ๊ณ , ํ๋์ ํฌ์์ก ๋ชจ๋ธ์ ๋ง๋๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฐ ๊ณต์ฅ๋ณ ์ฐจ์ด์ ๊ฐ์ ๊ณต์ฅ์์ ์์ฐ๋ ์น์ด์ ๋น์ทํ ํน์ฑ์ ๊ณ ๋ คํ์ง ๋ชปํ๋ค๋ ํ๊ณ๊ฐ ์๋ค.
(2) Seperate model: ๊ฐ ๊ณต์ฅ์์ ์์ฐ๋ ์น์ด์ ๋ํ ๊ฐ๋ณ ๋ชจ๋ธ์ ๋ง๋๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฐ ๋ชจ๋ธ์ ๋ชจ์๋ฅผ ์ถ์ ํ๋๋ฐ, ๋ค๋ฅธ ๊ณต์ฅ์์ ์์ฐ๋ ์น์ด์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ง ๋ชปํ๋ค๋ ํ๊ณ๊ฐ ์๋ค.
(3) Location dependent model: ๊ฐ ๊ณต์ฅ๋ณ ํฌ์์ก ๋ถํฌ์ ๋ชจ์๋ฅผ ๋ฐ๋ก ์ถ์ ํ๊ณ , ๊ฐ ๋ชจ์๋ ๊ฐ๋ง๋ถํฌ๋ฅผ ๋ฐ๋ฅธ๋ค๊ณ ํ์์ ๋, ๊ฐ๋ง๋ถํฌ์ ๋ ์ด๋ชจ์(Hyperparameter)๊ฐ ๊ณตํต์ ์ผ๋ก ๊ฐ์ ๋ถํฌ๋ฅผ ๋ฐ๋ฅธ๋ค๊ณ ์ ํ์ฌ ํ๋์ ๋ชจ๋ธ๋ก ๋ํ๋ด๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ํ๋์ ๋ชจ๋ธ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ฉฐ, ๊ณต์ฅ๋ณ ์์ฐ๋ ์น์ด์ ํน์ฑ์ ๋ฐ์ํ ์ ์๋ค.
โถ ์์ Location dependent model๊ณผ One-way ANOVA๋ ๋น์ทํ ํํ๋ฅผ ๊ฐ์ง ๊ฒ์ ์ ์ ์๋๋ฐ, One-way ANOVA๋ ๋ชจ์์ ๋ถํฌ๊ฐ ๊ณ ์ ๋(Fixed) ์ด๋ชจ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ์ ์์ Location dependent model๊ณผ ๋ค๋ฅด๋ค๊ณ ํ ์ ์๋ค.
Location dependent model์ ๊ทธ๋ํ ํํ(Graphical representation)์ ๋ค์๊ณผ ๊ฐ๋ค.
์ธ ๋ชจ๋ธ๋ง ๋ฐฉ๋ฒ ์ค ๊ณ์ธต์ ํฌ์์ก-๊ฐ๋ง ๋ชจ๋ธ์ ํตํด ๋ถ์์ ํ ๊ฒ์ด๋ค. ์ํ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๋ฐ์ดํฐ ํ์ธ
2. ๋ชจ๋ธ๋ง
3. ๋ชจ๋ธ ํ์ธ
4. ๋ชจ๋ธ ์์ธก ๋ฐ ๋ถ์
1. ๋ฐ์ดํฐ ํ์ธ
In:
data = read.table(file = '../input/cookies.txt', header = T)
boxplot(chips ~ location, data = data)
Out:
โท ๋ฐ์ดํฐ๋ ์น์ด 1๊ฐ์ ํฌํจ๋ ์ด์ฝ์นฉ์ ๊ฐฏ์์ธ chips์ ์์ฐ๊ณต์ฅ์ ์๋ฏธํ๋ location์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
โท ๊ณต์ฅ๋ณ ์์๋ ์น์ด์ ์ด์ฝ์นฉ ๊ฐฏ์๊ฐ ์๋ก ๋ค๋ฅธ ๋ถํฌ๋ฅผ ๊ฐ์ง๊ณ ์์์ ํ์ธํ ์ ์๋ค.
2. ๋ชจ๋ธ๋ง
In:
library(rjags)
mod_string = " model {
for (i in 1:length(chips)) {
chips[i] ~ dpois(lam[location[i]])
}
for (j in 1:max(location)) {
lam[j] ~ dgamma(alpha, beta)
}
mu ~ dgamma(2.0, 1.0/5.0)
sig ~ dexp(1.0)
alpha = mu^2 / sig^2
beta = mu / sig^2
} "
data_jags = as.list(data)
params = c('lam', 'mu', 'sig')
mod = jags.model(textConnection(mod_string), data = data_jags, n.chains = 3)
update(mod, 1e3)
mod_sim = coda.samples(model = mod, variable.names = params, n.iter = 5e3)
mod_comb_sim = as.mcmc(do.call(rbind, mod_sim))
Out:
Compiling model graph
Resolving undeclared variables
Allocating nodes
Graph information:
Observed stochastic nodes: 150
Unobserved stochastic nodes: 7
Total graph size: 315
Initializing model
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100%
|**************************************************| 100%
|**************************************************| 100%
โท alpha์ beta์ ๋ํ์ฌ Re-parameterization์ ํ์ฌ ๋ถํฌ๋ฅผ ๊ฐ์ ํ์๋ค.
โท ์ด์ธ์ ์ฝ๋์ ๋ํ ๋ด์ฉ์ ์๋ตํ๋๋ก ํ๊ฒ ๋ค. JAGS์ ์ฌ์ฉ๋ฒ์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค๋ฉด, ๋ค์์ ํฌ์คํ ์ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
3. ๋ชจ๋ธ ํ์ธ
In:
gelman.diag(mod_sim)
Out:
Potential scale reduction factors:
Point est. Upper C.I.
lam[1] 1 1
lam[2] 1 1
lam[3] 1 1
lam[4] 1 1
lam[5] 1 1
mu 1 1
sig 1 1
Multivariate psrf
1
โท ๋ชจ๋ ๋ชจ์์ ๊ฒฐ๊ณผ๊ฐ 1๋ก ์๋ ดํ๊ณ ์๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
4. ๋ชจ๋ธ ์์ธก ๋ฐ ๋ถ์
In:
post_params = colMeans(mod_comb_sim)
y_hat = rep(post_params[1:5], each = 30)
resid = data$chips - y_hat
plot(jitter(y_hat), resid)
var(resid[y_hat < 7])
var(resid[y_hat > 11])
Out:
[1] 6.447126
[1] 13.72414
โท ์์ธก๊ฐ์ธ y hat์ด ์ฆ๊ฐํ ์๋ก ๋ถ์ฐ์ด ์ฆ๊ฐํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๋ ํฌ์์ก ๋ชจ๋ธ์ ์ฌ์ฉํ์๊ธฐ ๋๋ฌธ์ ๋ํ๋ ๊ฒฐ๊ณผ์ด๋ค.
In:
summary(mod_sim)
Out:
Iterations = 2001:7000
Thinning interval = 1
Number of chains = 3
Sample size per chain = 5000
1. Empirical mean and standard deviation for each variable,
plus standard error of the mean:
Mean SD Naive SE Time-series SE
lam[1] 9.283 0.5359 0.004376 0.004595
lam[2] 6.227 0.4580 0.003740 0.004430
lam[3] 9.523 0.5440 0.004442 0.004543
lam[4] 8.939 0.5327 0.004349 0.004337
lam[5] 11.762 0.6196 0.005059 0.005693
mu 9.106 0.9866 0.008055 0.012361
sig 2.078 0.7131 0.005823 0.012066
2. Quantiles for each variable:
2.5% 25% 50% 75% 97.5%
lam[1] 8.271 8.921 9.269 9.633 10.375
lam[2] 5.374 5.907 6.216 6.530 7.166
lam[3] 8.495 9.143 9.511 9.887 10.601
lam[4] 7.934 8.571 8.923 9.292 10.000
lam[5] 10.593 11.337 11.752 12.177 13.018
mu 7.239 8.492 9.066 9.694 11.165
sig 1.093 1.574 1.949 2.423 3.798
โท 5๋ฒ์งธ ๊ณต์ฅ์ lambda๊ฐ ๊ฐ์ฅ ํฐ ๊ฒ์ผ๋ก ๋ํ๋ฌ๋ค.
์ฌํ์์ธก๋ถํฌ๋ฅผ ํ์ธํ์ฌ ๋ณด์.
In:
n_sim = nrow(mod_comb_sim)
lam_pred = rgamma(n = n_sim,
shape = mod_comb_sim[, 'mu']^2/mod_comb_sim[, 'sig']^2,
rate = mod_comb_sim[, 'mu']/mod_comb_sim[, 'sig']^2)
hist(lam_pred)
Out:
๊ฐ ๊ณต์ฅ๋ณ ์ฌํ์์ธก๋ถํฌ๋ฅผ ํ์ธํ์ฌ ๋ณด์.
In:
y_pred_1 = rpois(n_sim, lambda = mod_comb_sim[, 'lam[1]'])
plot(density(y_pred_1, bw = 1), col = 'red', ylim = c(0, 0.15), main = NA)
y_pred_2 = rpois(n_sim, lambda = mod_comb_sim[, 'lam[2]'])
lines(density(y_pred_2, bw = 1), col = 'blue')
y_pred_3 = rpois(n_sim, lambda = mod_comb_sim[, 'lam[3]'])
lines(density(y_pred_3, bw = 1), col = 'green')
y_pred_4 = rpois(n_sim, lambda = mod_comb_sim[, 'lam[4]'])
lines(density(y_pred_4, bw = 1), col = 'yellow')
y_pred_5 = rpois(n_sim, lambda = mod_comb_sim[, 'lam[5]'])
lines(density(y_pred_5, bw = 1), col = 'black')
Out:
โท ๊ฐ ๊ณต์ฅ๋ณ ์ฌํ์์ธก๋ถํฌ๊ฐ ์๋ก ๋ค๋ฅธ ๊ฒ์ ํ์ธํ ์ ์๊ณ , 5๋ฒ์งธ ๊ณต์ฅ์ ํ๊ท ์ด ๊ฐ์ฅ ํฐ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โท ์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ํด ์์ฑํ ์ฌํ์์ธก๋ถํฌ์ ์ํ์ ์ด์ฉํ์ฌ ๋ค์ํ ๊ฐ์ค ๊ฒ์ฆ์ด ๊ฐ๋ฅํ๋ค. ์๋ฅผ ๋ค์ด, 1๋ฒ์งธ ๊ณต์ฅ์์ ์์ฐํ ์น์ด์ ์ด์ฝ์นฉ์ ๊ฐฏ์๊ฐ 2๋ฒ์งธ ๊ณต์ฅ์์ ์์ฐํ ์ด์ฝ์นฉ๋ณด๋ค ๋ง์ ๊ฐ๋ฅ์ฑ, 1๋ฒ์งธ ๊ณต์ฅ์์ ์์ฐํ ์น์ด์ ์ด์ฝ์นฉ์ ๊ฐฏ์๊ฐ 7๊ฐ๋ณด๋ค ์์ ํ๋ฅ ๋ฑ์ด ์๋ค.
โถ ๊ณ์ธต์ ๋ชจ๋ธ์ ์ฅ์ ์ ํ๋์ ๋ชจ๋ธ๋ก๋ถํฐ ๋ค์ํ ๊ฐ์ค์ ๋ํ ๋ถ์์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ์์ค ๋๋ ์๊ฐ์์ ์ป์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๋ถ์ํ๋ ๋ฉํ ๋ถ์(Meta analysis)์ ํ์ฉ๋๋ค.
Reference:
"Bayesian Statistics: From Concept to Data AnalysisTechniques and Models," Coursera, https://www.coursera.org/learn/bayesian-statistics/.
'Statistics > Bayesian Statistics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์์ ํธ ๋ชจ๋ธ(Random intercept model) (0) | 2020.09.07 |
---|---|
Bayesian linear model for New York air quality measurements (0) | 2020.09.01 |
๋ฒ ์ด์ง์ ํฌ์์ก ํ๊ท(Bayesian poisson regression) (0) | 2020.08.21 |
๋ฒ ์ด์ง์ ๋ก์ง์คํฑ ํ๊ท(Bayesian logistic regression) (0) | 2020.08.19 |
DIC(Deviance Information Criterion) (0) | 2020.08.18 |