R の処理方法 警告: glm.fit: アルゴリズムが収束しませんでした
R で発生する可能性のある一般的な警告は次のとおりです。
glm.fit: algorithm did not converge
この警告は、R でロジスティック回帰モデルを近似しようとしたときに完全分離が確認された場合、つまり、予測子変数が応答変数を 0 と 1 に完全に分離できる場合によく発生します。
次の例は、この警告を実際に処理する方法を示しています。
警告を再現する方法
次のロジスティック回帰モデルを R に当てはめようとしているとします。
#create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
y=c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))
#attempt to fit logistic regression model
glm(y~x, data=df, family=" binomial ")
Call: glm(formula = y ~ x, family = "binomial", data = df)
Coefficients:
(Intercept)x
-409.1 431.1
Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.19
Residual Deviance: 2.468e-09 AIC: 4
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
警告メッセージ「 glm.fit: アルゴリズムが収束しませんでした 」が表示されることに注意してください。
このメッセージが表示されるのは、予測変数 x が応答変数 y を 0 と 1 に完全に分離できるためです。
1 未満のすべての x 値について、y は 0 に等しいことに注意してください。また、1 以上のすべての x 値について、y は 1 に等しいことに注意してください。
次のコードは、予測変数が応答変数を 0 と 1 に完全に分離できないシナリオを示しています。
#create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
y=c(0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))
#fit logistic regression model
glm(y~x, data=df, family=" binomial ")
Call: glm(formula = y ~ x, family = "binomial", data = df)
Coefficients:
(Intercept) x
-2.112 2.886
Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.73
Residual Deviance: 16.31 AIC: 20.31
予測変数は応答変数を 0 と 1 に完全に分離できないため、警告メッセージは表示されません。
警告の対処方法
完全な分離シナリオに遭遇した場合、それに対処する方法は 2 つあります。
方法 1: ペナルティ付き回帰を使用します。
1 つのオプションは、ラッソ ロジスティック回帰やエラスティック ネット正則化などのペナルティ付きロジスティック回帰の形式を使用することです。
R でペナルティ付きロジスティック回帰を実装する方法のオプションについては、 glmnetパッケージを参照してください。
方法 2: 予測変数を使用して応答変数を完全に予測します。
この完全な分離が母集団に存在する可能性があると疑われる場合は、この予測変数を使用するだけで、応答変数の値を完全に予測できます。
たとえば、上記のシナリオでは、予測変数x が1 未満の場合、応答変数yは常に 0 に等しいことがわかりました。
この関係が母集団全体に当てはまると疑われる場合は、 xが 1 未満の場合にyの値が 0 になると常に予測でき、ペナルティ付きロジスティック回帰モデルを当てはめることを心配する必要はありません。
追加リソース
次のチュートリアルでは、R でのglm()関数の使用に関する追加情報を提供します。
Rのglmとlmの違い
Rのglmでpredict関数を使用する方法
扱い方: glm.fit: 数値的に調整された確率 0 または 1 が発生する