我试图在15次试验(p
)中为两个二项分布找到两个q
,共有5次成功(s
)。
对于两个二项分布中的第一个,我想要 左边的“5” (即 0到5 )累积概率“。05”(alpha
)。
对于两个二项分布的第二个,我想 右边的“5” (即 5到15 )累积概率“。05”(alpha
)。
我可以通过调用p
两次找到两个optimize()
(见下文)。但我想知道是否有一种方法可以进行一次optimize()
调用以获得相同的答案?
q = 5 ; s = 15 ; alpha = .05
f1 <- function (q, s, p, alpha) {
abs((pbinom(q = q, s = s, p)) - alpha)
}
CI[1] = optimize(f1, interval = c(0, 1), alpha = alpha, s = s, q = q, tol = 1e-12)[[1]]
## 0.5774437 (answer is correct)
f2 <- function(q, s, p, alpha){
abs((pbinom(q = q - 1, s = s, p, lower.tail = FALSE)) - alpha)
}
CI[2] = optimize(f2, interval = c(0, 1), alpha = alpha, s = s, q = q, tol = 1e-12)[[1]]
## 0.141664 (answer is correct)
答案 0 :(得分:1)
您可以在此处为f mapply
添加其他参数。使用mapply
,您可以并行向函数提供多个参数。在这里,我们提供lower.tail参数和q参数。请注意,mapply
只是一个便利函数,一旦将附加参数添加到函数中,就可以得到与for
循环类似的东西。
f <- function(q, s, p, alpha, lower.tail = TRUE){
abs((pbinom(q = q, s = s, p, lower.tail = lower.tail)) - alpha)
}
mapply(function(q, x) optimize(f, interval = c(0, 1), alpha = alpha, s = s,
q = q, tol = 1e-12, lower.tail=x),
c(q, q-1), c(TRUE, FALSE))
返回具有所需值的矩阵
[,1] [,2]
minimum 0.5774437 0.141664
objective 4.32016e-09 1.626525e-10