我想最小化包含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, b
和c
的组合?
非常感谢您的任何帮助!
实现此类约束的一种方法是,在不满足约束时gev.score
返回大量数字。您最小化,因此算法将远离违反约束的点。 (这种方法的缺点是你在目标函数中引入了跳转,这可能会产生新的麻烦。
由于只有三个参数需要优化,因此您也可以考虑网格搜索。
顺便说一下,如果您创建一个小型可重现的示例,这将有所帮助。