在给定的HDI间隔内找到CI?

时间:2020-02-06 20:43:37

标签: r confidence-interval

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

我已经成功地遵循了https://rdrr.io/cran/HDInterval/man/hdi.html中的HDI内容,以根据给定的CI查找范围,但是我正试图逆转这一过程。从站点复制到此帖子的示例代码,方便使用数据进行测试:

# 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输入的上下值之间的差异,直到找到给定上下限之间的最大CI的最大CI为止。我确定有更好的方法吗?

此目标是比较CI在遵循相同值范围的不同数据集之间的变化。数据通常是多模式的,并试图避免适合于分布的约束。

1 个答案:

答案 0 :(得分:0)

这似乎是蛮力的方法:

      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左右。