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) は、残差の二乗和を最小化するように設計されています。あなたが解決しようとしている問題については、汎用の最小化ツールを適用してみます。

問題が「それほど難しくない」(つまり、単一のグローバルな最小値があり、滑らかである) 場合は、それに「optim」を適用してみることができます (最初に「Nelder-Mead」および「BFGS」オプションを試します)。 、またはパッケージ「minqa」の「bobyqa」関数などの関数。

問題にグローバル オプティマイザーが必要な場合は、パッケージ 'GenSA' の 'GenSA' 関数、パッケージ 'rge​​noud' の 'genoud' 関数、パッケージ 'DEoptim' の 'DEoptim' 関数などを試すことができます。「R のグローバル最適化」に関するレビューは、Journal of Statistical Software で間もなく公開され、適用可能な機能のより完全な概要が提供されます。

于 2013-01-23T23:55:02.153 に答える