我使用这两个包来进行贝叶斯分析,但有一些我不明白的差异:
首先包rjags
允许适应阶段,使用 jags.model
功能,而包r2jags
没有这个阶段,并带有功能jags
(或 jags.parallel
)开始从后验分布中采样。自适应阶段是否包含在该函数或包 r2jags
中?不考虑吗?
其次,在rjags
,我可以说这两段代码是相似的吗?
jmod <- jags.model(file="somefile.txt", data = data, n.chains=3)
update(jmod,100)
jsample <- coda.samples(jmod, n.iter=100, variable.names=par)
和
jmod <- jags.model(file="somefile.txt", data = data, n.chains=3)
jsample <- coda.samples(jmod, n.iter=200,n.burnin=100, variable.names=par)
也就是说,老化阶段
update
功能也可以在coda.samples
中完成功能?谢谢你。
最佳答案
R2jags
是用于运行 rjags
的过顶函数.它旨在让执行包描述中描述的某些事情变得更容易一些,例如运行直到收敛或并行化 MCMC 链。
如果你看 jags
函数在 R2jags
(例如,通过查看 the source code 或仅在 R 控制台中输入不带括号的 jags
),您会在函数末尾附近找到以下调用(链接的 github 版本上的第 151-177 行):
m <- jags.model(model.file,
data = data,
inits = init.values,
n.chains = n.chains,
n.adapt = 0 )
adapt( m,
n.iter = n.adapt,
by = refresh,
progress.bar = progress.bar,
end.adaptation = TRUE )
samples <- coda.samples( model = m,
variable.names = parameters.to.save,
n.iter = ( n.iter - n.burnin ),
thin = n.thin,
by = refresh,
progress.bar = progress.bar )
所以
R2jags::jags
正在使用 jags.model
编译模型,使用 adapt
对其进行调整,然后使用 coda.samples
从后验中迭代和采样您的两个电话并不完全相同。
首先你:
jags.model
, update
更新 100 次迭代,然后 coda.samples
从后验更新和采样 100 次迭代. 第二个你
jags.model
, coda.samples
从后验更新和采样 200 次迭代. 即,您的后验样本来自更多次迭代,但在
jags.model
中隐含的适应之后,方法 2 中没有额外的“老化”阶段. n.burnin
没有用在 rjags
,仅在 R2jags
;见 coda.samples
调用 jags
上面的函数代码,而更早的 on line 77 ,该函数分配 n.adapt <- n.burnin
.
关于r - rjags 和 r2jags 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50758693/