해당 포스트에서는 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
결과해석
- 회귀식은
Y
= 62.4054 + 1.5511X1
+ 0.5102X2
+ 0.1019X3
- 0.1441X4
로 추정된다. - F-통계량 값은 111.5이며, p-value 값이 4.756e-07로 유의수준 5% 하에서 추정된 회귀 모형이 통계적으로 매우 유의함을 볼 수 있다.
- 4.756e-07 = 4.756*0.0000001 = 0.0000004756
- 수정된 결정계수는 0.9736으로 매우 높은 값을 보이며, 이는 추정된 회귀식이 데이터를 약 97.36%로 적절하게 설명한다고 볼 수 있다.
- 설명변수
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
결과해석
- 회귀식은
Y
= 71.6483 + 1.4519X1
+ 0.4161X2
- 0.2365X4
로 추정된다. - F-통계량 값은 166.8이며, p-value 값이 3.323e-08로 유의수준 5% 하에서 추정된 회귀 모형이 통계적으로 매우 유의함을 볼 수 있다.
- 수정된 결정계수가 0.9764로
X3
변수를 제거하기 전보다 높아졌음을 알 수 있다. - 설명변수
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
결과해석
- 회귀식은
Y
= 52.57735 + 1.46831X1
+ 0.66225X2
로 추정된다. - F-통계량 값은 229.5이며, p-value 값이 4.407e-09로 유의수준 5% 하에서 추정된 회귀 모형이 통계적으로 매우 유의함을 볼 수 있다.
- 수정된 결정계수가 0.9744로
X4
변수를 제거하기 전보다 향상되지 않았으므로 여기에서 변수 제거를 멈춘다.
최종 결론
최종 회귀식은 Y
= 52.57735 + 1.46831X1
+ 0.66225X2
로 추정된다.
위 후진제거법은 수동으로 변수 제거를 진행한 것으로, 변수의 수가 많을 때에는 많은 번거로움이 있다. 이후에는 단계별 변수 선택의 방법을 자동으로 수행해주는 명령어를 사용하여 분석해 본다.
3. step 함수를 이용한 단계별 변수 선택
step 함수 사용법
step(lm(종속변수설명변수, 데이터세트), scope=list(lower=1, upper=~설명변수), direction="변수선택방법")
step 함수는 AIC를 기반으로 모델을 선택해주는 Stepwise Algorithms으로 사용법은 아래와 같다.
lm()
은 사용하고자 하는 분석 방법(회귀 분석)을 의미한다.scope=
는 분석할 때 고려할 변수의 범위를 정한다. 가장 낮은 단계는 lower에서 1을 입력하면 상수항을 의미하고, 가장 높은 단계를 설정하기 위해서는 설명 변수들을 모두 써주면 된다.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
결과해석
- 최종회귀식은
Y
= 71.6483 - 0.2365X4
+ 1.4519X1
+ 0.4161X2
로 추정된다. - 앞의 후진선택법의 결과와 다른 모형이 선택되었다. 보통 변수선택의 기준에 따라 선택된 모형은 차이를 보일 수 있다.
예제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
결과해석
- 최종회귀식은 앞의 전진선택법과 같이
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