使用rjags中的尾声样本进行诊断

时间:2014-05-27 17:24:30

标签: r coda jags

我是贝叶斯和JAGS的新手,所以请原谅我的无知。

我已经发送了一个使用JAGS代码编写的R脚本(由同事)。

此代码的作者已定义了一组尾声样本,如下所示:

codaSamples = coda.samples( jagsModel , variable.names=parameters , 
                            n.iter=nPerChain , thin=thinSteps )

我希望获得以下内容,并取得了有限的成功:

Gelman诊断:我使用了“show(gelman.diag(codaSamples))”,这对于单次模拟来说很好。但是,对于每个感兴趣的模拟,如何将每个参数的每个gelman诊断输出到文件?更感兴趣的是,是否可以仅记录Rhat值> 1.1的模拟比例?

密度图:我使用过“show(densplot(codaSamples))”。但是,这会在单独的图上生成每个图(我在模型中有96个参数)。是否与“autocorr.plot”等效,每页放置几个图?

分位数:我使用了“show(summary(codaSamples))”,但是虽然这给出了每个参数的平均值,SD和特定的百分位数(这是我想要的),但它也给出了MCMC矩阵。无论如何只能指定每个参数的基本统计属性吗?

后验分布:有没有办法计算每个参数的给定值(比如零)低于/高于百分位数?然后总结所有模拟?

提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:2)

  • 记录gelman输出,例如:
  

write.csv(gelman.diag(codaSamples)$ psrf,file =" gelman.csv")

  • 绘制mcmc的密度:mcmc对象具有特定的S3类mcmc.list,因此class(codaSamples)应返回mcmc.list。这类对象有一个plot S3方法,带有参数:tracedensity
  

plot(codaSamples,trace = FALSE,density = TRUE)

这应符合您的期望。

  • summary(codaSamples)给出了参数的后验统计。我不确定我是否理解这个问题,但是codaSamples的长度为list:链中的数量,列数:您的estimeted参数,以及行数:链的每次迭代。因此,您可以使用此对象或子对象(quantiles,...)计算所需的每个统计信息。 例如,第一个参数的分位数:
  

分位数(codaSamples [[1]] [1])

[[1]]因为我拿第一个链,[,1]作为第一个参数。

要查看对象的结构,您需要使用str()。使用此功能,您可以选择所需的所有子对象。