落とし穴¶
このページでは、statsmodelsを使用中に発生する可能性のある問題をリストしています。これらは、データ関連の問題や統計的問題、ソフトウェア設計、「非標準的な」モデルの使用、またはエッジケースが原因である可能性があります。
statsmodelsは、診断チェックのためのいくつかの警告とヘルパー関数を提供しています(線形回帰における誤指定チェックの例については、このブログ記事を参照してください)。もちろん、網羅的ではありませんが、より多くの警告と診断関数が時間とともに追加されます。
基礎となる統計的問題はすべての統計パッケージで同じですが、ソフトウェアの実装は極端なケースやコーナーケースの処理方法が異なります。モデルが機能しない可能性のあるコーナーケースを報告していただき、適切に処理できるようにしてください。
異なるパラメータを使用したfitへの繰り返し呼び出し¶
Resultインスタンスは、多くの場合、対応するmodelインスタンスの属性にアクセスする必要があります。異なる引数を使用してモデルを複数回適合させると、モデルの属性が変更される可能性があります。つまり、モデルが再適合された後、Resultインスタンスは正しいモデル属性を指さなくなっている可能性があります。
したがって、異なるfit関数引数を使用してモデルを適合させたい場合は、個別のmodelインスタンスを作成するのが最良の方法です。
たとえば、これは、結果インスタンスをさらに使用しないため、問題なく機能します。
mod = AR(endog)
aic = []
for lag in range(1,11):
res = mod.fit(maxlag=lag)
aic.append(res.aic)
ただし、2つの異なる推定結果を保持したい場合は、2つの個別のmodelインスタンスを作成することをお勧めします。
mod1 = RLM(endog, exog)
res1 = mod1.fit(scale_est='mad')
mod2 = RLM(endog, exog)
res2 = mod2.fit(scale_est=sm.robust.scale.HuberScale())
未特定のパラメータ¶
ランク落ちexog、完全な多重共線性¶
線形モデル、GLS、RLM、GLMなどに基づくモデルは、一般化逆行列を使用します。これは、
ランク落ち行列はエラーを発生させない
ほぼ完全な多重共線性または条件が悪い計画行列の場合、数値的に不安定な結果が生成される可能性があります。これが望ましい動作ではない場合は、ユーザーが手動で行列のランクまたは条件数をチェックする必要があります。
注:statsmodelsは現在、データが再スケールされていない場合、FilipのNISTベンチマークケースで失敗します。このブログを参照してください。
最尤推定における不完全な収束¶
場合によっては、最尤推定量が存在しない場合があり、パラメータが無限大になるか、一意ではない可能性があります(たとえば、二値内生変数を持つモデルにおける(準)分離)。デフォルト設定では、最適化アルゴリズムが収束に達せずに停止した場合、statsmodelsは警告を出力します。ただし、収束基準が誤って収束を示している場合があることを理解しておくことが重要です(たとえば、目的関数の値が収束したが、パラメータは収束していない場合)。一般的に、ユーザーは収束を確認する必要があります。
二値LogitとProbitモデルの場合、完全予測が検出されるとstatsmodelsは例外を発生させます。ただし、準完全予測のチェックはありません。
その他の問題¶
データのばらつきが不十分¶
小規模なデータセットの場合、またはカテゴリ変数に小規模なグループがあるデータの場合、データのばらつきが不十分な可能性があります。これらの場合、結果は識別されない可能性があり、またはいくつかの隠れた問題が発生する可能性があります。
現在知られている唯一のケースは、堅牢な線形モデル推定における完全適合です。RLMの場合、残差がゼロに等しい場合、例外は発生しませんが、この完全適合により、一部の結果にNaNが発生する可能性があります(scale=0と0/0除算)(issue #55)。
真のパラメータがモデルの定義域外¶
場合によっては、モデルのパラメータに関するドメインの制限がデータと矛盾する可能性があります。そのような場合、推定はパラメータ空間の境界に近いパラメータ値で停止する可能性がありますが、ランタイムエラーで失敗するか、最適化中にNaNを生成する可能性もあります。
2つの例
データがポアソンに比べて過分散ではない場合(つまり、真のモデルはポアソンと同じ分散を持つ、または過分散ではない)に負の二項モデルを推定することは、負の二項分布の過分散の仮定と矛盾します。statsmodelsに実装されている対数尤度とその導関数は、分散パラメータがゼロ分散またはゼロ分散の正の近傍にある場合、評価できません。
ゼロインフレーションモデルは現在、インフレーションのモデルとしてLogitまたはProbitのいずれかを使用しています。これは、インフレーションがないことがパラメータ空間の境界にあり、デフレーションがないことが有効なパラメータ空間外にあることを意味します。データにゼロインフレーションがない場合、またはゼロデフレーションされている場合、ゼロインフレーションモデルは最適化で頻繁に失敗するか、インフレーションがない境界付近で終了します。