library(R2WinBUGS)
経由だとダメで,
WinBUGS を直接使えばよい,
といったハナシがあるわけだが,
そのあたりホントなのかどうか,
よくわからない.
久保返信:
しかし R2WinBUGS 経由というのが問題なのかどうかよくわかりません. ちょっと調べてみたのですが,R2WinBUGS は 1. R で script.txt という WinBUGS スクリプトを生成する 2. R から呼び出された WinBUGS が script.txt を読んでそれを実行する といった手順で動きます.このときに私の使っている R2WinBUGS 2.1-14 だと script.txt 内の thin 指定は thin.updater(値) になります.これはよけーな ものは記憶しないメモリ節約モードのはず,なのです.これは WinBUGS manual が正しければ,という前提なのですが,manual p.26 の Samples ... subsection の thin の項にはそう書いてあります. ということで,R2WinBUGS を実行したときに,呼び出された WinBUGS のモニ ター上で thin.updater(値) が表示されてるかどうか,確認してみてください.
上記の thin.updater が設定されていてもメモリが足りなくなることがあるか もしれません. しかしながら,WinBUGS が確保するメモリを増やす方法はないのではないかと 思います. そこで,とりあえずの姑息な回避手段としては,WinBUGS を途中で止めて,途 中で sample の一部を改修,また R2WinBUGS から WinBUGS を呼びだして先ほ どの続きを計算させる,といった方法をとるのがよいかもしれません (私自身 はこれをやったことはありませんが). 「続きを計算させる」ために,途中で止めた計算結果を格納している bugs オ ブジェクト内に last.values として格納されている「最後の MCMC sample」 を使うことになります. 参照: http://hosho.ees.hokudai.ac.jp/~kubo/ce/BugsClass.html たとえば bugs オブジェクトを b とすると b[[3]]$beta とすると 3 番目のチェインの beta というパラメーターが vector もしくは matrix の形でとりだすことができます.これを次のパラメーター初期値として 使えば MCMC 計算の続きができます.ただしそのためには,すべての stochastic node の値が last.values に格納されている必要があります. つまり全体の手順をまとめますと, 1. てきとーなパラメーター初期値を設定 2. R2WinBUGS から WinBUGS を呼び出して計算させる 3. WinBUGS 終了,結果を bugs オブジェクト b に格納 4. 必要なら結果を b$sims.array などから回収 (b のコピーなど) 5. b$last.values でパラメーターを初期化 6. 2. にもどる といったなかなかめんどうなものになりますが,とりあえず大きな規模の計算 もできるのではないかと思います.送信してから気づいたのだが (ちかごろ R2WinBUGS の bugs() 関数を直接つかってなかったので気づかなかったのだが) ……
bugs()
関数のパラメーター初期値 inits
の指定は
n.chain
と等しい長さの list
list
を生成させる関数
bugs(..., inits = b$last.values, debug = FALSE, ...)
ってなかんぢで,
そのままぽいっとわたせばよい.
R2WBwrapper.R
でも改造してみるか
……
set.param("beta", function() random(100))
といった指定は可能.
あとは,
「n.chain
と等しい長さの list
」
をわたす方法かな
……