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로 완벽하게 분리할 수 없기 때문에 경고 메시지가 표시되지 않습니다.

경고를 처리하는 방법

완벽한 분리 시나리오가 발생하는 경우 이를 처리하는 두 가지 방법이 있습니다.

방법 1: 페널티 회귀를 사용합니다.

한 가지 옵션은 올가미 로지스틱 회귀 또는 탄력적 네트워크 정규화와 같은 페널티 로지스틱 회귀 형태를 사용하는 것입니다.

R에서 페널티 로지스틱 회귀를 구현하는 방법에 대한 옵션은 glmnet 패키지를 참조하세요.

방법 2: 예측 변수를 사용하여 반응 변수를 완벽하게 예측합니다.

이러한 완벽한 분리가 모집단에 존재할 수 있다고 의심되는 경우 간단히 이 예측 변수를 사용하여 반응 변수의 값을 완벽하게 예측할 수 있습니다.

예를 들어, 위 시나리오에서는 예측 변수 x가 1보다 작을 때 응답 변수 y 가 항상 0과 같음을 확인했습니다.

이 관계가 전체 모집단에 적용된다고 의심되면 x 가 1보다 작을 때 y 값이 0이 될 것이라고 항상 예측할 수 있으며 페널티 로지스틱 회귀 모델을 맞추는 것에 대해 걱정할 필요가 없습니다.

추가 리소스

다음 튜토리얼에서는 R에서 glm() 함수 사용에 대한 추가 정보를 제공합니다.

R에서 glm과 lm의 차이점
R에서 glm과 함께 예측 함수를 사용하는 방법
처리 방법: glm.fit: 수치적으로 조정된 확률 0 또는 1 발생

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다