2016-06-23 9 views
2

R用runjagsパッケージは素晴らしいです。並列機能とextend.jags機能を使用する能力は、私の人生をはるかに良くします。しかし、モデルを実行した後に、バーンインフェーズが長くなっているはずであることが分かりました。 run.jags出力から余分なサンプルをトリミングするにはどうすればよいですか?パラメータの分布を再推定し、コンバージェンスをチェックできますか?あなたは事後分布から余分なサンプルをトリミングしたい場合JAGSモデル実行後のバーンイン期間延長R

jags.object <- run.jags(model, n.chains=3, data=data, monitor =c('a','b'), sample=10000) 

答えて

3

あなたが基本となるmcmc.listオブジェクトで作業する必要がありますので、残念ながらrunjags以内にこれを実行する方法は現在ありません - のようなもの:

library('coda') 
mcmc.object <- as.mcmc.list(jags.object) 
niter(mcmc.object) 
windowed.object <- window(mcmc.object, start=10001) 
summary(windowed.object) 

なお、開始(および終了)引数にはバーンインフェーズが含まれています。したがって、5000個のバーンイン+ 10000サンプルがある場合、このコードは繰り返しを行います。10001:15000

ただし、runjagsクラスのウィンドウメソッドは、すぐに表示される予定のものがあります。

[combine = FALSE引数でextend.jagsを使用すると、繰り返しの最初のロット全体を削除できますが、明らかに新しい繰り返しを再サンプリングする必要があります。また

- パッケージの優しい言葉に感謝 - フィードバックや機能の提案は常にhttps://sourceforge.net/p/runjags/forum/general/で歓迎している:)

+0

おかげでマット!これは確かに望むようにそれをトリミングするでしょう。 – colin

1

あなたはlapply機能をmcmc.listをサブセットすることができます。

以下のコードは、各チェーンの最初の50サンプルを削除します。あなたがもっとトリムしたい場合は、1:50を別のものに変更する必要があります。

trimmed.posterior <- lapply(jags.object, function(df, vec){df[-vec,,drop=TRUE]}, 1:50) 
関連する問題