为了进行贝叶斯分析,我使用了这两个包,但是有一些我不明白的区别:
首先,包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函数中完成?谢谢。
发布于 2018-06-14 04:32:25
R2jags是一个运行rjags的过头函数.它的目的是使执行包描述中描述的一些事情更容易一些,比如运行直到聚合,或者并行化MCMC链。
如果您查看R2jags中的R2jags函数(例如,通过查看源代码或只在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次迭代。也就是说,你的后验样本来自更多的迭代,但是在方法2中没有额外的“烧伤”阶段,在jags.model中隐含的适应性之后。n.burnin在rjags中没有任何用处,只在R2jags中使用;请参阅上面的jags函数代码中的coda.samples调用,而前面的在第77行则指定n.adapt <- n.burnin。
https://stackoverflow.com/questions/50758693
复制相似问题