まずはBUGS言語による統計モデルの記述から説明を進めます。BUGSファイルは「統計モデルの構造」のみを記述するファイルです。ここでは、森林パッチiの鳥の個体数Yiを、森林面積Xiで説明するポアソン線形モデルを例に挙げて考えます。
Eq. 1)
Yi ~ Pois(λi)
log(λi) = α + β*Xi
上記のモデルは、RのGLMでは次のように記述されます。
###R code### data <- read.csv(“data.csv”) glm(y ~ X, data, family=poisson)
ここで気を付けなければならないのは、
- GLMのようにRでパッケージ化されているものだと、eq.1で書かれているほとんど部分が自動化されており、リンク関数(log)などを自分で考える必要がない
- 特に指定しなくとも、サンプルの繰り返しが“i”として認識されている
ことです。これら2点がBUGSとR言語では大きく異なります。このことを念頭におき、上記のモデルをBUGS言語で書いてみます。
###BUGS code### model{ #Likelihood for(i in 1:N.sample){ # loop for i y[i] ~ dpois(lambda[i]) # poisson model log(lambda[i]) <- alpha + beta * X[i] # linear model structure } #Prior alpha ~ dnorm(0, 0.001) beta ~ dnorm(0, 0.001) }
model{}で囲われている範囲がモデル構造を指定するエリアになります({}の外にテキストを書くとエラーがでるので注意)。「~」は確率論的ノード(Stochastic node)と呼ばれ、左辺が確率変数である場合に使われます。確率論的ノードの右辺には、必ず確率分布の記述が必要です(上記ではdpoisが確率分布、Poisson distributionを指すもの)。「<-」は決定論的ノード(Deterministic node)と呼ばれ、=(イコール)と対応します。こうしてみると、BUGS言語ではEq.1をすべて自分で書き下す必要があると分かります。 Prior以降の記述は「事前分布」と呼ばれるものです。ベイズ統計の枠組みでは、すべてパラメーターに対し、事前分布を設定しなければなりません(事前分布を設定し忘れるとエラーが出る)。ここでは切片αと傾きβに対し、事前の情報は何も得られないので、「無情報事前分布」というものを設定しています(ほとんどケースはこれにあたる)。ここでは、平均0、分散1000の正規分布を事前分布として設定することで、切片αと傾きβは「かなり広い範囲の値をとる可能性がある」としています。「dnorm」が正規分布であることを示しており、一つ目の引数が「平均」、二つ目の引数が「精度(分散の逆数=1/1000)」を表します。ここまで書き終えたら、ファイルを.Rもしくは.txtファイルとして保存します(ここでは“model_PoissonRegression.R”として保存することにします)。続きはこちら。
More from my site
SPONSOR LINK