仅针对迭代子集计算Gelman和Rubins收敛统计量(coda包)

时间:2013-09-27 11:01:55

标签: r markov-chains mcmc convergence

我正在尝试使用R软件包rjags计算我目前在R中运行的JAGS分析的Gelman和Rubin的收敛诊断。

例如,我想评估参数beta的收敛诊断。为此,我使用库coda和命令:

library(coda)
gelman.diag(out_2MCMC$beta)

out_2MCMC是一个具有多个链的MCMC列表对象,导致输出正确,没有错误消息或任何错误消息。但是,由于我使用了大量的迭代作为老化,我想仅计算迭代子集的收敛诊断(仅在烧录之后的部分!)。

为此,我尝试了:

gelman.diag(out_2MCMC$beta[,10000:15000,])

这导致以下错误:

Error in mcmc.list(x) : Arguments must be mcmc objects

因此,我试过了:

as.mcmc(out_2MCMC$beta[,10000:15000,]))

但是,令人惊讶的是,这导致了以下错误:

Error in gelman.diag(as.mcmc(out_2MCMC$beta[, 10000:15000,])) 
You need at least two chains

因为这是我从JAGS分析获得的MCMC列表对象,与我在评估所有迭代的收敛诊断时所使用的相同(这完全可行),我在这里看不到问题。

函数本身仅提供在计算收敛诊断时使用序列的后半部分(迭代)的选项。由于我的燃烧阶段比这更长,遗憾的是这对我来说还不够。

我想我很遗憾这是非常明显的。有没有人有任何建议或提示?

由于代码很多,我没有提供R代码来运行完整的2MCMC-JAGS分析。我希望上面的代码能很好地说明问题,也许有人遇到过同样的问题,或者发现我的语法中有任何错误。如果您觉得完整的代码是理解我的问题所必需的,我仍然可以提供运行2MCM JAGS分析的示例代码。

1 个答案:

答案 0 :(得分:1)

我一直在寻找同一问题的解决方案,并发现 stats 包中的window()函数将完成该任务。对于你的情况:

window(out_2MCMC, 100001,15000)

将返回一个mcmc.list对象,其中包含所有受监视参数的最后5,000个样本以及新列表的更新属性。