MLEでRのnlm関数を使用すべきでないのはいつですか?


25

最尤推定にRのnlmを使用することを提案するいくつかのガイドに出くわしました。ただし、それらのいずれも(Rのドキュメントを含む)、関数を使用するか使用しないかの理論的なガイダンスを提供しません。

私が知る限り、nlmは単にNewtonの方法に沿って勾配降下を行っています。このアプローチを使用することが合理的である場合の原則はありますか?どのような選択肢がありますか?また、nlmに渡すことができる配列などのサイズに制限はありますか?

回答:


39

そこ私の知ることをベースRの汎用最適化ルーチンの数は以下のとおりです。optimnlminbnlmおよびconstrOptim(線形不等式制約、およびコールを処理しているoptimボンネットの下)。使用するものを選択する際に考慮したいことがいくつかあります。

  • optim共役勾配、ニュートン、準ニュートン、ネルダーミード、シミュレーテッドアニーリングなど、さまざまなアルゴリズムを使用できます。最後の2つは勾配情報を必要としないため、勾配が利用できない場合や計算が不可能な場合に役立ちます(ただし、それぞれ速度が遅く、より多くのパラメーターの微調整が必​​要になる可能性があります)。また、ソリューションで計算されたヘッシアンを返すオプションもあります。これは、ソリューション自体とともに標準エラーが必要な場合に必要になります。

  • nlminb"L-BFGS-B"方法と同じニッチを満たす準ニュートンアルゴリズムを使用しoptimます。私の経験では、収束に失敗するoptim限界的なケースでoptimは解決策を返す可能性が高いという点で、それは問題に依存している可能性がありますが、それよりも少し堅牢であるようです。明示的な勾配関数を提供する場合、ソリューションで値の数値チェックを行うという優れた機能があります。これらの値が数値差分から取得した値と一致しない場合nlminb、警告が表示されます。これにより、勾配の指定を間違えないようにすることができます(複雑な可能性を簡単に処理できます)。

  • nlmニュートンアルゴリズムのみを使用します。これは、収束に到達するために必要な反復回数が少ないという意味で、他のアルゴリズムよりも高速ですが、独自の欠点があります。尤度の形状により敏感であるため、2次関数が強くない場合は遅くなるか、誤った解に収束する可能性があります。また、ニュートンアルゴリズムはヘッセ行列を使用しますが、実際には理論上の高速化を打ち消す以上に遅くなる可能性があります。


17

特定の最大化方法を使用する場合と使用しない場合は、使用するデータのタイプに大きく依存します。nlm尤度面が特に「粗く」なく、どこでも微分可能であれば、うまく機能します。nlminbパラメータ値を特定の境界ボックスに制限する方法を提供します。optimおそらく最もよく使用されるオプティマイザーは、いくつかの異なる最適化ルーチンを提供します。たとえば、BFGS、L-BFGS-B、およびシミュレートされたアニーリング(SANNオプションを使用)。後者は、最適化が難しい問題がある場合に便利です。また、CRANには多数のオプティマイザーが用意されています。rgenoud、たとえば、最適化のための遺伝的アルゴリズムを提供します。DEoptim別の遺伝的最適化ルーチンを使用します。遺伝的アルゴリズムは収束に時間がかかる可能性がありますが、通常、尤度に不連続がある場合でも(時間内に)収束することが保証されています。私は知りませんDEoptimが、rgenoud使用するように設定されてsnowやや助け並列処理のために。

したがって、おそらくやや不十分な答えは、使用nlmしているデータに対して機能する場合は、他のオプティマイザーを使用する必要があるということです。あなたは行儀の可能性を持っている場合は、により提供されるルーチンのいずれoptimかがnlmあなたにも同じ結果が得られます。データセットのサイズなどに応じて、いくつかは他のものより高速かもしれませんが、重要かもしれません。これらのルーチンが処理できるパラメータの数に関しては、おそらくかなりの数ですが。もちろん、パラメータが多いほど、収束の問題が発生する可能性が高くなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.