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

在R中只能进行一次优化调用?,r,function,for-loop,optimization,sapply,R,Function,For Loop,Optimization,Sapply,我试图在15次试验中找到两个二项分布的两个ps,其中5次q成功 对于两个二项分布中的第一个,我希望左5,即0到5的累积概率为.05 alpha 对于两个二项分布中的第二个,我想要5的右边,即5到15的累积概率为.05alpha 问题 我可以通过调用optimize两次来找到这两个ps,请参见下文。但我想知道是否有一种方法可以让我打一个优化电话得到相同的答案 q = 5 ; s = 15 ; alpha = .05 f1 <- function (q, s, p, alpha) { a

我试图在15次试验中找到两个二项分布的两个ps,其中5次q成功

对于两个二项分布中的第一个,我希望左5,即0到5的累积概率为.05 alpha

对于两个二项分布中的第二个,我想要5的右边,即5到15的累积概率为.05alpha

问题 我可以通过调用optimize两次来找到这两个ps,请参见下文。但我想知道是否有一种方法可以让我打一个优化电话得到相同的答案

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))

所有这些粗体和大写的文本使得阅读你的问题变得比必要的更困难。没有多少好的地方。@rnorouzian用这些请求ping别人通常是不好的。请不要养成这种习惯。正因为如此,我尝试了一下。我向你道歉,并再次感谢你优雅的回答。
          [,1]        [,2]        
minimum   0.5774437   0.141664    
objective 4.32016e-09 1.626525e-10