R์ car ํจํค์ง์ Leihardt ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๋ฒ ์ด์ง์ ์ ํ ํ๊ท(Bayesian linear regression) ๋ถ์์ ์ํํ ๊ฒ์ด๋ค. ์ํ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๋ฐ์ดํฐ ํ์ธ
2. ๋ชจ๋ธ๋ง
3. ๋ชจ๋ธ ํ์ธ
4. ์์ฐจ ๋ถ์
1. ๋ฐ์ดํฐ ํ์ธ
In:
library(car)
data('Leinhardt')
pairs(Leinhardt)
Out:
โท Leihardt ๋ฐ์ดํฐ๋ ์ฐ์ํ ๋ณ์์ธ income, infant, region๊ณผ ๋ฒ์ฃผํ ๋ณ์์ธ oil๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
โท income๊ณผ infant๊ฐ ๋น์ ํ์ ์ธ ๊ด๊ณ๋ฅผ ๋ํ๋ด๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ ํ๋ชจ๋ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ์๊ฐ ์ ํ๊ด๊ณ๋ฅผ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋ ๋ณ์์ ๋ก๊ทธ๋ฅผ ์ทจํ์ฌ ๋ณํํ ๊ฒ์ด๋ค.
In:
Leinhardt$log_income = log(Leinhardt$income)
Leinhardt$log_infant = log(Leinhardt$infant)
plot(log_infant ~ log_income, data = Leinhardt)
Out:
โท ์์ ๊ทธ๋ฆผ์ income๊ณผ infant์ ๋ก๊ทธ๋ฅผ ์ทจํ ํ, ์๊ฐํํ ๋ชจ์ต์ด๋ค. ์ ํ๊ด๊ณ๊ฐ ๋ํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
2. ๋ชจ๋ธ๋ง
infant๋ฅผ ์ข ์๋ณ์๋ก, income์ ๋ ๋ฆฝ๋ณ์๋ก ๋์ด ๋ฒ ์ด์ง์ ์ ํํ๊ท ๋ถ์์ ํ ๊ฒ์ด๋ค. ๋ชจ๋ธ์ ๋ํ ๊ทธ๋ํ ํํ(Graphical representation)์ ๋ค์๊ณผ ๊ฐ๋ค.
โท beta0, ..., betak์ sigma^2๋ ํน์ ๋ถํฌ๋ฅผ ๋ฐ๋ฅด๊ณ ์๊ณ , ๊ฐ๋ณ ๊ด์ธก์น yi๋ ๋ ๋ฆฝ์ด๋ค.
โท beta์ ๋ถํฌ๋ฅผ ๋ผํ๋ผ์ค ๋ถํฌ(Laplace distribution)๋ก ๋๋ฉด LASSO(Least Absolute Shrinkage and Selection Operator) ํ๊ท๋ฅผ ๋ชจ๋ธ๋งํ ์ ์๋ค. LASSO๋ ๋ชจ์์ ์ฌ์ ๋ถํฌ๋ก ๋ผํ๋ผ์ค ๋ถํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ชจ์๊ฐ 0์ธ ์ง์ ์ ์ ํธ(Favor)ํ๋ค. ๋ฐ๋ผ์ ๋ชจ๋ธ๋ง ๊ณผ์ ์์ ๋ณ์ ์ ํ์ ํ ์ ์๋ค๋ ํน์ง์ด ์๋ค.
beta์ ์ฌ์ ๋ถํฌ๋ฅผ ์ ๊ท๋ถํฌ๋ก, sigma^2๋ฅผ ์ญ๊ฐ๋ง๋ถํฌ๋ก ๋๊ณ , R์ JAGS๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ธ๋ง์ ํ ๊ฒ์ด๋ค.
In:
library(rjags)
data = na.omit(Leinhardt)
mod_string = " model {
for (i in 1:n) {
y[i] ~ dnorm(mu[i], prec)
mu[i] = b[1] + b[2]*log_income[i]
}
for (j in 1:2) {
b[j] ~ dnorm(0.0, 1.0/1.0e6)
}
prec ~ dgamma(5.0/2.0, 5.0*10.0/2.0)
sig2 = 1.0/prec
sig = sqrt(sig2)
} "
data_jags = list(y = data$log_infant,
n = nrow(data),
log_income = data$log_income)
params = c('b', 'sig')
inits = function() {
inits = list('b' = rnorm(2, 0.0, 100.0),
'prec' = rgamma(1, 1.0, 1.0))
}
mod = jags.model(textConnection(mod_string),
data = data_jags,
inits = inits,
n.chains = 3)
update(mod, 1e3)
mod_sim = coda.samples(model = mod,
variable.names = params,
n.iter = 1e4)
mod_comb_sim = do.call(rbind, mod_sim)
Out:
|**************************************************| 100%
|**************************************************| 100%
โท ์์ ์ฝ๋์ ๋ํ ๋ด์ฉ์ ์๋ตํ๋๋ก ํ๊ฒ ๋ค. JAGS์ ์ฌ์ฉ๋ฒ์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค๋ฉด, ๋ค์์ ํฌ์คํ ์ ํตํด ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
3. ๋ชจ๋ธ ํ์ธ
๋ง๋ฅด์ฝํ ์ฒด์ธ์ ์๋ ด ๊ณผ์ ์ trace plot์ ํตํด ํ์ธํ์ฌ ๋ณด์.
In:
plot(mod_sim)
Out:
โท b[1], b[2], sig์ ๋ง๋ฅด์ฝํ ์ฒด์ธ์ด ์๋ ดํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โถ trace plot์ ์๊น์ด ๋ค๋ฅธ ์ ์ ์๋ก ๋ค๋ฅธ ์ด๊ธฐ๊ฐ์ ํตํ ์๋ ด ๊ณผ์ ์ ๋ํ๋ด๊ธฐ ์ํ ๊ฒ์ด๋ค.
โถ ์ค๋ฅธ์ชฝ์ ๊ทธ๋ํ๋ ๊ฐ ๋ชจ์์ ์์ฑ๋ ๋ฐ์ดํฐ๋ก๋ถํฐ ์ฌํ๋ถํฌ๋ฅผ ์ถ์ ํ ๊ฒฐ๊ณผ์ด๋ค.
Gelman-Rubin diagostic์ ํตํด ๋ง๋ฅด์ฝํ ์ฒด์ธ์ด ์๋ ดํ์๋์ง ํ์ธํ์ฌ ๋ณด์.
In:
gelman.diag(mod_sim)
Out:
Potential scale reduction factors:
Point est. Upper C.I.
b[1] 1 1.01
b[2] 1 1.01
sig 1 1.00
Multivariate psrf
1
โท ๋ชจ๋ ๊ฒฐ๊ณผ๊ฐ 1๋ก ๋ง๋ฅด์ฝํ ์ฒด์ธ์ด ์๋ ดํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์์ฑ๋ ๋ฐ์ดํฐ์ ์๊ธฐ์๊ด์ฑ์ ํ์ธํ์ฌ ๋ณด์.
In:
autocorr.diag(mod_sim)
Out:
b[1] b[2] sig
Lag 0 1.00000000 1.00000000 1.000000000
Lag 1 0.95097734 0.95103631 0.030863049
Lag 5 0.78000619 0.77872439 -0.003679779
Lag 10 0.61439905 0.61215120 0.007809461
Lag 50 0.07377375 0.07599907 0.003517834
โท ์ธ ๋ชจ์ ๋ชจ๋ ์์ฐจ๊ฐ 50์ธ ์ง์ ์์๋ ์๊ธฐ์๊ด์ฑ์ด ๊ฑฐ์ ๋ํ๋์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์์ฑ๋ ๋ฐ์ดํฐ์ ESS(Effective Sample Size)๋ฅผ ์์๋ณด์.
In:
effectiveSize(mod_sim)
Out:
b[1] b[2] sig
723.2895 722.9372 27469.2788
โท b[1]๊ณผ b[2]๋ ESS๊ฐ ์ฝ 700์ฌ๊ฐ, sig๋ 27,000์ฌ๊ฐ์ธ ๊ฒ์ผ๋ก ๋ํ๋ฌ๋ค. ์ด ์์ฑ๋ ๋ฐ์ดํฐ์ ์๊ฐ ๊ฐ ๋ชจ์๋ณ๋ก 30,000๊ฐ์ธ ๊ฒ์ ๊ฐ์ํ๋ฉด b[1]๊ณผ b[2]์ ESS๋ ์๋์ ์ผ๋ก sig์ ๋นํด ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
โท b[1]๊ณผ b[2]์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ๋ชจ์์ ํ๊ท ์ ๊ตฌํ๋ค๋ฉด ๊ด์ฐฎ์ง๋ง, 95% ์ ์ฉ๊ตฌ๊ฐ์ ๊ตฌํ๊ธฐ์๋ ESS๊ฐ ๋ถ์กฑํ ๊ฒ์ ์ ์ ์๋ค. ์ด์ ๋ํ ๊ธฐ์ค์ raftery.diag()๋ฅผ ์ด์ฉํ์ฌ ํ์ธํ ์ ์๋ค.
์์ฑ๋ ๋ฐ์ดํฐ์ ์์ฝ๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ฌ ๋ณด์.
In:
summary(mod_sim)
Out:
Iterations = 1001:11000
Thinning interval = 1
Number of chains = 3
Sample size per chain = 10000
1. Empirical mean and standard deviation for each variable,
plus standard error of the mean:
Mean SD Naive SE Time-series SE
b[1] 7.1775 0.44692 0.0025803 0.0166242
b[2] -0.5170 0.07236 0.0004178 0.0026928
sig 0.9709 0.06848 0.0003953 0.0004135
2. Quantiles for each variable:
2.5% 25% 50% 75% 97.5%
b[1] 6.3027 6.8773 7.1805 7.4734 8.0663
b[2] -0.6600 -0.5649 -0.5177 -0.4683 -0.3749
sig 0.8485 0.9227 0.9669 1.0142 1.1145
4. ์์ฐจ(Residual) ๋ถ์
์์ฐจ ๋ถ์์ ํตํด ๋ชจ๋ธ์ ๊ฐ์ ์ ๋ง์กฑํ๋์ง ํ์ธํ์ฌ ๋ณด์.
In:
X = cbind(rep(1.0, data_jags$n), data_jags$log_income)
post_params = colMeans(mod_comb_sim)
yhat = drop(X %*% post_params[1:2])
resid = data_jags$y - yhat
plot(resid)
plot(yhat, resid)
qqnorm(resid)
Out:
โท ์ฒซ ๋ฒ์งธ ๊ทธ๋ฆผ์ ์์ฐจ์ ๋ถํฌ๋ฅผ ๋ํ๋ธ ๊ฒ์ด๋ค. ์ถ์ธ(Trend)๋ ํจํด์ ํ์ธํ ์ ์๋ค. ๋ค๋ง, ์์ฐจ์ ํ์คํธ์ฐจ์ 2๋ฐฐ ์ด์ ํฐ ๋ ๊ฐ์ ์ด์์น(Outlier)๊ฐ ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โท ๋ ๋ฒ์งธ ๊ทธ๋ฆผ์ ์์ธกํ ๊ฒฐ๊ณผ์ ์์ฐจ์ ๊ด๊ณ๋ฅผ ๋ํ๋ธ ๊ฒ์ด๋ค. ์ถ์ธ๋ ํจํด์ ํ์ธํ ์ ์๊ณ , ์์ฐจ์ ๋๋ต์ ์ธ ํ๊ท ์ด 0์์ ํ์ธํ ์ ์๋ค. ํ์ง๋ง ์์ธก ๊ฒฐ๊ณผ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ถ์ฐ์ด ์ฆ๊ฐํ๋ ๊ฒ๊ณผ ์์ ๊ฒฐ๊ณผ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๊ฐ์ ์ด์์น๊ฐ ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ ์ ์์ผ๋ฏ๋ก ์๋ฒฝํ ์ ํํ๊ท์ ๊ฐ์ ์ ๋ง์กฑํ๋ค ๋ณด๊ธฐ ์ด๋ ต๋ค.
โท ์ธ ๋ฒ์งธ ๊ทธ๋ฆผ์ ์์ฐจ๊ฐ ์ ๊ท๋ถํฌ๋ฅผ ๋ฐ๋ฅด๋์ง ํ์ธํ๊ธฐ ์ํ ์ ๊ทํ๋ฅ ๊ทธ๋ฆผ(Q-Q plot)์ด๋ค. ๋์ฒด์ ์ผ๋ก ์ง์ ์ ํํ๋ฅผ ๋์ง๋ง, ๋ง์ง๋ง ๋ ์ ์ ์ง์ ์์ ๋ฒ์ด๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๋ ์์ ๊ทธ๋ฆผ์์ ๋ณด์๋ค์ํผ ๋ ๊ฐ์ ์ด์์ ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ผ๋ ๊ฒ์ ์ถ๋ก ํ ์ ์๋ค.
Reference:
"Bayesian Statistics: From Concept to Data AnalysisTechniques and Models," Coursera, https://www.coursera.org/learn/bayesian-statistics/.
'Statistics > Bayesian Statistics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฒ ์ด์ง์ ๋ก์ง์คํฑ ํ๊ท(Bayesian logistic regression) (0) | 2020.08.19 |
---|---|
DIC(Deviance Information Criterion) (0) | 2020.08.18 |
MCMC(Markov Chain Monte-Carlo)์ ์๋ ด(Convergence) (0) | 2020.08.16 |
๊น์ค ์ํ๋ง(Gibbs sampling) (0) | 2020.08.14 |
JAGS(Just Another Gibbs Sampler) ์ฌ์ฉ๋ฒ (0) | 2020.08.11 |