优化全球最低标准

时间:2016-06-10 17:48:31

标签: r optimization confidence-interval sample-size

我试图使用optimize()来找到以下函数的最小值n(Clopper-Pearson下界):

f <- function (n, p=0.5) 
 (1 + (n - p*n + 1) / 
    (p*n*qf(p= .025, df1= 2*p, df2= 2*(n - p + 1))))^-1

以下是我尝试优化它的方法:

n_clop <- optimize(f.1, c(300,400), maximum = FALSE, p=0.5)
n_clop

我在[300,400]的间隔内做了这个,因为我怀疑它内部的值,但最终我想在0和无穷大之间进行优化。似乎这个命令正在产生一个局部最小值,因为无论它在哪个区间产生该区间的下限作为最小值 - 这不是我怀疑clopper-pearson。那么,我的两个问题是如何在R中正确找到全局最小值以及如何在任何时间间隔内找到它?

1 个答案:

答案 0 :(得分:2)

非常短暂地查看了Wikipedia page you linked并且没有看到你的公式中有任何明显的拼写错误(虽然我觉得它应该是0.975 = 1- alpha / 2而不是0.025 = alpha / 2?)。但是,评估您在非常广泛的范围内编码的功能表明,没有任何局部最小值会让您烦恼。我的强烈猜测是,你的逻辑是错误的(即,n-> 0真的是正确的答案),或者由于输入错误而你没有编码你认为你编码的东西(可能在维基百科的文章中,虽然这似乎不太可能)或思想。

f <- function (n, p=0.5) 
 (1 + (n - p*n + 1) / 
    (p*n*qf(p= .025, df1= 2*p, df2= 2*(n - p + 1))))^-1

确认您在所选时间间隔内获得正确答案:

curve(f(x),c(300,400)) 

评估范围广(n = 0.00001至1000000):

curve(f(10^x),c(-5,7))

enter image description here

正如@MrFlick建议的那样,全局优化很难。你可以从optim(...method="SANN")开始,但最好的答案绝对是针对特定情况的。