R,HPD(最高后验密度)区间基于后验样本,WinBUGS

R, HPD (Highest posterior density) interval based on samples from posterior, WinBUGS

如何计算后验样本的HPD(最高后验密度)区间?我有四个参数,我从后验参数分布生成 1000 个样本。现在如何在 R 软件中计算 HPD。我使用了包代码但是我得到了一个错误

    HPDinterval(winbugsresult$sims.list,prob=0.05)
    Error in UseMethod("HPDinterval") : 
    no applicable method for 'HPDinterval' applied to an object of class "list"

其中“winbugsresult”是一个包含后验样本的列表。

我也使用了一个向量,但我得到了以下错误

    HPDinterval(winbugsresult$sims.list$alpha ,prob=0.05)
    Error in UseMethod("HPDinterval") : 
    no applicable method for 'HPDinterval' applied to an object of class "c('double', 'numeric')"

我只使用了正常的随机向量,但我又出错了

    HPDinterval(rnorm(100))
    Error in UseMethod("HPDinterval") : 
    no applicable method for 'HPDinterval' applied to an object of class "c('double', 'numeric')"

我不太确定 winbugsresult$sims.list 的结构(您可以编辑您的答案以包含 str(winbugsresult$sims.list)),但转换数值向量 带有 as.mcmc() 的矩阵为您提供了一个可以传递给 HPDinterval 的对象,例如

library(coda)
HPDinterval(as.mcmc(rnorm(1000)))
HPDinterval(as.mcmc(matrix(rnorm(1000),ncol=10)))  # matrix