在 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 的值。
我正在寻找一种方法来计算模式周围给定范围的 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 的值。