r - rjags 和 r2jags 的区别

标签 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中完成功能?谢谢你。

最佳答案

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/

    相关文章:

    xml - 在 Windows 上使用包 XML 时发生内存泄漏

    将数据框中的某些值替换为 NA

    bayesian - 我们可以从 JAGS 输出中得到残差吗?

    r - 如何使用 foreach 在 Windows 上实现并行锯齿?

    r - 从函数中使用 jags.parallel(R 语言错误在 get(name, envir = envir) : object 'y' not found)

    r - 为什么拟合 rjags 和 R2Jags 的模型输出不同?

    bayesian - 拟合贝叶斯线性回归并预测不可观察的值

    r - 如何查看存储图的代码 (ggplot)

    r - 其他两列之间的唯一值列

    r - 通过 R 在 WinBUGS 中设置种子