カテゴリ予測変数を用いたベイズ回帰

RJAGS によるベイズモデリング

Alicia Johnson

Associate Professor, Macalester College

第4章の目標

  • カテゴリ予測変数をベイズモデルに組み込む
  • 多変量ベイズ回帰モデルを構築する
  • 正規回帰モデルの手法を一般化線形モデル(ポアソン回帰)へ拡張する
RJAGS によるベイズモデリング

レールトレイルの利用者数

目標:
マサチューセッツ州のレールトレイルにおける日次利用者数を分析する。

1 写真提供:commons.wikimedia.org
RJAGS によるベイズモデリング

利用者数のモデル化

$Y_i$ = 日$i$のトレイル利用者数 $ \; $
$ \;$

モデル
$Y_i \sim N(m_i, s^2)$

RJAGS によるベイズモデリング

曜日による利用者数のモデル化

$Y_i$ = 日$i$のトレイル利用者数
$X_i$ = 平日は1、週末は0

モデル
$Y_i \sim N(m_i, s^2)$

RJAGS によるベイズモデリング

曜日による利用者数のモデル化

$Y_i$ = 日$i$のトレイル利用者数
$X_i$ = 平日は1、週末は0

モデル
$Y_i \sim N(m_i, s^2)$

RJAGS によるベイズモデリング

曜日による利用者数のモデル化

$Y_i$ = 日$i$のトレイル利用者数
$X_i$ = 平日は1、週末は0

モデル
$Y_i \sim N(m_i, s^2)$
$m_i = a + bX_i$

RJAGS によるベイズモデリング

曜日による利用者数のモデル化

$Y_i$ = 日$i$のトレイル利用者数
$X_i$ = 平日は1、週末は0

モデル
$Y_i \sim N(m_i, s^2)$
$m_i = a + bX_i$

  • $a$ = 週末の典型的な利用者数

RJAGS によるベイズモデリング

$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 によるベイズモデリング

$a$ と $b$ の事前分布

週末の典型的な利用者数は1日約400人と予想されるが、100人から700人の範囲も考えられる。

平日と週末の利用者数の比較は不確かであり、多い場合も少ない場合もある。

RJAGS によるベイズモデリング

$s$ の事前分布

$\;$

日ごとの利用者数の標準偏差(平日・週末を問わず)は、0から200人の間で一様に分布すると仮定する。

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)$

RJAGS によるベイズモデリング

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 によるベイズモデリング

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 によるベイズモデリング

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 によるベイズモデリング

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 によるベイズモデリング

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 によるベイズモデリング

練習しましょう!

RJAGS によるベイズモデリング

Preparing Video For Download...