gpt4 book ai didi

r - 更改 "R"中 nls.lm() 中的目标函数

转载 作者:行者123 更新时间:2023-12-02 00:50:12 28 4
gpt4 key购买 nike

我正在使用函数 nls.lm {package: minpack.lm} 来优化水文模型的参数。该函数运行得很好,但我想使用其他目标函数 (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 是可修改的。我知道最适合 NSE = 1。因此1 - NSE创建了一个真正的最小化问题。

顺便说一句:示例 1 来自 nls.lm help page就是一个很好的例子;那里

observed - getPred(p,xx)

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

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

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

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

最佳答案

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

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

如果问题需要全局优化器,您可以尝试“GenSA”包中的“GenSA”函数、“rgenoud”包中的“genoud”函数或“DEoptim”包中的“DEoptim”函数,其中其他选项。 《统计软件杂志》即将发表有关“R 中的全局优化”的评论,该评论将对适用功能提供更完整的概述。

关于r - 更改 "R"中 nls.lm() 中的目标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14482220/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com