对重复实验进行仿真研究的问题解释了95%的置信区间-我在哪里做错了?


9

我正在尝试编写R脚本来模拟95%置信区间的重复实验解释。我发现它高估了样本的95%CI中包含某个比例的真实总体值的时间比例。差异不大-大约是96%和95%,但这仍然令我感兴趣。

我的函数samp_n从伯努利分布中随机抽取了一个样本pop_p,然后prop.test()使用连续性校正或更精确地使用来计算95%的置信区间binom.test()。如果真实人口比例pop_p包含在95%CI中,则返回1 。我编写了两个函数,一个使用prop.test(),一个使用binom.test()并具有相似的结果:

in_conf_int_normal <- function(pop_p = 0.3, samp_n = 1000, correct = T){
    ## uses normal approximation to calculate confidence interval
    ## returns 1 if the CI contain the pop proportion
    ## returns 0 otherwise
    samp <- rbinom(samp_n, 1, pop_p)
    pt_result <- prop.test(length(which(samp == 1)), samp_n)
    lb <- pt_result$conf.int[1]
        ub <- pt_result$conf.int[2]
    if(pop_p < ub & pop_p > lb){
        return(1)
    } else {
    return(0)
    }
}
in_conf_int_binom <- function(pop_p = 0.3, samp_n = 1000, correct = T){
    ## uses Clopper and Pearson method
    ## returns 1 if the CI contain the pop proportion
    ## returns 0 otherwise
    samp <- rbinom(samp_n, 1, pop_p)
    pt_result <- binom.test(length(which(samp == 1)), samp_n)
    lb <- pt_result$conf.int[1]
        ub <- pt_result$conf.int[2] 
    if(pop_p < ub & pop_p > lb){
        return(1)
    } else {
    return(0)
    }
 }

我发现,当您重复进行数千次实验时,pop_pσ在样本的95%置信区间内的比例接近0.96,而不是0.95。

set.seed(1234)
times = 10000
results <- replicate(times, in_conf_int_binom())
sum(results) / times
[1] 0.9562

到目前为止,我对为什么会这样的想法是

  • 我的代码是错误的(但是我已经检查了很多)
  • 我最初以为这是由于正常的近似问题,但后来发现 binom.test()

有什么建议么?


(+1)顺便说一句,我times=100000在几个不同的时间重新运行了您的代码,并看到了相同的结果。我很好奇,是否有人对此有解释。代码足够简单,我可以肯定没有编码错误。另外,一个与跑times=1000000.954931作为结果。
2012年

3
(+1)但是为什么您期望得到准确的95%?例如,克洛珀·皮尔森就可以保证自己是保守的。对于您的和,我认为CI应该覆盖95.3648%的真实值。ñp
主教

2
为了支持基数评论,精确的二项式概率是精确的,因为的基础是精确的概率计算,但是不一定提供精确的置信度。那是因为二项式是离散分布。因此,Clopper-Pearson选择了该时间间隔的终点,以便您具有等于或高于该水平的置信度水平的最接近概率。这也会对精确的二项式检验的幂函数产生锯齿状的行为。我在与《美国统计学家》(2002)的克里斯汀·刘(Christine Liu)的论文中讨论了这个奇怪但基本的结果。
Michael R. Chernick

1
我在此链接上的论文详细信息: citeulike.org/user/austin987/article/7571878
Michael R.

3
精确的二项式CI是“精确的”,因为它们的实际性能等于其名义性能,而不是因为概率计算是“精确的”!它必须理解的是, CI必须有至少一个覆盖真实参数,机会不管底层的分布是什么(假定家庭内)。“精确”是指整个分布族中所有这些覆盖范围的最小值等于。为此,许多可能分布的实际覆盖率通常必须大于。1个-α1个-α 1个-α1个-α
ub

Answers:


9

你没错。这简直是不可能构建一个二项式比例的置信区间,其始终具有的覆盖面正好 95%,原因是结果的离散性。Clopper-Pearson(“精确”)间隔保证覆盖率至少为 95%。当平均间隔超过真实比例时,其他间隔的平均覆盖率接近95%。

我倾向于偏爱Jeffreys区间,因为它的平均覆盖率接近95%(与Wilson得分区间不同),两条尾巴的覆盖率大致相等。

只需在问题代码中进行很小的更改,我们就可以计算出精确的覆盖范围,而无需进行仿真。

p <- 0.3
n <- 1000

# Normal test
CI <- sapply(0:n, function(m) prop.test(m,n)$conf.int[1:2])
caught.you <- which(CI[1,] <= p & p <= CI[2,])
coverage.pr <- sum(dbinom(caught.you - 1, n, p))

# Clopper-Pearson
CI <- sapply(0:n, function(m) binom.test(m,n)$conf.int[1:2])
caught.you.again <- which(CI[1,] <= p & p <= CI[2,])
coverage.cp <- sum(dbinom(caught.you.again - 1, n, p))

这将产生以下输出。

> coverage.pr
[1] 0.9508569

> coverage.cp
[1] 0.9546087

1
由于结果的离散性,不可能为二项式比例构造始终具有准确覆盖率95%的置信区间 ” ---也许还有(有些奇怪的)随机区间的可能性。(至少以这种方式可以完成,尽管通常可能不应该这样做。)
Glen_b -Reinstate Monica

2
@Glen_b我一直对随机决定的异议感到好奇。我相信杰克·基弗(Jack Kiefer)说过,如果您可以使用随机化来收集样本,那么在决策过程中使用它应该没有问题。如果您需要一个可重复,有据可查且难以作弊的决策程序,则只需收集数据之前生成随机间隔所需的任何随机值即可-将其纳入设计中。
Whuber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.