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 1 과 x 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