r语言 - 在 optim() 中实现要优化的参数的标准



我想最小化包含GEV分布值的指标d。 因此,我需要找到a, b,并与optim()c,使得d理想收敛为 0。

以下是我的代码的简化摘录:

loc <- 3; sca <- 1; xi <- 0.1; o <- 1
gev.score <- function(pars,loc,sca,xi,o){
# Parameters I want to find
a <- pars[1]
b <- pars[2]
c <- pars[3]
# Define d, that I want to minimize
z   <- (o-(a+b*loc))/(c*sca)
GEV <- exp(-(1+xi*z)^(-1/xi))
d   <- 1-2*GEV
}
# Init values for a, b and c
init <- c(1,1,1)
# Let's optimize!
parameter <- optim(init,gev.score,
method='Nelder-Mead',
loc=loc,sca=sca,xi=xi,o=o,
control=list(maxit=40000))

但是,GEV 仅针对-(1+xi*z) > 0定义。是否有可能在optim()内实现此条件,以便它只会寻找满足此标准的a, bc的组合?

非常感谢您的任何帮助!

实现此类约束的一种方法是,在不满足约束时gev.score返回大量数字。您最小化,因此算法将远离违反约束的点。 (这种方法的缺点是你在目标函数中引入了跳转,这可能会产生新的麻烦。

由于只有三个参数需要优化,因此您也可以考虑网格搜索。

顺便说一下,如果您创建一个小型可重现的示例,这将有所帮助。

最新更新