在 R 中找到给定 HDI 区间的 CI?

Find the CI for a given interval of HDI in R?

我正在寻找一种方法来计算模式周围给定范围的 CI 的值。例如,如果我的模式(或具有最高 KDE 的值)是 50,并且我在该模式周围建立了 10 的可接受范围,那么我的等价物是什么 CI?

我已经成功地按照 https://rdrr.io/cran/HDInterval/man/hdi.html 中的 HDI 内容找到了基于给定 CI 的范围,但我正在尝试相反的过程。示例代码从站点复制到此 post 以方便使用数据进行测试:

# for a vector:
tst <- rgamma(1e5, 2.5, 2)
hdi(tst)
hdi(tst, credMass=0.8)
# For comparison, the symmetrical 80% CrI:
quantile(tst, c(0.1,0.9))

# for a density:
dens <- density(tst)
hdi(dens, credMass=0.8)

我的蛮力方法会考虑诸如计算不同 CI 输入的 upper/lower 值之间的差异,直到我找到最大值 CI 之间的给定增量和更低。我确定有更好的方法?

这样做的目的是比较 CI 在相同值范围内的不同数据集之间的变化情况。数据通常是多峰的,并试图避免拟合分布的约束。

这似乎是蛮力方法:

      buffer <- 100
      ci_x <- 1
      ci_hdi = NULL
      while (buffer > 10){
        ci_hdi <- ci(data$x, method = "HDI", ci = ((100-ci_x)/100))
        buffer = ci_hdi$CI_high - ci_hdi$CI_low
        ci_x = ci_x+1
      }
      print(buf)

基本上,它会通过值进行计数,直到找到满足条件(例如 10)的缓冲区(可接受值的范围),然后报告 CI(100-ci_x)满足此条件的内容。在初始测试中运行良好,我看到在紧密分布上有很大的 CI 值,然后在不稳定分布下接近 50 的值。