在 JAGS 模型已 运行 in 运行jags for R 后延长老化期
extending burn-in period after JAGS model has been run in runjags for R
R 的 runjags
包非常棒。并行功能和使用 extend.jags
函数的能力让我的生活变得更加美好。然而,有时,在我 运行 一个模型之后,我意识到老化阶段应该更长。如何从我的 run.jags
输出中 trim 额外样本,以便我可以重新估计我的参数分布并检查收敛性?
jags.object <- run.jags(model, n.chains=3, data=data, monitor =c('a','b'), sample=10000)
如果您想 trim 从后验分布中去除额外的样本,您可以使用 lapply
函数对 mcmc.list
进行子集化。
下面的代码将从每个链的前 50 个样本中 trim。如果你想 trim 更多,你只需要将 1:50
更改为其他内容。
trimmed.posterior <- lapply(jags.object, function(df, vec){df[-vec,,drop=TRUE]}, 1:50)
不幸的是,目前无法在 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 class 的 window 方法是个好主意,希望很快就会出现!
[可能还值得注意的是,您可以将 combine=FALSE 参数与 extend.jags 一起使用来删除整个第一批迭代,但这显然需要重新采样新的迭代,所以不完全是你想要。]
此外 - 感谢您对软件包的美言 - 欢迎随时在 https://sourceforge.net/p/runjags/forum/general/ 提供反馈和功能建议 :)
R 的 runjags
包非常棒。并行功能和使用 extend.jags
函数的能力让我的生活变得更加美好。然而,有时,在我 运行 一个模型之后,我意识到老化阶段应该更长。如何从我的 run.jags
输出中 trim 额外样本,以便我可以重新估计我的参数分布并检查收敛性?
jags.object <- run.jags(model, n.chains=3, data=data, monitor =c('a','b'), sample=10000)
如果您想 trim 从后验分布中去除额外的样本,您可以使用 lapply
函数对 mcmc.list
进行子集化。
下面的代码将从每个链的前 50 个样本中 trim。如果你想 trim 更多,你只需要将 1:50
更改为其他内容。
trimmed.posterior <- lapply(jags.object, function(df, vec){df[-vec,,drop=TRUE]}, 1:50)
不幸的是,目前无法在 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 class 的 window 方法是个好主意,希望很快就会出现!
[可能还值得注意的是,您可以将 combine=FALSE 参数与 extend.jags 一起使用来删除整个第一批迭代,但这显然需要重新采样新的迭代,所以不完全是你想要。]
此外 - 感谢您对软件包的美言 - 欢迎随时在 https://sourceforge.net/p/runjags/forum/general/ 提供反馈和功能建议 :)