在RAG的runjags中运行JAGS模型后延长老化期

时间:2016-06-23 17:39:47

标签: r bayesian jags runjags

R的runjags包太棒了。并行功能和使用extend.jags功能的能力使我的生活变得更好。但是,有时候,在我运行模型之后,我意识到老化阶段应该更长。如何从run.jags输出中删除多余的样本,以便重新估算参数分布并检查收敛?

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

2 个答案:

答案 0 :(得分:3)

目前无法在runjags中执行此操作,因此您必须使用底层的mcmc.list对象 - 例如:

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

请注意,window.mcmc的开始(和结束)参数包括刻录阶段,因此如果您有5000个刻录+ 10000个样本,则此代码会为您提供迭代10001:15000

然而,runjags类的窗口方法将是一个好主意,并希望很快会出现!

[值得注意的是,你可以使用combine = FALSE参数和extend.jags来删除整个第一批迭代,但这显然需要重新采样新的迭代,所以不完全是你想要的。] < / p>

另外 - 感谢关于套餐的客气话 - 我们欢迎https://sourceforge.net/p/runjags/forum/general/提供反馈和功能建议:)

答案 1 :(得分:1)

如果您想从后验分布中删除多余的样本,可以使用mcmc.list函数对lapply进行分组。

下面的代码将修剪每个链中的前50个样本。如果你想修剪更多,你只需要将1:50更改为其他内容。

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