3

我正在使用函数 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 帮助页面中的示例 1是一个很好的示例;那里

observed - getPred(p,xx)

被最小化,实际上意味着什么

sum ( observed - getPred(p,xx) )^2

nls.lm函数最小化,而getPred(p,xx)返回sim.

任何建议都会有所帮助。提前致谢。米查

4

1 回答 1

1

nls.lm(以及相关的函数 nls 和 nlsLM)旨在最小化残差的平方和。对于您要解决的问题,我会尝试使用通用最小化器。

如果问题“不太难”(也就是说,有一个全局最小值,是平滑的),您可以尝试对其应用“优化”(我会先尝试“Nelder-Mead”和“BFGS”选项) ,或包'minqa'中的'bobyqa'函数,以及其他函数。

如果问题需要全局优化器,您可以尝试使用“GenSA”包中的“GenSA”函数、“rgenoud”包中的“genoud”函数或“DEoptim”包中的“DEoptim”函数,以及其他选项。Journal of Statistical Software 即将发表关于“R 中的全局优化”的评论,这将对适用函数进行更完整的概述。

于 2013-01-23T23:55:02.153 回答