駆け出しエンジニアはPMFの夢を見るか?

駆け出しエンジニアの記録

rjagsでMCMCして動物の移動データから真の位置と移動モードを推定する(その2)

はじめに

今回はその1で作成したモデルを読み込んで、rjagsでMCMCサンプリングを実施するところまでを紹介します。

テストデータの作成

テストデータは以下のように作成しました。

Generate sample data for SCRW-model

rjagsで動物の移動モードと真の位置の推定

モデルはその1で定義し記述したbugsモデルを用います。
今回は、1回2000ステップのMCMCサンプリングを4回行い、3ステップに1回サンプリングの値を記録します。また、最初から500ステップまでのMCMCサンプリングは使いません。
MCMCサンプリング時に必要な引数を以下に簡単に説明します。

  • n.chain = 4:MCMCサンプリングの反復回数
  • update(m, 500):burn in期間(サンプリングした結果を使わないステップ数)
  • thin = 3:MCMCサンプリング間隔
  • n.ietr = 2000:MCMCサンプリングのステップ回数

以下、実行例となります。

library(rjags)
# データを用意する
# データはリスト形式で渡す必要がある
list.data <- list(
  y = y,
  N = 100
)
# モデルを読み込む
m <- jags.model(
  file = "modelSSSM.bug",
  data = list.data,
  n.chain = 4
)
# burn-inする
update(m, 500)
# MCMCサンプリングを実行する
# 取得したいパラメータを指定する
res <- coda.samples(
  m,
  c("x", "bmode", "gamma", "alpha", "theta", "itau", "rh", "sigma_lon", "sigma_lat"),
  thin = 3,
  n.iter = 2000
)

次回予告

次回は推定結果の取り出し方や推定結果が正しい結果かどうかなどについて書きたいと思います。

(余談)なんでStanではなくてJAGS

移動時と滞在時の状態を離散値(0と1)で表現しており、離散値の推定をStanですることが難しかったためです1。 StanではNUTSという手法を採用し、JAGSではギブスサンプラーという手法を採用していることに起因しているそう。

(余談)参考書籍

動物の移動モデルに適用した事例は掲載されていませんが、基礎知識、どのツールを使えば良いのか、どのようにMCMCすればいいのかといったことを学ぶことができました。

MCMCフリーソフトの特集があり、「Stanを使えばできるんじゃね?」と思い、勉強のきっかけになった本です。

いわゆるあひる本。勉強を始めた直後に出てありがたいなと思いながら読んだ本です。stanの使い方や確率分布の説明等もありリフファレンスにもなる本です。

いわゆるみどり本。WinBUGSでMCMCを用いたパラメータ推定の章が後半からあります。Stanで離散値のパラメータ推定が難しいと分かりJAGSを使い始めてから参考にしていました。


  1. ヒル本には離散値をとる場合の対処方法が書かれていますが、早く実際に適用することが目的であったためJAGSに切り替えました。