๋ค์์ ๋ฐ์ดํฐ์ ํ์คํ ๊ทธ๋จ์ ํ์ธํ๊ณ , ์ด๋ฅผ ์ ํฉํ ๋ถํฌ์ ๋ํ์ฌ ์๊ฐํด ๋ณด์.
In:
data = read.csv('../input/mixture.csv', header = F)
y = data$V1
n = length(y)
hist(y, breaks = 20)
Out:
โท ์ผ๋ฐ์ ์ธ ๋ถํฌ์๋ ๋ค๋ฅด๊ฒ -2์ 1 ๊ทผ์ฒ์ ๋ ๊ฐ์ ๋ด์ฐ๋ฆฌ๋ฅผ ํ์ฑํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ์ ๊ท๋ถํฌ, ์ง์๋ถํฌ, ๊ฐ๋ง๋ถํฌ๋ ๋จ๋ดํํ๋ฅผ ๋๊ณ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์์ ๋ฐ์ดํฐ์ ์ ํฉํ ๊ฒฝ์ฐ, ๋ ๊ฐ์ ๋ด์ฐ๋ฆฌ์ ๋ํด ์ ํฉํ ๋ถํฌ๋ฅผ ์ป์ ์ ์๋ค.
โถ ํผํฉ ๋ชจ๋ธ(Mixture model)์ ๋ ๊ฐ์ด์์ ๋ถํฌ๋ฅผ ํฉ์ณ์ ๋ง๋ ๋ชจ๋ธ๋ก ๊ธฐ์กด ๋ถํฌ์ ๋นํ์ฌ ์์ ๋ ๋์ ์ ํฉ์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค. ๋ํ ๋ณต์กํ ๋ถํฌ์ ์ ํฉ๋ฟ๋ง ์๋๋ผ, ๊ตฐ์งํ์ ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค.
์์ ๋ฐ์ดํฐ์ ๋ํ์ฌ ํผํฉ ๋ชจ๋ธ์ ์ด์ฉํ์ฌ ๋ถํฌ๋ฅผ ์ ํฉ์์ผ๋ณด์.
In:
library('rjags')
mod_string = " model {
for (i in 1:length(y)) {
y[i] ~ dnorm(mu[z[i]], prec[z[i]])
z[i] ~ dcat(omega)
}
mu[1] ~ dnorm(-1.0, 1.0/100.0)
mu[2] ~ dnorm(1.0, 1.0/100.0) T(mu[1],)
prec[1] ~ dgamma(1.0/2.0, 1.0*1.0/2.0)
prec[2] ~ dgamma(1.0/2.0, 1.0*1.0/2.0)
sig[1] = sqrt(1.0/prec[1])
sig[2] = sqrt(1.0/prec[2])
omega ~ ddirich(c(1.0, 1.0))
} "
data_jags = list(y = y)
params = c('mu', 'sig', 'omega')
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))
colMeans(mod_comb_sim)
Out:
Compiling model graph
Resolving undeclared variables
Allocating nodes
Graph information:
Observed stochastic nodes: 200
Unobserved stochastic nodes: 205
Total graph size: 817
Initializing model
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100%
|**************************************************| 100%
|**************************************************| 100%
mu[1] mu[2] omega[1] omega[2] sig[1] sig[2]
-2.0624518 1.5038066 0.3987204 0.6012796 1.1804035 1.1344625
โท ํผํฉ ๋ชจ๋ธ์ ๊ตฌ์ฑ์์๋ก์จ ๋ ๊ฐ์ ์ ๊ท๋ถํฌ๋ฅผ ์ด์ฉํ์๋ค. ์์ ๊ฒฐ๊ณผ๋ก๋ถํฐ ์ป์ ํผํฉ ๋ชจ๋ธ์ ์์ ๋ค์๊ณผ ๊ฐ๋ค.
์์ ์์ ์ด์ฉํ์ฌ ํผํฉ ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ฌ ๋ณด์.
In:
dmixnorm = function(x) {
return(0.40 * dnorm(x, -2.06, 1.18) + 0.60 * dnorm(x, 1.50, 1.13))
}
x = seq(-6, 6, by = 0.01)
plot(x, dmixnorm(x), type = 'l', col = 'blue')
hist(y, breaks = 20, freq = F, add = TRUE)
Out:
โท ํผํฉ ๋ชจ๋ธ์ด ๋ ๊ฐ์ ๋ด์ฐ๋ฆฌ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ์ ๋ถํฌ์ ์ ์ ํฉํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
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 |
๊ณ์ธต์ ๋ชจ๋ธ(Hierarchical model) (0) | 2020.08.22 |
๋ฒ ์ด์ง์ ํฌ์์ก ํ๊ท(Bayesian poisson regression) (0) | 2020.08.21 |
๋ฒ ์ด์ง์ ๋ก์ง์คํฑ ํ๊ท(Bayesian logistic regression) (0) | 2020.08.19 |