library(binom)
x <- 10
n <- 20
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
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
一起使用
binom.test(x, n, conf.level=0.80)$conf.int
# [1] 0.3381709 0.6618291
binom.test(x, n, conf.level=0.95)$conf.int
# [1] 0.2719578 0.7280422
最佳答案
这似乎是软件包中的一个错误。根据docs对于 methods
参数:
prop.test
: equivalent toprop.test(x = x, n = n, conf.level = conf.level)$conf.int
.
但是,如果我们看一下 source :
if(any(method == "prop.test") || all.methods) {
ci <- lapply(seq_along(x), function(i) stats::prop.test(x[i], n[i])$conf.int)
}
您可以看到 conf.level
参数没有传递给 prop.test()
,因此它始终使用默认值 (0.95
)。应该说:
lapply(seq_along(x), function(i) stats::prop.test(x[i],
n[i], conf.level = conf.level)$conf.int)
这将导致不同 CI 的不同输出:
lapply(seq_along(x), function(i) stats::prop.test(x[i],
n[i], conf.level = 0.95)$conf.int)
# [[1]]
# [1] 0.299298 0.700702
lapply(seq_along(x), function(i) stats::prop.test(x[i],
n[i], conf.level = 0.8)$conf.int)
# [[1]]
# [1] 0.362262 0.637738
我不完全确定如何解决这个问题。 Github repo似乎是只读的,因此您无法打开问题或拉取请求。也许您可以使用 CRAN page 上的详细信息联系软件包维护者。 。同时您可以尝试下面的热修复。
热修复
这不是构建强大代码库的方法,但如果您需要短期解决方案,您可以像这样修补函数:
# Replace the relevant line
binom_confint_body2 <- sub(
"function(i) stats::prop.test(x[i], n[i])$conf.int)",
"function(i) stats::prop.test(x[i], n[i], conf.level = conf.level)$conf.int)",
body(binom.confint),
fixed = TRUE
)
# Get access to binom.methods in the binom environment
binom_confint_body2 <- gsub(
"binom.methods",
"binom:::binom.methods",
binom_confint_body2,
fixed = TRUE
)
# Create the function text
binom_confint2_txt <- paste(c(
'binom.confint2 <- function (x, n, conf.level = 0.95, methods = "all", ...) {',
binom_confint_body2,
"}}",
collapse = "\n"
))
# eval the function text to create binom.confint2()
eval(parse(text = binom_confint2_txt))
然后我们可以运行binom.confin2
:
# Run the function
binom.confint2(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.confint2(x, n, methods = "prop.test", conf.level = 0.80)
# method x n mean lower upper
# 1 prop.test 10 20 0.5 0.362262 0.637738
关于r - 为什么 `conf.level` 参数对 `binom::binom.confint` 函数的结果没有影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77253457/