我正在使用函数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
会产生真正的最小化问题。
BTW:来自nls.lm
help page的示例1就是一个很好的例子;那里
observed - getPred(p,xx)
被最小化,实际上意味着什么
sum ( observed - getPred(p,xx) )^2
由nls.lm
函数最小化,而getPred(p,xx)
返回sim
。
任何建议都会有所帮助。提前致谢。 米莎
答案 0 :(得分:1)
nls.lm(以及相关函数nls和nlsLM)旨在最小化残差的总和平方。对于你想要解决的问题,我会尝试应用通用的最小化器。
如果问题“不太难”(也就是说,只有一个全局最小值,顺利),你可以尝试对它应用'optim'(我会尝试'Nelder-Mead'和'BFGS'选项第一),或'minqa'包中的'bobyqa'功能,以及其他功能。
如果问题需要全局优化器,您可以尝试“GenSA”包中的“GenSA”功能,“rgenoud”包中的“genoud”功能,或“DEOPtim”包中的“DEOPtim”功能,其他选择。 “统计软件期刊”即将对“全局优化R”进行评论,这将对适用的功能进行更全面的概述。