범주형 예측 변수를 활용한 베이즈 회귀

RJAGS로 배우는 Bayesian 모델링

Alicia Johnson

Associate Professor, Macalester College

4장 학습 목표

  • 범주형 예측 변수를 베이즈 모델에 포함하기
  • 다변량 베이즈 회귀 모델 구성하기
  • 정규 회귀 방법론을 일반화 선형 모델(포아송 회귀)로 확장하기
RJAGS로 배우는 Bayesian 모델링

레일 트레일 이용량

목표:
매사추세츠주 레일 트레일의 일별 이용량 분석

1 사진 출처: commons.wikimedia.org
RJAGS로 배우는 Bayesian 모델링

이용량 모델링

$Y_i$ = $i$일의 트레일 이용량 (사용자 수) $ \; $
$ \;$

모델
$Y_i \sim N(m_i, s^2)$

RJAGS로 배우는 Bayesian 모델링

요일별 이용량 모델링

$Y_i$ = $i$일의 트레일 이용량 (사용자 수)
$X_i$ = 평일이면 1, 주말이면 0

모델
$Y_i \sim N(m_i, s^2)$

RJAGS로 배우는 Bayesian 모델링

요일별 이용량 모델링

$Y_i$ = $i$일의 트레일 이용량 (사용자 수)
$X_i$ = 평일이면 1, 주말이면 0

모델
$Y_i \sim N(m_i, s^2)$

RJAGS로 배우는 Bayesian 모델링

요일별 이용량 모델링

$Y_i$ = $i$일의 트레일 이용량 (사용자 수)
$X_i$ = 평일이면 1, 주말이면 0

모델
$Y_i \sim N(m_i, s^2)$
$m_i = a + bX_i$

RJAGS로 배우는 Bayesian 모델링

요일별 이용량 모델링

$Y_i$ = $i$일의 트레일 이용량 (사용자 수)
$X_i$ = 평일이면 1, 주말이면 0

모델
$Y_i \sim N(m_i, s^2)$
$m_i = a + bX_i$

  • $a$ = 주말 평균 이용량

RJAGS로 배우는 Bayesian 모델링

$Y_i$ = $i$일의 트레일 이용량 (사용자 수)
$X_i$ = 평일이면 1, 주말이면 0

모델
$Y_i \sim N(m_i, s^2)$
$m_i = a + bX_i$

  • $a$ = 주말 평균 이용량
  • $a + b$ = 평일 평균 이용량

  • $b$ = 평일 대비 주말 평균 이용량 차이
  • $s$ = 잔차 표준편차
RJAGS로 배우는 Bayesian 모델링

$a$ & $b$의 사전 분포

주말 평균 이용량은 약 400명으로 예상되며, 100명에서 700명 사이일 수 있습니다.

평일 이용량이 주말보다 많을지 적을지 불확실합니다.

RJAGS로 배우는 Bayesian 모델링

$s$의 사전 분포

$\;$

평일·주말 모두 일별 이용량의 표준편차는 0에서 200명 사이에서 균등하게 분포합니다.

RJAGS로 배우는 Bayesian 모델링

요일별 이용량의 베이즈 모델

$Y_i \sim N(m_i, s^2)$
$m_i = a + b X_i$
$a \sim N(400, 100^2)$
$b \sim N(0, 200^2)$
$s \sim \text{Unif}(0, 200)$

RJAGS로 배우는 Bayesian 모델링

RJAGS에서 베이즈 모델 정의하기

$Y_i \sim N(m_i, s^2)$
$m_i = a + b X_i$
$a \sim N(400, 100^2)$
$b \sim N(0, 200^2)$
$s \sim \text{Unif}(0, 200)$

rail_model_1 <- "model{
    # Likelihood model for Y[i]





    # Prior models for a, b, s




}"  
RJAGS로 배우는 Bayesian 모델링

RJAGS에서 베이즈 모델 정의하기

$Y_i \sim N(m_i, s^2)$
$m_i = a + b X_i$
$a \sim N(400, 100^2)$
$b \sim N(0, 200^2)$
$s \sim \text{Unif}(0, 200)$

rail_model_1 <- "model{
    # Likelihood model for Y[i]
    for(i in 1:length(Y)) {
        Y[i] ~ dnorm(m[i], s^(-2))

    }

    # Prior models for a, b, s
    a ~ dnorm(400, 100^(-2))
    s ~ dunif(0, 200)


}"  
RJAGS로 배우는 Bayesian 모델링

RJAGS에서 베이즈 모델 정의하기

m[i] <- a + b[X[i]]

  • X[1] = 주말, X[2] = 평일
  • b는 2개 수준: b[1], b[2]
  • 주말 추세 ($m_i = a$)
    m[i] <- a + b[1]
rail_model_1 <- "model{
    # Likelihood model for Y[i]
    for(i in 1:length(Y)) {
        Y[i] ~ dnorm(m[i], s^(-2))
        m[i] <- a + b[X[i]]
    }

    # Prior models for a, b, s
    a ~ dnorm(400, 100^(-2))
    s ~ dunif(0, 200)


}"  
RJAGS로 배우는 Bayesian 모델링

RJAGS에서 베이즈 모델 정의하기

m[i] <- a + b[X[i]]

  • X[1] = 주말, X[2] = 평일
  • b는 2개 수준: b[1], b[2]
  • 주말 추세 ($m_i = a$)
    m[i] <- a + b[1]
    b[1] <- 0
rail_model_1 <- "model{
    # Likelihood model for Y[i]
    for(i in 1:length(Y)) {
        Y[i] ~ dnorm(m[i], s^(-2))
        m[i] <- a + b[X[i]]
    }

    # Prior models for a, b, s
    a ~ dnorm(400, 100^(-2))
    s ~ dunif(0, 200)
    b[1] <- 0

}"  
RJAGS로 배우는 Bayesian 모델링

RJAGS에서 베이즈 모델 정의하기

m[i] <- a + b[X[i]]

  • X[1] = 주말, X[2] = 평일
  • b는 2개 수준: b[1], b[2]
  • 주말 추세 ($m_i = a$)
    m[i] <- a + b[1]
    b[1] <- 0
  • 평일 ($m_i = a + b$)
    m[i] <- a + b[2]
rail_model_1 <- "model{
    # Likelihood model for Y[i]
    for(i in 1:length(Y)) {
        Y[i] ~ dnorm(m[i], s^(-2))
        m[i] <- a + b[X[i]]
    }

    # Prior models for a, b, s
    a ~ dnorm(400, 100^(-2))
    s ~ dunif(0, 200)
    b[1] <- 0
    b[2] ~ dnorm(0, 200^(-2))
}"  

b[2] ~ dnorm(0, 200^(-2))

RJAGS로 배우는 Bayesian 모델링

연습해 봅시다!

RJAGS로 배우는 Bayesian 모델링

Preparing Video For Download...