为何`binom::binom.confint`函数的`conf.level`参数对结果无影响?
问题:binom::binom.confint的prop.test方法不响应conf.level参数
当使用binom::binom.confint并指定methods = "prop.test"时,修改conf.level参数无法改变置信区间结果,但直接调用binom.test时该参数可正常调整区间范围。
复现代码
binom.confint的异常表现
library(binom) x <- 10 n <- 20 # 设置置信水平0.80 binom.confint(x, n, methods = "prop.test", conf.level = 0.80) # method x n mean lower upper # 1 prop.test 10 20 0.5 0.299298 0.700702 # 设置置信水平0.95 binom.confint(x, n, methods = "prop.test", conf.level = 0.95) # method x n mean lower upper # 1 prop.test 10 20 0.5 0.299298 0.700702
binom.test的正常表现
# 置信水平0.80 binom.test(x, n, conf.level=0.80)$conf.int # [1] 0.3381709 0.6618291 # 置信水平0.95 binom.test(x, n, conf.level=0.95)$conf.int # [1] 0.2719578 0.7280422
问题原因
查看binom::binom.confint的源码可知,当选择prop.test方法时,函数内部调用prop.test时没有传递用户设置的conf.level参数,始终使用prop.test默认的0.95置信水平,因此无论传入什么conf.level值,计算结果都不会变化。
临时解决方法
如果需要用prop.test的逻辑并自定义置信水平,可以直接调用prop.test函数,或者封装一个简单函数:
my_binom_prop_confint <- function(x, n, conf.level = 0.95) { res <- prop.test(x, n, conf.level = conf.level) data.frame(method = "prop.test", x = x, n = n, mean = res$estimate, lower = res$conf.int[1], upper = res$conf.int[2]) } # 测试0.80置信水平 my_binom_prop_confint(10, 20, conf.level = 0.80) # method x n mean lower upper # 1 prop.test 10 20 0.5 0.3381709 0.6618291 # 测试0.95置信水平 my_binom_prop_confint(10, 20, conf.level = 0.95) # method x n mean lower upper # 1 prop.test 10 20 0.5 0.2719578 0.7280422
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

