4

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

首先包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)

也就是有function的burn-in阶段update也可以在coda.samplesfunction中做?谢谢你。

4

1 回答 1

7

R2jags是运行的顶级功能rjags。它旨在使执行包描述中描述的某些事情变得更容易一些,例如运行直到收敛,或并行化 MCMC 链。

如果您查看jags函数R2jags(例如通过查看源代码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. 更新 100 次迭代update,然后
  3. 更新并从后验采样 100 次迭代coda.samples

在第二个你

  1. 编译和改编jags.model
  2. 从后验更新和采样 200 次迭代coda.samples

,您的后验样本来自更多迭代,但在jags.model. n.burninin没有用rjags,只有 in R2jags; 请参见上面函数代码coda.samples中的调用jags,而在前面的第 77 行,该函数分配了n.adapt <- n.burnin.

于 2018-06-14T04:32:25.293 回答