我正在使用nls.lm {package:minpack.lm}函数来优化水文模型的参数设置。该功能运行良好,但我想使用其他objective function (OF)
。通常,nls.lm中的对象函数“ fn”定义为
A function that returns a vector of residuals, the sum square of which
is to be minimized. The first argument of fn must be par.
现在我要使用
Nash-Sutcliff-Efficiency
,它被定义为NSE <- 1 - (sum((obs - sim)^2) / sum((obs - mean(obs))^2))
或其他OF。问题是
nls.lm
最小化了表达式sum(x)^2
,并且只有x
是可修改的。我知道best fit NSE = 1
。因此,1 - NSE
产生了一个真正的最小化问题。顺便说一句:
nls.lm
help page中的示例1是一个很好的例子;那里observed - getPred(p,xx)
被最小化,实际上意味着
sum ( observed - getPred(p,xx) )^2
通过
nls.lm
函数最小化,而getPred(p,xx)
返回sim
。任何建议都会有所帮助。提前致谢。
cha茶
最佳答案
nls.lm(以及相关函数nls和nlsLM)旨在最小化残差的平方和。对于您要解决的问题,我将尝试使用通用的最小化器。
如果问题不是“太难”(也就是说,有一个全局最小值,则很平滑),则可以尝试对其应用“优化”(我会先尝试使用“ Nelder-Mead”和“ BFGS”选项) ,或软件包“ minqa”中的“ bobyqa”功能,以及其他功能。
如果问题需要全局优化程序,则可以尝试使用软件包“ GenSA”中的“ GenSA”功能,软件包“ rgenoud”中的“ genoud”功能或软件包“ DEoptim”中的“ DEoptim”功能。 《统计软件》杂志上即将对“ R中的全局优化”进行综述,这将提供适用功能的更完整概述。
关于r - 在“R”中的nls.lm()中更改目标函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14482220/