如何计算R中计数数据的置信区间?

机器算法验证 r 置信区间 计数数据
2022-04-05 23:38:55

作为问题,我在这里找到了类似的东西,但是如何在 R 中做到这一点?

3个回答

您正在寻找围绕泊松过程计数的置信区间。如果您将例如 42 放入链接示例中,您将得到

你在某个体积内观察到 42 个物体或在某个时间段内观察到 42 个事件。

精确泊松置信区间:

  • 90% 置信区间从 31.94 扩展到 54.32
  • 95% 置信区间从 30.27 扩展到 56.77
  • 99% 置信区间从 27.18 扩展到 61.76

你可以在 R 中使用poisson.test. 例如

> poisson.test(42, conf.level = 0.9 )

        Exact Poisson test

data:  42 time base: 1 
number of events = 42, time base = 1, p-value < 2.2e-16
alternative hypothesis: true event rate is not equal to 1 
90 percent confidence interval:
 31.93813 54.32395 
sample estimates:
event rate 
        42  

同样通过改变其他值conf.level如果您不想要所有背景信息,请尝试类似

> poisson.test(42, conf.level = 0.95 )$conf.int
[1] 30.26991 56.77180
attr(,"conf.level")
[1] 0.95

如果事件的数量太少,最好使用精确的方法。

exactPoiCI <- function (X, conf.level=0.95) {
  alpha = 1 - conf.level
  upper <- 0.5 * qchisq((1-(alpha/2)), (2*X))
  lower <- 0.5 * qchisq(alpha/2, (2*X +2))
  return(c(lower, upper))
}
exactPoiCI(42, 0.9)
exactPoiCI(42)
exactPoiCI(42, 0.99)

参考:Liddell FD。标准化死亡率的简单精确分析。J 流行病社区健康。1984;38:85-8(链接

使用 poisson.test 的第一个答案确实给出了确切的置信区间。但是,这个计算非常简单,我更喜欢直接计算而不是使用库函数。在第二个答案中,有一个小错误。+2 应该在较高 CI 计算的自由度中,而不是较低的自由度。所以正确的代码应该是:

exactPoiCI <- function (X, conf.level=0.95) {
  alpha = 1 - conf.level
  upper <- 0.5 * qchisq(1-alpha/2, 2*X+2)
  lower <- 0.5 * qchisq(alpha/2, 2*X)
  return(c(lower, upper))
}

exactPoiCI(42, 0.9)
exactPoiCI(42)
exactPoiCI(42, 0.99)