我使用这两个软件包进行贝叶斯分析,但是有些区别我不明白:
首先,包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
函数中完成?谢谢。
答案 0 :(得分:1)
R2jags
是运行rjags
的过顶功能。它的目的是让它更容易做一些事情,如包描述中描述的那样,直到收敛或并行化MCMC链。
如果您查看jags
中的R2jags
功能(例如,查看the source code或只是将jags
无括号输入您的R控制台),您会发现跟随函数结尾附近的调用(链接的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次迭代。 I.e。,您的后验样本来自更多迭代,但没有额外的&#34;老化&#34;在jags.model
中隐含的自适应之后的方法2中的阶段。 n.burnin
中的rjags
无效,只有R2jags
;请参阅上面coda.samples
功能代码中的jags
来电,而早期on line 77,此功能会分配n.adapt <- n.burnin
。