rjags 和 r2jags 之间的差异

Differences between rjags and r2jags

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

首先包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 的 Over-the-top 函数。它的目的是让一些事情变得更容易一些,如包描述中描述的那样 运行 直到收敛,或并行化 MCMC 链。

如果您查看 R2jags 中的 jags 函数(例如,通过查看 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用[=17=编译模型,用adapt调整它,然后用coda.samples

从后验迭代和采样

你的两个调用并不完全相同。 在第一个你:

  1. 使用jags.model
  2. 编译和适配
  3. 使用 update 更新 100 次迭代,然后
  4. 使用 coda.samples.
  5. 从后验更新和采样 100 次迭代

秒你

  1. 使用jags.model
  2. 编译和适配
  3. 使用 coda.samples.
  4. 从后验更新和采样 200 次迭代

,你的后验样本来自更多的迭代,但是在jags.model中隐含的适应之后,方法2中没有额外的"burn-in"阶段. n.burninrjags中没有用处,只有在R2jags中;请参阅上面 jags 函数代码中的 coda.samples 调用,而早些时候 on line 77,该函数分配 n.adapt <- n.burnin.