[R] 다중 선형 회귀 분석 (후진 제거법 / 변수 선택)

r-multiple-linear-regression-stepwise

해당 포스트에서는 ADP 공식 수험서 데이터 분석 과목에서 소개된 후진 제거법을 통한 변수 선택 및 다중 선형 회귀 분석 방법을 설명합니다.

문제

다음과 같은 데이터가 있다. Y를 반응 변수로 하고, X1, X2, X3, X4를 설명 변수로 하는 선형회귀모형을 고려하고, 후진 제거법을 이용하여 변수를 선택하시오.

1. 데이터 생성

x1 <- c(7,1,11,11,7,11,3,1,2,21,1,11,10)
x2 <- c(26,29,56,31,52,55,71,31,54,47,40,66,68)
x3 <- c(6,15,8,8,6,9,17,22,18,4,23,9,8)
x4 <- c(60,52,20,47,33,22,6,44,22,26,34,12,12)
y <- c(78.5,74.3,104.3,87.6,95.9,109.2,102.7,72.5,93.1,115.9,83.8,113.3,109.4)

df <- data.frame(x1,x2,x3,x4,y)
head(df)
#   x1 x2 x3 x4     y
# 1  7 26  6 60  78.5
# 2  1 29 15 52  74.3
# 3 11 56  8 20 104.3
# 4 11 31  8 47  87.6
# 5  7 52  6 33  95.9
# 6 11 55  9 22 109.2

2. 다중 선형 회귀 분석

회귀 분석 1차

lm_model <- lm(y~x1+x2+x3+x4, data=df)
lm_model
# Call:
# lm(formula = y ~ x1 + x2 + x3 + x4, data = df)
# 
# Coefficients:
# (Intercept)           x1           x2           x3           x4  
#     62.4054       1.5511       0.5102       0.1019      -0.1441 

회귀모형 확인

summary(lm_model)
# Call:
# lm(formula = y ~ x1 + x2 + x3 + x4, data = df)
# 
# Residuals:
#   Min      1Q  Median      3Q     Max 
# -3.1750 -1.6709  0.2508  1.3783  3.9254 
# 
# Coefficients:
#   Estimate Std. Error t value Pr(>|t|)  
# (Intercept)  62.4054    70.0710   0.891   0.3991  
# x1            1.5511     0.7448   2.083   0.0708 .
# x2            0.5102     0.7238   0.705   0.5009  
# x3            0.1019     0.7547   0.135   0.8959  
# x4           -0.1441     0.7091  -0.203   0.8441  
# ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 2.446 on 8 degrees of freedom
# Multiple R-squared:  0.9824,    Adjusted R-squared:  0.9736 
# F-statistic: 111.5 on 4 and 8 DF,  p-value: 4.756e-07

결과해석

  1. 회귀식은 Y = 62.4054 + 1.5511X1 + 0.5102X2 + 0.1019X3 - 0.1441X4로 추정된다.
  2. F-통계량 값은 111.5이며, p-value 값이 4.756e-07로 유의수준 5% 하에서 추정된 회귀 모형이 통계적으로 매우 유의함을 볼 수 있다.
    • 4.756e-07 = 4.756*0.0000001 = 0.0000004756
  3. 수정된 결정계수는 0.9736으로 매우 높은 값을 보이며, 이는 추정된 회귀식이 데이터를 약 97.36%로 적절하게 설명한다고 볼 수 있다.
  4. 설명변수 X1, X2, X3, X4의 p-value를 보면 X3의 유의 확률이 가장 높아 이들 중 가장 유의하지 않다. → 설명변수 X3을 제거하고 다시 회귀분석을 한다. (후진제거법)

회귀 분석 2차

