web-dev-qa-db-ja.com

glmで「アルゴリズムが収束しませんでした」および「数値に0または1の確率で当てはめられました」という警告が表示されるのはなぜですか?

したがって、これは非常に単純な質問であり、理解できないようです。

Glm関数を使用してロジットを実行していますが、独立変数に関連する警告メッセージが引き続き表示されます。それらは因子として保存され、数値に変更しましたが、運がありませんでした。また、それらを0/1にコーディングしましたが、それも機能しませんでした。

助けてください!

> mod2 <- glm(winorlose1 ~ bid1, family="binomial")
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

私もZeligで試しましたが、同様のエラー:

> mod2 = zelig(factor(winorlose1) ~ bid1, data=dat, model="logit")
How to cite this model in Zelig:
Kosuke Imai, Gary King, and Oliva Lau. 2008. "logit: Logistic Regression for Dichotomous Dependent Variables" in Kosuke Imai, Gary King, and Olivia Lau, "Zelig: Everyone's Statistical Software," http://gking.harvard.edu/zelig
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

編集:

> str(dat)
'data.frame':   3493 obs. of  3 variables:
 $ winorlose1: int  2 2 2 2 2 2 2 2 2 2 ...
 $ bid1      : int  700 300 700 300 500 300 300 700 300 300 ...
 $ home      : int  1 0 1 0 0 0 0 1 0 0 ...
 - attr(*, "na.action")=Class 'omit'  Named int [1:63021] 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 ...
  .. ..- attr(*, "names")= chr [1:63021] "3494" "3495" "3496" "3497" ...
33
ATMathew

?glm(または、2番目の警告メッセージをGoogleで検索することもできます)、このドキュメントに出くわすことがあります。

二項GLMの「数値的に0または1に適合した確率」に関する警告メッセージの背景については、Venables&Ripley(2002、pp。197-8)を参照してください。

今、誰もがその本を持っているわけではありません。しかし、私がこれを行うことはコーシャーだと仮定すると、関連する一節があります:

収束の問題とHauck-Donner現象の両方が発生するかなり一般的な状況が1つあります。これは、近似確率がゼロまたは1に非常に近い場合です。数千のケースと約50のバイナリ説明変数(より少ないカテゴリ変数のコーディングから発生する可能性があります)を含む医療診断問題を考えます。これらの指標の1つはめったに真実ではありませんが、常に病気が存在することを示します。その場合、その指標を持つケースの近似確率は1でなければなりません。これは、β =∞。 glmの結果は警告であり、推定係数は約+/- 10になります。統計文献では、これについてかなり広範な議論が行われており、通常は最尤推定値が存在しないと主張しています。 Sautner and Duffy(1989、p。234)を参照してください。

この本の著者の一人は、もう少し詳細にコメントしました here 。したがって、ここでの教訓は、予測変数のレベルの1つを注意深く見ることです。 (そしてGoogleに警告メッセージ!)

36
joran

GLMフォーミュラと対応する入力(デザインマトリックス、リンク関数など)を正しく指定した場合。反復再重み付け最小二乗(IRLS)アルゴリズムで使用される反復が十分でないため、glmアルゴリズムが収束しない場合があります。 Rでmaxit = 25(デフォルト)をmaxit = 100に変更します。

0
user10813428

これはおそらく、完全に分離されているためです。つまり、1つのグループが完全に0または1で構成されているためです。

これに対処するには、いくつかのオプションがあります。

(a)Rのパッケージ logistf または brglm で実装されているFirthのペナルティ付き尤度法を使用します。これは、Firth(1993)で提案された方法を使用します。尤度推定」、Biometrika80、1 .;これにより、最尤推定値から1次バイアスが削除されます。

(b)厳密な条件付きロジスティック回帰で中央値不偏推定値を使用する。 Rのパッケージ elrm または logistiX でこれを行うことができます。

(c)LASSOまたはElastic Net正規化ロジスティック回帰を使用します。 Rで glmnet パッケージを使用する.

(d)Go Bayesian、cf。論文 Gelman et al(2008)、 "ロジスティックおよびその他の回帰モデルの情報量の少ないデフォルト事前分布"、Ann。Appl。Stat。2、4 およびarmパッケージの bayesglm .

(e)Rousseeuw&Christmann(2003)、「ロジスティック回帰における分離と外れ値に対する堅牢性」、計算統計とデータ分析43、3、およびRパッケージで実装 hlr .

dat$bid1 = as.factor(dat$bid1)を使用しますが、最初にファクターをファクターとして再コーディングする必要があります

この問題の解決策についても説明します。

https://stats.stackexchange.com/questions/11109/how-to-deal-with-perfect-separation-in-logistic-regression

https://stats.stackexchange.com/questions/45803/logistic-regression-in-r-resulted-in-perfect-separation-hauck-donner-phenomenon

https://stats.stackexchange.com/questions/239928/is-there-any-intuitive-explanation-of-why-logistic-regression-will-not-work-for

https://stats.stackexchange.com/questions/5354/logistic-regression-model-does-not-converge?rq=1

0
Tom Wenseleers