여러 개의 독립변수를 다루는 다중 회귀 분석에서는 각각의 변수가 서로 독립적이라는 가정을 하고 있습니다. 하지만 세상일이라는게 서로 얽히고 얽혀 있어 사실 그렇게 되기는 어렵습니다. 예를 들어 혈압과 비만, 혈당은 서로 연관성이 있어 비만해질수록 혈압이나 혈당이 같이 오르는 것이 일반적입니다. 질병 예측 모델을 위해 이를 모두 포함한 변수를 만들면 독립 변수들이 사실은 독립적이지 않은 문제에 직면합니다. 소득과 교육 수준 역시 마찬가지입니다. 소득이 높은 사람이 교육 수준도 같이 높은 경우가 많은데, 이 둘을 넣은 모델을 만들면 두 변수 사이에 상호 작용이 없을 수가 없습니다.
상호작용을 가진 변수를 해결하는 방법은 하나를 제거해서 모델을 단순하게 만드는 것 외에도 상호작용의 항을 하나 더 넣는 방법이 있습니다. 물론 가능한 독립 변수의 수를 줄이는 것이 더 좋은 접근이긴 하지만, 하필이면 꼭 보고자 하는 변수들끼리 관계가 있거나 모델에서 배제하기 어려운 변수인 경우 상호작용(interaction)을 포함시킨 모델이 도움이 될 수 있습니다. 일단 앞서 모델을 다시 보겠습니다.
library(car)
library(MASS)
data("Boston", package = "MASS")
data<-boston span="">-boston>
model5=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + rad + tax, data = data)
summary(model5)
vif(model5)
상호작용을 포함한 모델을 만드는 방법은 변수:변수 혹은 변수*변수의 형태로 모델에 새로운 변수로 포함시키는 것입니다. : 와 *의 차이는 각각의 독립 변수를 포함하느냐 아니냐의 차이로 *는 독립 변수를 포함하고 여기에 상호작용이 있는 새로운 변수를 추가하는 반면 : 는 그냥 상호작용만 포함합니다. 실제 코드를 실행시키면 이해가 더 빠른데 여기서는 rad와 tax 사이의 상호 작용을 알아보겠습니다.
> model5=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + rad*tax, data = data)
> summary(model5)
Call:
lm(formula = medv ~ lstat + rm + ptratio + dis + nox + chas +
black + zn + crim + rad * tax, data = data)
Residuals:
Min 1Q Median 3Q Max
-15.5078 -2.7103 -0.5414 1.6898 26.2652
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.558e+01 5.261e+00 6.764 3.82e-11 ***
lstat -5.223e-01 4.746e-02 -11.006 < 2e-16 ***
rm 3.792e+00 4.070e-01 9.316 < 2e-16 ***
ptratio -9.351e-01 1.309e-01 -7.146 3.24e-12 ***
dis -1.505e+00 1.872e-01 -8.039 6.77e-15 ***
nox -1.739e+01 3.538e+00 -4.915 1.21e-06 ***
chas 2.702e+00 8.554e-01 3.158 0.001684 **
black 9.237e-03 2.678e-03 3.450 0.000609 ***
zn 4.734e-02 1.381e-02 3.427 0.000660 ***
crim -1.069e-01 3.291e-02 -3.249 0.001236 **
rad 4.459e-01 2.781e-01 1.603 0.109553
tax -1.064e-02 3.978e-03 -2.675 0.007727 **
rad:tax -2.306e-04 4.269e-04 -0.540 0.589313
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.74 on 493 degrees of freedom
Multiple R-squared: 0.7407, Adjusted R-squared: 0.7344
F-statistic: 117.4 on 12 and 493 DF, p-value: < 2.2e-16
> model5=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + rad:tax, data = data)
> summary(model5)
Call:
lm(formula = medv ~ lstat + rm + ptratio + dis + nox + chas +
black + zn + crim + rad:tax, data = data)
Residuals:
Min 1Q Median 3Q Max
-16.3045 -2.9431 -0.4585 1.6839 26.4357
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.442e+01 5.158e+00 6.673 6.74e-11 ***
lstat -5.282e-01 4.805e-02 -10.994 < 2e-16 ***
rm 4.019e+00 4.078e-01 9.855 < 2e-16 ***
ptratio -1.003e+00 1.310e-01 -7.659 9.90e-14 ***
dis -1.417e+00 1.874e-01 -7.562 1.95e-13 ***
nox -1.993e+01 3.501e+00 -5.693 2.15e-08 ***
chas 3.004e+00 8.627e-01 3.483 0.000541 ***
black 9.573e-03 2.711e-03 3.531 0.000452 ***
zn 3.574e-02 1.353e-02 2.642 0.008507 **
crim -9.968e-02 3.326e-02 -2.998 0.002859 **
rad:tax 1.577e-04 5.721e-05 2.756 0.006070 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.801 on 495 degrees of freedom
Multiple R-squared: 0.7329, Adjusted R-squared: 0.7275
F-statistic: 135.8 on 10 and 495 DF, p-value: < 2.2e-16
역시 간략하게 쓰기 위해서는 rad*tax라고 표현하는 것이 더 좋을 것 같습니다. 그런데 다중공선성 테스트는 변수간에 상호 작용의 유무만 알려줄 뿐 구체적으로 어떤 변수와 연관성이 깊은지 설명해주지는 않습니다. 그리고 상호 작용을 포함한 모델이 꼭 필요한지 역시 말해줄 수 없습니다. 확인하는 방법은 anova를 통해서 상호 작용이 모델에 의미 있는 변화를 가져오는지 보는 것입니다.
model5=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + rad + tax, data = data)
model6=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + rad*tax, data = data)
anova(model5,model6)
> model5=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + rad + tax, data = data)
> model6=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + rad*tax, data = data)
> anova(model5,model6)
Analysis of Variance Table
Model 1: medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn +
crim + rad + tax
Model 2: medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn +
crim + rad * tax
Res.Df RSS Df Sum of Sq F Pr(>F)
1 494 11081
2 493 11075 1 6.555 0.2918 0.5893
두 모델에 유의한 차이가 없는 것으로 확인되었습니다. VIF 수치가 높다고 해서 두 변수가 꼭 서로 상호 작용이 있는 건 아닐 수 있다는 것이죠. VIF는 모든 변수간 연관성을 설명해줍니다. 아무튼 rad*tax는 굳이 넣을 필요가 없다는 점이 분명해 보입니다.
어떤 변수가 연관이 깊을 것인지는 모델을 보고 판단해야 합니다. 예를 들어 고속도로의 접근성과 대기 오염은 상당한 연관성이 있을 것으로 생각할 수 있습니다. nox*dis 모델을 포함시켜 보겠습니다.
model5=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + rad + tax, data = data)
model6=lm(medv ~ lstat + rm + ptratio + dis + nox*rad + chas + black + zn + crim + tax, data = data)
anova(model5,model6)
> model5=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + rad + tax, data = data)
> model6=lm(medv ~ lstat + rm + ptratio + dis + nox*rad + chas + black + zn + crim + tax, data = data)
> anova(model5,model6)
Analysis of Variance Table
Model 1: medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn +
crim + rad + tax
Model 2: medv ~ lstat + rm + ptratio + dis + nox * rad + chas + black +
zn + crim + tax
Res.Df RSS Df Sum of Sq F Pr(>F)
1 494 11081
2 493 10960 1 121.46 5.4634 0.01982 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
이번에는 P값이 0.01982으로 0.05 이하로 나와 통계적 유의성이 있는 것으로 나타났습니다. 이 문제의 해결책은 rad를 제거하거나 상호 작용이 있는 항을 포함시키는 것입니다.
> summary(model5)
Call:
lm(formula = medv ~ lstat + rm + ptratio + dis + nox + chas +
black + zn + crim + rad + tax, data = data)
Residuals:
Min 1Q Median 3Q Max
-15.5984 -2.7386 -0.5046 1.7273 26.2373
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 36.341145 5.067492 7.171 2.73e-12 ***
lstat -0.522553 0.047424 -11.019 < 2e-16 ***
rm 3.801579 0.406316 9.356 < 2e-16 ***
ptratio -0.946525 0.129066 -7.334 9.24e-13 ***
dis -1.492711 0.185731 -8.037 6.84e-15 ***
nox -17.376023 3.535243 -4.915 1.21e-06 ***
chas 2.718716 0.854240 3.183 0.001551 **
black 0.009291 0.002674 3.475 0.000557 ***
zn 0.045845 0.013523 3.390 0.000754 ***
crim -0.108413 0.032779 -3.307 0.001010 **
rad 0.299608 0.063402 4.726 3.00e-06 ***
tax -0.011778 0.003372 -3.493 0.000521 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.736 on 494 degrees of freedom
Multiple R-squared: 0.7406, Adjusted R-squared: 0.7348
F-statistic: 128.2 on 11 and 494 DF, p-value: < 2.2e-16
> summary(model6)
Call:
lm(formula = medv ~ lstat + rm + ptratio + dis + nox * rad +
chas + black + zn + crim + tax, data = data)
Residuals:
Min 1Q Median 3Q Max
-15.1895 -2.5704 -0.5176 1.6182 25.9958
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 30.036123 5.720655 5.250 2.26e-07 ***
lstat -0.518396 0.047245 -10.972 < 2e-16 ***
rm 3.880343 0.405894 9.560 < 2e-16 ***
ptratio -0.890858 0.130675 -6.817 2.72e-11 ***
dis -1.422319 0.187334 -7.592 1.59e-13 ***
nox -9.710918 4.810427 -2.019 0.044057 *
rad 0.837937 0.238805 3.509 0.000491 ***
chas 2.810217 0.851307 3.301 0.001033 **
black 0.009639 0.002666 3.615 0.000331 ***
zn 0.052094 0.013725 3.796 0.000166 ***
crim -0.102818 0.032720 -3.142 0.001777 **
tax -0.012311 0.003365 -3.659 0.000281 ***
nox:rad -0.834408 0.356984 -2.337 0.019819 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.715 on 493 degrees of freedom
Multiple R-squared: 0.7434, Adjusted R-squared: 0.7372
F-statistic: 119 on 12 and 493 DF, p-value: < 2.2e-16
> model5=lm(medv ~ lstat + rm + ptratio + dis + nox + chas + black + zn + crim + tax, data = data)
> summary(model5)
Call:
lm(formula = medv ~ lstat + rm + ptratio + dis + nox + chas +
black + zn + crim + tax, data = data)
Residuals:
Min 1Q Median 3Q Max
-15.8588 -2.8451 -0.5955 1.4641 27.6777
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.974e+01 4.975e+00 5.978 4.33e-09 ***
lstat -5.254e-01 4.843e-02 -10.849 < 2e-16 ***
rm 4.147e+00 4.082e-01 10.160 < 2e-16 ***
ptratio -8.519e-01 1.302e-01 -6.542 1.52e-10 ***
dis -1.429e+00 1.892e-01 -7.552 2.08e-13 ***
nox -1.646e+01 3.605e+00 -4.567 6.26e-06 ***
chas 3.037e+00 8.697e-01 3.492 0.000522 ***
black 8.392e-03 2.724e-03 3.081 0.002180 **
zn 4.131e-02 1.378e-02 2.999 0.002846 **
crim -6.356e-02 3.204e-02 -1.984 0.047853 *
tax 5.175e-04 2.191e-03 0.236 0.813396
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.837 on 495 degrees of freedom
Multiple R-squared: 0.7289, Adjusted R-squared: 0.7234
F-statistic: 133.1 on 10 and 495 DF, p-value: < 2.2e-16
각각의 경우 모두 회귀 계수가 달리 나오는데 사실 단순한 모델이 가장 좋다는 점을 생각하면 반드시 필요하지 않으면서 다른 변수와 상호 작용을 일으키는 변수를 제거하는 것이 가장 좋은 해결책일 것입니다. 연구자가 반드시 알고자 하는 변수는 남기면서 나머지를 빼고 더하는 것이 최적의 모델을 찾아가는 방법입니다. 물론 그 과정은 복잡할때가 많으며 결국 아예 통계 분석 방법 자체를 바꿔야 하는 경우도 생길 수 있습니다.
댓글
댓글 쓰기