我使用了JAGS并通过rjags调用它来生成mcmc.list对象foldD_samples,该对象包含了大量随机节点的trace监视器(>800个节点)。
现在我想使用R来计算这些节点的一个相当复杂的标量值函数,并将输出写入一个mcmc对象,以便我可以使用coda来总结后验分布并运行收敛诊断。
然而,我一直无法弄清楚如何从foldD_samples中获取后验抽样数据到一个数据框中。非常感谢任何帮助。
以下是mcmc.list的结构:
现在我想使用R来计算这些节点的一个相当复杂的标量值函数,并将输出写入一个mcmc对象,以便我可以使用coda来总结后验分布并运行收敛诊断。
然而,我一直无法弄清楚如何从foldD_samples中获取后验抽样数据到一个数据框中。非常感谢任何帮助。
以下是mcmc.list的结构:
str(foldD_samples)
List of 3
$ : mcmc [1:5000, 1:821] -0.667 -0.197 -0.302 -0.204 -0.394 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr [1:821] "beta0" "beta1" "beta2" "dtau" ...
..- attr(*, "mcpar")= num [1:3] 4100 504000 100
$ : mcmc [1:5000, 1:821] -0.686 -0.385 -0.53 -0.457 -0.519 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr [1:821] "beta0" "beta1" "beta2" "dtau" ...
..- attr(*, "mcpar")= num [1:3] 4100 504000 100
$ : mcmc [1:5000, 1:821] -0.492 -0.679 -0.299 -0.429 -0.421 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr [1:821] "beta0" "beta1" "beta2" "dtau" ...
..- attr(*, "mcpar")= num [1:3] 4100 504000 100
- attr(*, "class")= chr "mcmc.list"
祝福, Jacob
do.call(rbind.data.frame, foldD_samples)
。也许更快更高效的方法是使用data.table::rbindlist
。 - user20650code.samples
,而无需将其强制转换为数据框。 - user20650do.call(rbind.data.frame, foldD_samples)
运行得很好。如果以这样的形式发布,我很乐意接受它作为答案。data.table::rbindlist
不接受mcmc.list对象作为输入。还请注意附言中"code"被误写成"coda"的可能打字错误。 - Jacob Socolarrbindlist(lapply(foldD_samples,as.data.frame))
可能会起作用。 - Ben Bolker