R에서 수정하는 방법: 특이점으로 인해 정의되지 않음


R에서 발생할 수 있는 오류 메시지는 다음과 같습니다.

 Coefficients: (1 not defined because of singularities) 

이 오류 메시지는 R에서 glm() 함수를 사용하여 모델을 피팅하고 두 개 이상의 예측 변수가 서로 정확한 선형 관계( 완전 다중 공선성 이라고 함)를 가질 때 발생합니다.

이 오류를 해결하려면 cor() 함수를 사용하여 데이터세트에서 서로 완벽한 상관관계가 있는 변수를 식별하고 회귀 모델에서 이러한 변수 중 하나를 제거하면 됩니다.

이 튜토리얼에서는 실제로 이 오류 메시지를 처리하는 방법을 설명합니다.

오류를 재현하는 방법

R의 다음 데이터 프레임에 로지스틱 회귀 모델을 적용한다고 가정합니다.

 #define data
df <- data. frame (y = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1),
                 x1 = c(3, 3, 4, 4, 3, 2, 5, 8, 9, 9, 9, 8, 9, 9, 9),
                 x2 = c(6, 6, 8, 8, 6, 4, 10, 16, 18, 18, 18, 16, 18, 18, 18),
                 x3 = c(4, 7, 7, 3, 8, 9, 9, 8, 7, 8, 9, 4, 9, 10, 13))

#fit logistic regression model
model <- glm(y~x1+x2+x3, data=df, family=binomial)

#view model summary
summary(model)

Call:
glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)

Deviance Residuals: 
       Min 1Q Median 3Q Max  
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05  

Coefficients: (1 not defined because of singularities)
              Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x2 NA NA NA NA
x3 -2.258 20119.863 0.000 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6

Number of Fisher Scoring iterations: 24

계수 출력 직전에 다음 메시지가 표시됩니다.

 Coefficients: (1 not defined because of singularities)

이는 모델에 있는 두 개 이상의 예측 변수가 완벽한 선형 관계를 갖고 있으므로 모델의 모든 회귀 계수를 추정할 수는 없음을 나타냅니다.

예를 들어, 예측 변수 x 2 에 대해서는 계수 추정을 할 수 없습니다.

오류를 처리하는 방법

이 오류를 일으키는 예측 변수를 식별하려면 cor() 함수를 사용하여 상관 행렬을 생성하고 서로 정확히 1 의 상관 관계를 갖는 변수를 검사할 수 있습니다.

 #create correlation matrix
cor(df)

           y x1 x2 x3
y 1.0000000 0.9675325 0.9675325 0.3610320
x1 0.9675325 1.0000000 1.0000000 0.3872889
x2 0.9675325 1.0000000 1.0000000 0.3872889
x3 0.3610320 0.3872889 0.3872889 1.0000000

상관 행렬을 통해 변수 x 1x 2 가 완벽하게 상관되어 있음을 알 수 있습니다.

이 오류를 해결하려면 회귀 모델에서 실제로 고유하거나 독립적인 정보를 제공하지 않는 두 변수 중 하나를 모델에서 제거하면 됩니다.

예를 들어 x 2를 제거하고 다음 로지스틱 회귀 모델을 적합하다고 가정합니다.

 #fit logistic regression model
model <- glm(y~x1+x3, data=df, family=binomial)

#view model summary
summary(model)

Call:
glm(formula = y ~ x1 + x3, family = binomial, data = df)

Deviance Residuals: 
       Min 1Q Median 3Q Max  
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05  

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x3 -2.258 20119.863 0.000 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6

Number of Fisher Scoring iterations: 24

이번에는 “특이점으로 인해 정의되지 않음” 오류 메시지가 수신되지 않습니다.

참고 : x 1 또는 x 2 를 제거하는지 여부는 중요하지 않습니다. 최종 모델에는 유지하기로 결정한 변수에 대한 동일한 계수 추정치가 포함되며 모델의 전반적인 적합도는 동일합니다.

추가 리소스

다음 튜토리얼에서는 R에서 다른 오류를 처리하는 방법을 설명합니다.

R 수정 방법: ExtractVars의 잘못된 템플릿 수식
R에서 수정하는 방법: 인수가 숫자도 아니고 논리도 아닙니다. return na
해결 방법: randomForest.default(m, y, …): 외부 함수 호출의 Na/NaN/Inf

의견을 추가하다

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