MCMCすることが多いですよね? 参考書や記事には、歴史があるWinBUGSの資料を見かけることも多いハズ。
それをJAGSやSTANで試してみたりすることが多々あると思います。
その時、推定がうまくいかない・・・など問題に直面すると、①モデルの書き方が悪いのか? ②コマンドの与え方が悪いのか?など迷うときが(私は)多々ありました。
それ以外にも③「データ表記法」がBUGS言語とR、Python等で異なることがあります。
これについて調べた結果のメモです。
結論
http://www.openbugs.net/Manuals/ModelSpecification.html#ArraysAndIndexing
に記載がある「Arrays and indexing」を理解すればOKでした。
OpenBUGS reads data into an array by filling the right-most index first,
whereas the R/S-Plus program fills the left-most index first.
二次元の場合
- 参考書のデータを教科書のまま入力
- matrixにしてdputするなどして.Dim=c(3,2)ならc(2,3)する
- t()で転置行列にする。
ダメダメなケースは、1,3で転置だけすケース。インデックスが崩れるから、データが教科書と異なることになる。すなわち、①、②が正しくとも絶対に整合しない。
三次元の場合
.Dim=c(4,2,3) to .Dim=c(3,2,4)
なぜ気がついたか?
Agresiti先生の多名義尺度のロジスティック回帰( Modeling for multinomial Resonse)のワニの食餌データ。
"Alligators: multinomial - logistic"として古くから有名なモデル?らしいが、大先生Agresiti本の例題とはデータが異なる。
WinBUGSの「サンプルコードをコピペしたらなんとかなる」的なノリで試すと結果が異なるり、大怪我。
JAGS実装の例題があるので確認すると、結果はWinBUGSと整合している。
モデルは共通だから、データ配列の順序を疑う。よく見ると違っていた。
(モデルやキックするコードばかり見ていてデータを見ていなかった)
感想
JAGSやSTANを使いこなすには、「単にソフトウエアを使えるだけではなく、行列でモデルを表現できる」ことが必須と最近感じております。勉強せねば。
以上、2020年の在宅業務中にφ(..)メモメモ