代码之家  ›  专栏  ›  技术社区  ›  rnorouzian

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

  •  0
  • rnorouzian  · 技术社区  · 7 年前

    我想找两个 p 对于两个二项分布,有5个成功( q )在15次试验中( s ).

    • 对于两个二项式分布中的第一个,我想要 “5”的左侧 0到5 )累积概率为 ".05" alpha ).

    • “5”的权利 (即。, 5至15 ".05" 阿尔法 ).

    我能找到这两个 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)
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   lmo    7 年前

    您可以添加一个额外的参数到f use mapply mapply ,可以并行地将多个参数提供给函数。在这里,我们喂养较低的。尾参数和q参数。请注意 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