獨斷論

rjags를 이용한 베이시언Bayesian 입문 5 본문

카테고리 없음

rjags를 이용한 베이시언Bayesian 입문 5

부르칸 2021. 3. 16. 05:33

Introduction to Bayesian inference with JAGS   강의 정리 2

channel9.msdn.com/Events/useR-international-R-User-conferences/useR-International-R-User-2017-Conference/Introduction-to-Bayesian-inference-with-JAGS

 

Introduction to Bayesian inference with JAGS

Introduction to Bayesian inference with JAGS

channel9.msdn.com

 

JAGS 언어 요약

변수

model {
  for (i in 1:N) {
    r[i] ~ dbin(p[i], n[i])
    p[i] ~ dunif(0, 1)
  }
}
  • 모든 변수는 좌변에 한 번만 나타나야 한다 (함수관계를 여러번 정의하면 안되기 때문이다). 
  • 우변에서는 변수가 여러번 나타나도 된다.
  • 우변에만 나타나는 변수는 data로 제공되어야만 한다(위 예에서 소문자 n과 같은 경우).
  • JAGS모델 밖으로부터 즉 R로부터 변수의 숫자값이 주어진다면 이는 data이고, 숫자값이 주어지지 않는다면 parameter이다. 당연한 이야기 같지만, R은 lm(y ~ x)처럼 모델 구조만 입력하고 parameter는 알아서 계산해 주지만 JAGS는 mu[i] <- a + b*x[i]로 입력해주므로 데이터와 파라메터를 잘 구별할 필요가 있다.

 

Loop

for(var in seq)
{
  relations
}
  • seq: integer vector를 만들도록 하는 함수를 사용하는데 주로 1:N을 사용한다.
  • 중괄호 즉 { }는 relations가 하나의 문장이라도 의무적으로 사용하여야 한다.
  • var은 for loop 안에서만 유효한 변수이다.
  • for loop는 단순한 반복계산에만 사용한다.

for(i in 1:3) {
  y[i] ~ dnorm(mu[i], tau)
}

위  JAGS는 아래와 동일한 문장이다.

y[1] ~ dnorm(mu[1], tau)
y[2] ~ dnorm(mu[2], tau)
y[3] ~ dnorm(mu[3], tau)

 

R과 JAGS의 차이

R은 계산을 하는데 사용하는 언어이고 JAGS는 함수관계를 선언하는데 사용하는 언어이므로 JAGS에서 다음과 같은 문장은 허용되지 않는다. 이는 X를 서로 다르게 두번 정의할수 없기 때문이다 (deterministic 함수의 정의는 화살표 즉 <- 를 이용하고 stochastic 함수의 정의는 물결 즉 ~를 이용한다.).

X <- 1
X <- 3

 

선형회귀 JAGS 모델 예제

for(i in 1:N) {
  y[i] ~ dnorm(mu[i], tau)
  mu[i] <- alpha + beta * x[i]
}

alpha ~ dnorm(0, 1)
beta ~ dnorm(0, 1)
log.sigma ~ dnorm(0, 1)
sigma <- exp(log.sigma)
sigma.sq <- pow(sigma, 2)
tau <- 1 / sigma.sq

lm(y ~ x)를 베이시언으로 실행하려면 위와 같다.

 

parameter는 alpha, beta, tau이고, 

data는 y와 x이다.

 

parameter는 prior distribution을 주어야 하는데

alpha와 beta는 dnorm(0,1)로 표준정규분포로 주었고

tau는 정의상 1/variance이므로 tau <- 1 / sigma.sq라고 주었다($\sigma^2$). 여기서 $\sigma \sim Lognormal(0,1)$ 분포를 따른다고 가정하였다.

 

Comments