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
从后验迭代和采样
你的两个调用并不完全相同。
在第一个你:
- 使用
jags.model
、 编译和适配
- 使用
update
更新 100 次迭代,然后
- 使用
coda.samples
. 从后验更新和采样 100 次迭代
秒你
- 使用
jags.model
、 编译和适配
- 使用
coda.samples
. 从后验更新和采样 200 次迭代
即,你的后验样本来自更多的迭代,但是在jags.model
中隐含的适应之后,方法2中没有额外的"burn-in"阶段. n.burnin
在rjags
中没有用处,只有在R2jags
中;请参阅上面 jags
函数代码中的 coda.samples
调用,而早些时候 on line 77,该函数分配 n.adapt <- n.burnin
.
我使用这两个包来进行贝叶斯分析,但有一些我不明白的区别:
首先包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
你的两个调用并不完全相同。 在第一个你:
- 使用
jags.model
、 编译和适配
- 使用
update
更新 100 次迭代,然后 - 使用
coda.samples
. 从后验更新和采样 100 次迭代
秒你
- 使用
jags.model
、 编译和适配
- 使用
coda.samples
. 从后验更新和采样 200 次迭代
即,你的后验样本来自更多的迭代,但是在jags.model
中隐含的适应之后,方法2中没有额外的"burn-in"阶段. n.burnin
在rjags
中没有用处,只有在R2jags
中;请参阅上面 jags
函数代码中的 coda.samples
调用,而早些时候 on line 77,该函数分配 n.adapt <- n.burnin
.