Varying slope model: 回帰係数に線形予測子を加える

Varying intercept modelでは切片のみがグループ間で変化することをモデル化していますが、ある変数xに対するyの応答が、グループによって異なることもあります。例えば、魚の種数yは、局所スケールの生息地面積xに従って増えますが、その応答の強さは流域スケールの変数である気温xgで変わるかもしれません。

例:生息地面積xに対する魚の種数yの応答。傾きは流域(色の違い)によって異なっている。

SPONSOR LINK

このような「空間スケールをまたがった交互作用」を扱いたい場合は、上の例ので考えると、生息地面積xの効果b(回帰係数)は、流域の平均気温xgによって変わる、という階層構造をもったモデルを構築することになります。

model{
  ninfo <- 0.0001
  
  # Prior
  for(j in 1:2){
    for(k in 1:2){
      B[j,k] ~ dnorm(0,ninfo)
    }
  }
  tau ~ dgamma(ninfo, ninfo); sigma <- sqrt(1/tau)
  TAU[1:2,1:2] ~ dwish(W[,], 3)
  SIGMA[1:2,1:2] <- inverse(TAU[,])
  
  # Likelihood
  for(i in 1:N){
    y[i] ~ dnorm(mu[i], tau)
    mu[i] <- b[group[i],1] + b[group[i],2]*x[i]
  }
  
  for(j in 1:Ng){
    b[j,1:2] ~ dmnorm(b.mu[j,], TAU[,])
    for(k in 1:2){
      b.mu[j,k] <- B[1,k] + B[2,k]*xg[j]
    }
  } 
}

上記のモデルでは、切片と偏回帰係数bがグループ(流域)で変化すると仮定しています。ただし、切片と偏回帰係数において、同じグループ間のばらつきを考えることになるので、それらを独立と考えるのは無理があります。そのため、b[,1]とb[,2]の誤差(グループレベルの説明変数で説明できないばらつき)は、共分散を考慮する必要があります。このスクリプトでは、bの誤差構造には多変量正規分布を用いており(ハイライト箇所21行目)、その分散共分散行列の逆数(TAU[,])の事前分布にウィシャート分布を指定しています(Wはdiag(2)としてRから与えた)。

Spread the love

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です