只能在 R 中进行一次优化调用吗?
Could make only one optimize call in R?
我试图在 15 次试验 (s
) 中为两个二项式分布找到两个 p
s 并取得 5 次成功 (q
)。
对于两个二项分布中的第一个,我想要左边的“5”(即0 到 5) 的累积概率为 ".05" (alpha
).
对于两个二项分布中的第二个,我想要 “5”的右边(即,5 到 15) 的累积概率为 ".05"(alpha
).
问题
我可以通过调用 optimize()
两次找到两个 p
(见下文)。但我想知道是否有一种方法可以让我拨打一个 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)
您可以在此处为 f use 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))
这个 return 具有所需值的矩阵
[,1] [,2]
minimum 0.5774437 0.141664
objective 4.32016e-09 1.626525e-10
我试图在 15 次试验 (s
) 中为两个二项式分布找到两个 p
s 并取得 5 次成功 (q
)。
对于两个二项分布中的第一个,我想要左边的“5”(即0 到 5) 的累积概率为 ".05" (
alpha
).对于两个二项分布中的第二个,我想要 “5”的右边(即,5 到 15) 的累积概率为 ".05"(
alpha
).
问题
我可以通过调用 optimize()
两次找到两个 p
(见下文)。但我想知道是否有一种方法可以让我拨打一个 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)
您可以在此处为 f use 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))
这个 return 具有所需值的矩阵
[,1] [,2]
minimum 0.5774437 0.141664
objective 4.32016e-09 1.626525e-10