Rのロジスティック回帰により、完全な分離が発生しました(Hauck-Donner現象)。それで?


56

50の連続した説明変数を使用してバイナリの結果を予測しようとしています(ほとんどの変数の範囲はから)。私のデータセットにはほぼ24,000行あります。Rで実行すると、次のようになります。glm

Warning messages:  
1: glm.fit: algorithm did not converge  
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

完全な分離が発生している可能性があることを示唆する他の応答を読みましたが、データにはそうではないと確信しています(準完全な分離が存在する可能性がありますが、そうであるかどうかを確認するにはどうすればよいですか?) 。一部の変数を削除すると、「収束しませんでした」エラーがなくなる可能性があります。しかし、それは常に起こることではありません。

bayesglm関数で同じ変数を使用しようとすると、同じエラーが発生しました。

ここで何が起こっているのかを正確に把握するには、どのようなステップを踏むでしょうか?どの変数が問題を引き起こしているのかをどのように把握しますか?


5
なぜ分離が起きていないと確信しているのですか?、それらは分離が「サンプルサイズが大きいと予測変数の数が少ない場合であっても、共通の問題」であると主張bayesglm
デビッドJ.ハリス

2
別の考え:bayesglm事前分布を追加することで分離を回避しようとしますが、24,000行では、おそらく事前分布は可能性に圧倒されています。prior.scaleおそらく大量に縮小してみてください。また、事前分布の自由度を増やすことを検討してください。これにより、分離に関連する大きな値を除外できます。
デビッドJ.ハリス

Davidの提案に感謝します。説明変数を並べ替えると、説明変数の高い値または低い値の従属変数が常に真または偽ではないため、分離が発生しているとは思わない。これが分離と見なされない限り、従属変数はすべてのx7> 32について真ですが、x7は10の場合に> 32のみです。ロジスティック回帰以外の分離を確認する方法はありますか?または、どの変数が分離を引き起こしているかを確認しますか?あなたのbayesglmの提案を試してみました(prior.scaleを1に、prior.dfをInfに設定しました)が、Hauck Donnerエラーがまだ発生しました。
Dcook


「どの変数が問題を引き起こしているのかをどのように把握しますか?」バイナリ検索は常に優れたフォールバックです。変数は50個しかないため、1つの変数で完全に分離されている場合、6回の反復で犯人が見つかります。2つの変数の場合、最大49 + 6 = 55回の反復で最悪の場合に検出されます。
SMCI

回答:


55

このような大きなデザインスペース(!)を使用すると、個別に取得された変数を分離することなく、完全に分離することができます。私はこれがありそうだと言って、デビッド・J・ハリスのコメントを二度目にします。R50

設計スペースでクラスが完全に分離されているかどうかを簡単にテストできます。要するに、線形計画問題を解くことになります。この「テスト」のR実装(用語の統計的な意味でのテストではない)はsafeBinaryRegression パッケージに実装されています

分離が実際に問題であることが判明し、glmの単純なバニラ使用にのみ関心がある場合(たとえば、glmはより高いレベルの関数によって呼び出されますが、あなたによって)、アルゴリズムのR実装があります。古典的なものをわずかに変更して、分離に対して「堅牢」にします。hlr パッケージに実装されています


4
非常にクールで便利な答え!これらのパッケージを調べる必要があります。(+1)
ピーター・フロム-モニカの復職

1
FWIWは別の堅牢なアルゴリズムの説明です:win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Alex

2
@Alex:リンクをありがとう。スタートが悪いためにglmが収束しない場合、この方法がどのように役立つかがわかります。一方、問題が完全な分離に起因する場合、MMのアイデアがそれをどのように解決するかは明確ではありません。これについてコメントできるかどうか疑問に思っていました(最終的に別の質問として投稿できます)。
user603

すばらしい(+1)!私も、これらのパッケージを調べる必要があります。
jbowman

1
答え@ user603をありがとう!safeBinaryRegressionを使用しましたが、実際にはいくつかの変数で分離が発生していました。次に、hlrパッケージのMELを使用して、この分離に対して堅牢なモデルを構築してみました。ただし、係数は(通常のglmで分離が発生する場合と同様に)巨大であり、dfと逸脱の数値は次のとおりです。19063残留ヌル偏差:24990残留偏差:626000 AIC:626000私が何か間違ったことをしたと思いますか?
Dcook
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.