我正在寻找一种方法来计算给定的模式范围内的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如何在相同的值范围内跨不同的数据集变化。数据往往是多模的,并试图避免对分布拟合的限制。
发布于 2020-02-12 15:53:26
这似乎是一种蛮力的方法:
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,并且是不稳定的分布。
https://stackoverflow.com/questions/60103225
复制相似问题