只能在 R 中进行一次优化调用吗?

Could make only one optimize call in R?

我试图在 15 次试验 (s) 中为两个二项式分布找到两个 ps 并取得 5 次成功 (q)。

问题

我可以通过调用 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