lm_model2 <- lm(y~x1+x2+x4,data=df) 
summary(lm_model2)
# Call:
#   lm(formula = y ~ x1 + x2 + x4, data = df)
# 
# Residuals:
#   Min      1Q  Median      3Q     Max 
# -3.0919 -1.8016  0.2562  1.2818  3.8982 
# 
# Coefficients:
#   Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  71.6483    14.1424   5.066 0.000675 ***
#   x1            1.4519     0.1170  12.410 5.78e-07 ***
#   x2            0.4161     0.1856   2.242 0.051687 .  
# x4           -0.2365     0.1733  -1.365 0.205395    
# ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 2.309 on 9 degrees of freedom
# Multiple R-squared:  0.9823,    Adjusted R-squared:  0.9764 
# F-statistic: 166.8 on 3 and 9 DF,  p-value: 3.323e-08

결과해석

  1. 회귀식은 Y = 71.6483 + 1.4519X1 + 0.4161X2 - 0.2365X4로 추정된다.
  2. F-통계량 값은 166.8이며, p-value 값이 3.323e-08로 유의수준 5% 하에서 추정된 회귀 모형이 통계적으로 매우 유의함을 볼 수 있다.
  3. 수정된 결정계수가 0.9764X3변수를 제거하기 전보다 높아졌음을 알 수 있다.
  4. 설명변수 X1, X2, X4 들 중 p-value 값이 가장 높은 X4를 제거하고 다시 회귀분석을 한다. (후진제거법)

회귀 분석 3차

lm_model3 <- lm(y~x1+x2,data=df) 
summary(lm_model3)
# Call:
# lm(formula = y ~ x1 + x2, data = df)
# 
# Residuals:
#   Min     1Q Median     3Q    Max 
# -2.893 -1.574 -1.302  1.363  4.048 
# 
# Coefficients:
#   Estimate Std. Error t value Pr(>|t|)    
# (Intercept) 52.57735    2.28617   23.00 5.46e-10 ***
#   x1           1.46831    0.12130   12.11 2.69e-07 ***
#   x2           0.66225    0.04585   14.44 5.03e-08 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 2.406 on 10 degrees of freedom
# Multiple R-squared:  0.9787,    Adjusted R-squared:  0.9744 
# F-statistic: 229.5 on 2 and 10 DF,  p-value: 4.407e-09

결과해석

  1. 회귀식은 Y = 52.57735 + 1.46831X1 + 0.66225X2로 추정된다.
  2. F-통계량 값은 229.5이며, p-value 값이 4.407e-09로 유의수준 5% 하에서 추정된 회귀 모형이 통계적으로 매우 유의함을 볼 수 있다.
  3. 수정된 결정계수가 0.9744X4변수를 제거하기 전보다 향상되지 않았으므로 여기에서 변수 제거를 멈춘다.

최종 결론

최종 회귀식은 Y = 52.57735 + 1.46831X1 + 0.66225X2로 추정된다.

위 후진제거법은 수동으로 변수 제거를 진행한 것으로, 변수의 수가 많을 때에는 많은 번거로움이 있다. 이후에는 단계별 변수 선택의 방법을 자동으로 수행해주는 명령어를 사용하여 분석해 본다.

3. step 함수를 이용한 단계별 변수 선택

step 함수 사용법

step(lm(종속변수설명변수, 데이터세트), scope=list(lower=1, upper=~설명변수), direction="변수선택방법")

step 함수는 AIC를 기반으로 모델을 선택해주는 Stepwise Algorithms으로 사용법은 아래와 같다.

  1. lm()은 사용하고자 하는 분석 방법(회귀 분석)을 의미한다.
  2. scope=는 분석할 때 고려할 변수의 범위를 정한다. 가장 낮은 단계는 lower에서 1을 입력하면 상수항을 의미하고, 가장 높은 단계를 설정하기 위해서는 설명 변수들을 모두 써주면 된다.
  3. direction=은 변수 선택 방법이다. 선택 가능한 옵션은 forward, backward, both가 있다.

예제1 : 전진 선택법

