我正在尝试使用新包 runjags 运行 JAGS,因为 R2jags has a bug (完整的模型代码在问题 https://stats.stackexchange.com/q/62006/5509 中):
require("runjags")
out <- run.jags("Poisson.OD.t.test.txt", params, win.data, nc, inits,
nb*4/5, ni, nb*1/5)
plot(out2, layout = c(4, 2))
它很有魅力,但这个包的缺点是 runjags
函数返回的 run.jags
对象已经与准备好的图表和输出捆绑在一起,而且太大了。只是为了比较,对应的.Rdata文件的大小(2个链,每个保存500次迭代,总共1000次迭代):runjags
对象 - 1.2 MB R2jags
对象 - 212 kB mcmc.list
对象 - 33 kB runjags
对象很大,但我必须存储它以便以后能够在模型上使用 runjags
接口(interface)。此问题的任何解决方法?
最佳答案
runjags
类的对象非常大,主要是因为它们存储了从中断处继续模拟所需的所有信息(模型/数据/RNG 状态)。如果你想要的只是 MCMC 链,那么你可以使用以下方法摆脱大部分:as.mcmc.list(yourrunjagsobject)
...或者转换为可以直接与 rjags 包一起使用的内容:as.jags(yourrunjagsobject)
另见 ?runjagsclass
或者,如果您有与打印/汇总相关的存储问题并希望保留模型/数据/RNG 状态,请尝试将 summarise=FALSE
和 plot=FALSE
用于 run.jags()
,这将防止在初始函数调用期间预先生成/存储这些。
你也可以破解类对象来摆脱我猜的大组件,但使用提供的转换方法要好得多......
关于runjags 对象太大,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21837221/