5

R的runjags软件包很棒。并行功能和使用extend.jags功能的能力使我的生活变得更好。然而,有时,在我运行一个模型之后,我意识到老化阶段应该更长。如何从run.jags输出中修剪额外的样本,以便重新估计参数分布并检查收敛?

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

2 回答 2

6

不幸的是,目前无法在 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 一起使用来删除整个第一批迭代,但这显然需要重新采样新的迭代,因此不完全是您想要的。]

另外 - 感谢关于包的客气话 - https://sourceforge.net/p/runjags/forum/general/总是欢迎反馈和功能建议 :)

于 2016-06-24T14:48:13.347 回答
1

如果你想从后验分布中剔除额外的样本,你可以mcmc.listlapply函数子集。

下面的代码将从每个链中删除前 50 个样本。1:50如果你想修剪更多,你只需要换成别的东西。

trimmed.posterior <- lapply(jags.object, function(df, vec){df[-vec,,drop=TRUE]}, 1:50)
于 2016-06-24T14:14:04.880 回答