본문 바로가기
Statistics

다중공선성(Multicollinearity)

by rubyda 2020. 11. 12.
728x90

다중공선성이란?


다중공선성이란 독립변수들간에 강한 상관관계가 존재하는 경우를 말합니다. 다중공선성이 존재하면 회귀분석의 전제조건을 위반하게 됩니다. (서로 독립인 변수들로 구성되어 있다.) 다중공선성이 존재하면 상관관계가 높지만 상관관계가 높다고 해서 반드시 다중공선성이 존재하는 것은 아닙니다.

 

다중공선성을 판단하는 기준은?


- 분산 팽창 인수(VIF, Variance Inflation Factor)

- 보통 10이상일때 심각한 다중공선성이 존재한다고 판단을 합니다.(5 이상이면 다중공선성 존재 가능성이 있음)

 

다중공선성을 해결하는 방법은??


1. (변수선택법) 다중공선성에 영향을 주는 변수들을 제거한다.

- 다중공선성에 영향을 주는 변수들 중에서 종속변수와 상관관계가 낮은 변수들을 제거한다.

- 제거를 했을때 결정계수가 유지되는 변수를 제거한다.

2. 주성분 분석 이용(변수 추출법)

- 서로 독립인 새로운 변수들을 생성한다.(주의, 범주형 데이터 사용 불가)

3. 다른 모형 선택

- (Ridge regression)

 

실습


data <- Boston
# 범주형 변수 제거
lm_vif <- lm(medv~., data = data[,-4])
vif(lm_vif)
> vif(lm_vif)
    crim       zn    indus      nox       rm      age      dis      rad      tax 
1.787705 2.298257 3.949246 4.388775 1.931865 3.092832 3.954961 7.397844 8.876233 
 ptratio    black    lstat 
1.783302 1.344971 2.931101

vif를 봤을때 rad, tax 변수가 다중공선성이 있다고 판단을 하였습니다.

> summary(lm_vif)

Call:
lm(formula = medv ~ ., data = data[, -4])

Residuals:
     Min       1Q   Median       3Q      Max 
-13.3968  -2.8103  -0.6455   1.9141  26.3755 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  36.891960   5.146516   7.168 2.79e-12 ***
crim         -0.113139   0.033113  -3.417 0.000686 ***
zn            0.047052   0.013847   3.398 0.000734 ***
indus         0.040311   0.061707   0.653 0.513889    
nox         -17.366999   3.851224  -4.509 8.13e-06 ***
rm            3.850492   0.421402   9.137  < 2e-16 ***
age           0.002784   0.013309   0.209 0.834407    
dis          -1.485374   0.201187  -7.383 6.64e-13 ***
rad           0.328311   0.066542   4.934 1.10e-06 ***
tax          -0.013756   0.003766  -3.653 0.000287 ***
ptratio      -0.990958   0.131399  -7.542 2.25e-13 ***
black         0.009741   0.002706   3.600 0.000351 ***
lstat        -0.534158   0.051072 -10.459  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.787 on 493 degrees of freedom
Multiple R-squared:  0.7355,	Adjusted R-squared:  0.7291 
F-statistic: 114.3 on 12 and 493 DF,  p-value: < 2.2e-16

모형은 유의하다는 결과가 나오고 모형의 설명력은 약 0.74%입니다.

# 상관관계 분석
library(PerformanceAnalytics)
chart.Correlation(data[,-4])

상관분석결과 rad 변수와 tax 변수는 상관계수가 0.91아주 강한 상관관계를 가지고 있습니다. 따라서 둘중 종속변수와 상관관계가 낮은 rad 변수를 제거하기로 결정하였습니다.

 

# rad 변수 제거
lm_result <- lm(medv~., data=data[,c(-4,-9)])
> vif(lm_result)
    crim       zn    indus      nox       rm      age      dis      tax  ptratio 
1.663648 2.272992 3.660714 4.294324 1.880883 3.077311 3.953729 3.403205 1.725085 
   black    lstat 
1.338875 2.928554 

다중공선성이 사라진것을 확인하였습니다.

 

> summary(lm_result)

Call:
lm(formula = medv ~ ., data = data[, c(-4, -9)])

Residuals:
     Min       1Q   Median       3Q      Max 
-13.3315  -2.8771  -0.6792   1.6858  27.4744 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.970e+01  5.051e+00   5.879 7.59e-09 ***
crim        -7.010e-02  3.269e-02  -2.144 0.032482 *  
zn           3.989e-02  1.409e-02   2.831 0.004835 ** 
indus       -4.198e-02  6.080e-02  -0.691 0.490195    
nox         -1.458e+01  3.899e+00  -3.740 0.000206 ***
rm           4.188e+00  4.255e-01   9.843  < 2e-16 ***
age         -1.868e-03  1.359e-02  -0.137 0.890696    
dis         -1.503e+00  2.059e-01  -7.301 1.15e-12 ***
tax          8.334e-04  2.386e-03   0.349 0.727038    
ptratio     -8.738e-01  1.323e-01  -6.607 1.02e-10 ***
black        8.843e-03  2.763e-03   3.200 0.001461 ** 
lstat       -5.267e-01  5.224e-02 -10.083  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.899 on 494 degrees of freedom
Multiple R-squared:  0.7225,	Adjusted R-squared:  0.7163 
F-statistic: 116.9 on 11 and 494 DF,  p-value: < 2.2e-16

하지만 모형설명력은 약간 떨어지는 결과가 나왔지만 크게 상관은 없다고 생각을 합니다.