我正在尝试编写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)但是为什么您期望得到准确的95%?例如,克洛珀·皮尔森就可以保证自己是保守的。对于您的和,我认为CI应该覆盖95.3648%的真实值。
—
主教
为了支持基数评论,精确的二项式概率是精确的,因为的基础是精确的概率计算,但是不一定提供精确的置信度。那是因为二项式是离散分布。因此,Clopper-Pearson选择了该时间间隔的终点,以便您具有等于或高于该水平的置信度水平的最接近概率。这也会对精确的二项式检验的幂函数产生锯齿状的行为。我在与《美国统计学家》(2002)的克里斯汀·刘(Christine Liu)的论文中讨论了这个奇怪但基本的结果。
—
Michael R. Chernick
我在此链接上的论文详细信息: citeulike.org/user/austin987/article/7571878
—
Michael R.
精确的二项式CI是“精确的”,因为它们的实际性能等于其名义性能,而不是因为概率计算是“精确的”!它必须理解的是, CI必须有至少一个覆盖真实参数,机会不管底层的分布是什么(假定家庭内)。“精确”是指整个分布族中所有这些覆盖范围的最小值等于。为此,许多可能分布的实际覆盖率通常必须大于。
—
ub
times=100000
在几个不同的时间重新运行了您的代码,并看到了相同的结果。我很好奇,是否有人对此有解释。代码足够简单,我可以肯定没有编码错误。另外,一个与跑times=1000000
了.954931
作为结果。