使用 R2WinBUGS,如何从每个链中提取信息?

机器算法验证 r 马尔可夫链蒙特卡罗 错误
2022-04-14 07:54:36

我是 Gibbs Sampling 的新手,并且一直在使用 WinBUGS,但我发现它不太适合存储/呈现结果,所以我一直使用 R2WinBUGS 包从 R 调用它。数据显然存储为“错误”类。

我将它转换为 coda 以运行诊断,它显示每个链,但我对每个单独链的 $ 扩展名感到困惑。我找不到任何关于“尾声”类的好文档(cran 说明没有帮助)。

我的代码如下:

> bugs.sim <- bugs(data, inits, parameter, "gl.bug", n.chains = 5,
                   codaPkg = TRUE, DIC = FALSE, n.iter = 5000)
> codaobject <- read.bugs(bugs.sim)

如您所见,我有 5 个链,我想取每个链的平均值和标准差。我该怎么做呢?我可以使用 codaobject 对每个链进行Geweke 诊断,它将每个链显示为[[i]](i=1,,5)。

提前致谢。任何对 R2Winbugs 详细文档的引用,也将不胜感激。

2个回答

返回read.bugs的对象是 S3 类的对象mcmc.list您可以使用双括号[[来访问单独的链,即mcmc构成较大mcmc.list对象的不同对象,这实际上只是一个简单的对象列表,mcmc它从其组件中继承了一些关于细化和链长度的信息。

更重要的是,s.th。likelapply(codaobject, function(x){ colMeans(x) })应该返回每个链中每个参数的后验均值,并且lapply(codaobject, function(x){ apply(x, 2, sd) })应该给出链和参数特定的后验 sd,因为每个链本质上只是一个数字矩阵,其行对应于(保存的)迭代,列对应于不同的参数。

编辑:我认为 Gelman/Hill 的“贝叶斯数据分析”包含一些使用 R2WinBUGS 的工作示例。

您的链的内容以三种不同的格式存储。看一眼

bugs.sim$sims.array
bugs.sim$sims.list
bugs.sim$sims.matrix

并阅读 的价值部分?bugs