优化全局最小值

Optimizing for global minimum

我正在尝试使用 optimize() 为以下函数(Clopper-Pearson 下界)找到 n 的最小值:

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 中正确找到全局最小值以及如何在任何时间间隔内找到?

非常简短地 查看了 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))

正如@MrFlick 所说,全局优化很难。您可以从 optim(...method="SANN") 开始,但最好的答案肯定是特定于案例的。