首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在runjags中运行JAGS模型后延长刻录期

在runjags中运行JAGS模型后延长刻录期
EN

Stack Overflow用户
提问于 2016-06-23 17:39:47
回答 2查看 642关注 0票数 5

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

代码语言:javascript
复制
jags.object <- run.jags(model, n.chains=3, data=data, monitor =c('a','b'), sample=10000)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-24 14:48:13

不幸的是,目前在runjags中无法做到这一点,因此您必须使用底层的mcmc.list对象--如下所示:

代码语言:javascript
复制
library('coda')
mcmc.object <- as.mcmc.list(jags.object)
niter(mcmc.object)
windowed.object <- window(mcmc.object, start=10001)
summary(windowed.object)

请注意,window.mcmc的开始(和结束)参数包括刻录在阶段,所以如果在+ 10000示例中有5000个刻录,那么下面的代码给您迭代10001:15000

但是,一个用于runjags类的窗口方法将是一个好主意,希望很快就会出现这种方法!

还值得注意的是,您可以使用combine=FALSE参数和extend.jags一起删除整个第一批迭代,但这显然需要重新采样新的迭代,而不是您想要的。

同样--谢谢你对这个包的友好之词--反馈和特性建议在https://sourceforge.net/p/runjags/forum/general/上总是欢迎的:)

票数 6
EN

Stack Overflow用户

发布于 2016-06-24 14:14:04

如果你想从后验分布中剪掉额外的样本,你可以用mcmc.list函数来子集lapply

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

代码语言:javascript
复制
trimmed.posterior <- lapply(jags.object, function(df, vec){df[-vec,,drop=TRUE]}, 1:50)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37998391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档