rjags和r2jags之间的差异

时间:2018-06-08 10:32:54

标签: r jags r2jags rjags

我使用这两个软件包进行贝叶斯分析,但是有些区别我不明白:

首先,包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函数中完成?谢谢。

1 个答案:

答案 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

从后验进行迭代和采样

你的两个电话并不完全等同。 在第一个你:

  1. 使用jags.model
  2. 进行编译和调整
  3. 使用update更新100次迭代,然后
  4. 使用coda.samples更新并从后验采样100次。
  5. 在第二个你

    1. 使用jags.model
    2. 进行编译和调整
    3. 使用coda.samples更新并从后验采样200次迭代。
    4. I.e。,您的后验样本来自更多迭代,但没有额外的&#34;老化&#34;在jags.model中隐含的自适应之后的方法2中的阶段。 n.burnin中的rjags无效,只有R2jags;请参阅上面coda.samples功能代码中的jags来电,而早期on line 77,此功能会分配n.adapt <- n.burnin