step(lm(y~1,df), scope=list(lower=~1,upper=~x1+x2+x3+x4), direction="forward")
# Start:  AIC=71.44
# y ~ 1
# 
# Df Sum of Sq     RSS    AIC
# + x4    1   1831.90  883.87 58.852
# + x2    1   1809.43  906.34 59.178
# + x1    1   1450.08 1265.69 63.519
# + x3    1    776.36 1939.40 69.067
#               2715.76 71.444
# 
# Step:  AIC=58.85
# y ~ x4
# 
# Df Sum of Sq    RSS    AIC
# + x1    1    809.10  74.76 28.742
# + x3    1    708.13 175.74 39.853
#               883.87 58.852
# + x2    1     14.99 868.88 60.629
# 
# Step:  AIC=28.74
# y ~ x4 + x1
# 
# Df Sum of Sq    RSS    AIC
# + x2    1    26.789 47.973 24.974
# + x3    1    23.926 50.836 25.728
#               74.762 28.742
# 
# Step:  AIC=24.97
# y ~ x4 + x1 + x2
# 
# Df Sum of Sq    RSS    AIC
#               47.973 24.974
# + x3    1   0.10909 47.864 26.944
# 
# Call:
#   lm(formula = y ~ x4 + x1 + x2, data = df)
# 
# Coefficients:
# (Intercept)           x4           x1           x2  
#    71.6483      -0.2365       1.4519       0.4161 

결과해석

  1. 최종회귀식은 Y = 71.6483 - 0.2365X4 + 1.4519X1 + 0.4161X2로 추정된다.
  2. 앞의 후진선택법의 결과와 다른 모형이 선택되었다. 보통 변수선택의 기준에 따라 선택된 모형은 차이를 보일 수 있다.

예제2 : 단계적 변수선택법

step(lm(y~1,df), scope=list(lower=~1,upper=~x1+x2+x3+x4), direction="both")
# Start:  AIC=71.44
# y ~ 1
# 
# Df Sum of Sq     RSS    AIC
# + x4    1   1831.90  883.87 58.852
# + x2    1   1809.43  906.34 59.178
# + x1    1   1450.08 1265.69 63.519
# + x3    1    776.36 1939.40 69.067
#               2715.76 71.444
# 
# Step:  AIC=58.85
# y ~ x4
# 
# Df Sum of Sq     RSS    AIC
# + x1    1    809.10   74.76 28.742
# + x3    1    708.13  175.74 39.853
#                883.87 58.852
# + x2    1     14.99  868.88 60.629
# - x4    1   1831.90 2715.76 71.444
# 
# Step:  AIC=28.74
# y ~ x4 + x1
# 
# Df Sum of Sq     RSS    AIC
# + x2    1     26.79   47.97 24.974
# + x3    1     23.93   50.84 25.728
#                 74.76 28.742
# - x1    1    809.10  883.87 58.852
# - x4    1   1190.92 1265.69 63.519
# 
# Step:  AIC=24.97
# y ~ x4 + x1 + x2
# 
# Df Sum of Sq    RSS    AIC
#                47.97 24.974
# - x4    1      9.93  57.90 25.420
# + x3    1      0.11  47.86 26.944
# - x2    1     26.79  74.76 28.742
# - x1    1    820.91 868.88 60.629
# 
# Call:
#   lm(formula = y ~ x4 + x1 + x2, data = df)
# 
# Coefficients:
#   (Intercept)           x4           x1           x2  
# 71.6483      -0.2365       1.4519       0.4161  

결과해석

  1. 최종회귀식은 앞의 전진선택법과 같이 Y = 71.6483 - 0.2365X4 + 1.4519X1 + 0.4161X2로 추정된다.

4. 관련링크

[1] ADP 공식 수험서 > 과목4 데이터 분석 > 제2장 통계분석 p388~p395
[2] [RDocumentation] step: Choose a model by AIC in a Stepwise Algorithm