回答:
そこ私の知ることをベースRの汎用最適化ルーチンの数は以下のとおりです。optim
、nlminb
、nlm
およびconstrOptim
(線形不等式制約、およびコールを処理しているoptim
ボンネットの下)。使用するものを選択する際に考慮したいことがいくつかあります。
optim
共役勾配、ニュートン、準ニュートン、ネルダーミード、シミュレーテッドアニーリングなど、さまざまなアルゴリズムを使用できます。最後の2つは勾配情報を必要としないため、勾配が利用できない場合や計算が不可能な場合に役立ちます(ただし、それぞれ速度が遅く、より多くのパラメーターの微調整が必要になる可能性があります)。また、ソリューションで計算されたヘッシアンを返すオプションもあります。これは、ソリューション自体とともに標準エラーが必要な場合に必要になります。
nlminb
の"L-BFGS-B"
方法と同じニッチを満たす準ニュートンアルゴリズムを使用しoptim
ます。私の経験では、収束に失敗するoptim
限界的なケースでoptim
は解決策を返す可能性が高いという点で、それは問題に依存している可能性がありますが、それよりも少し堅牢であるようです。明示的な勾配関数を提供する場合、ソリューションで値の数値チェックを行うという優れた機能があります。これらの値が数値差分から取得した値と一致しない場合nlminb
、警告が表示されます。これにより、勾配の指定を間違えないようにすることができます(複雑な可能性を簡単に処理できます)。
nlm
ニュートンアルゴリズムのみを使用します。これは、収束に到達するために必要な反復回数が少ないという意味で、他のアルゴリズムよりも高速ですが、独自の欠点があります。尤度の形状により敏感であるため、2次関数が強くない場合は遅くなるか、誤った解に収束する可能性があります。また、ニュートンアルゴリズムはヘッセ行列を使用しますが、実際には理論上の高速化を打ち消す以上に遅くなる可能性があります。
特定の最大化方法を使用する場合と使用しない場合は、使用するデータのタイプに大きく依存します。nlm
尤度面が特に「粗く」なく、どこでも微分可能であれば、うまく機能します。nlminb
パラメータ値を特定の境界ボックスに制限する方法を提供します。optim
おそらく最もよく使用されるオプティマイザーは、いくつかの異なる最適化ルーチンを提供します。たとえば、BFGS、L-BFGS-B、およびシミュレートされたアニーリング(SANNオプションを使用)。後者は、最適化が難しい問題がある場合に便利です。また、CRANには多数のオプティマイザーが用意されています。rgenoud
、たとえば、最適化のための遺伝的アルゴリズムを提供します。DEoptim
別の遺伝的最適化ルーチンを使用します。遺伝的アルゴリズムは収束に時間がかかる可能性がありますが、通常、尤度に不連続がある場合でも(時間内に)収束することが保証されています。私は知りませんDEoptim
が、rgenoud
使用するように設定されてsnow
やや助け並列処理のために。
したがって、おそらくやや不十分な答えは、使用nlm
しているデータに対して機能する場合は、他のオプティマイザーを使用する必要があるということです。あなたは行儀の可能性を持っている場合は、により提供されるルーチンのいずれoptim
かがnlm
あなたにも同じ結果が得られます。データセットのサイズなどに応じて、いくつかは他のものより高速かもしれませんが、重要かもしれません。これらのルーチンが処理できるパラメータの数に関しては、おそらくかなりの数ですが。もちろん、パラメータが多いほど、収束の問題が発生する可能性が高くなります。