단계적 회귀분석
단계적 회귀분석
- 독립변수의 후보가 k개 있으면 가능한 독립변수의 조합은 $2^k$개
- 독립변수의 후보가 많으면 모든 조합으로 회귀분석을 실시하는 것은 현실적으로 불가능
- 단계적 회귀분석(stepwise regression): 독립변수를 하나씩 추가/제거 하여 종속변수를 잘 예측하는 변수들을 선택하는 기법
- 예측력이 (통계적으로) 유의미한 예측변수들만을 골라줌
- 오직 자료만으로 변수를 선택하기 때문에 이상한 결과가 생길 수 있음
- 다중공선성 등의 문제에 대한 대처 불가
- 단계적 회귀분석은 탐색적으로 주요 변수를 파악하는 목적으로만 실시해야
실습 준비
MASS 라이브러리를 사용한다.
library(MASS)
MASS
라이브러리에 내장된 quine
데이터셋을 사용한다. 이 데이터는 학생의 결석에 관한 데이터이다. 종속변수는 결석일수를 나타내는 Days
이고 독립변수는 Eth
, Sex
, Age
, Lrn
이다.
head(quine)
Eth Sex Age Lrn Days 1 A M F0 SL 2 2 A M F0 SL 11 3 A M F0 SL 14 4 A M F0 AL 5 5 A M F0 AL 5 6 A M F0 AL 13
전진(forward) 방식
- 독립변수를 하나씩 추가
- 예) A, B, C, D를 가지고 Y를 예측하는 전진 방식의 단계적 회귀분석을 한다면,
- A, B, C, D 중 설명력이 제일 큰 예측변수? A
- A+B, A+C, A+D 중에 설명력이 가장 큰 조합은? A+B
- A와 A+B의 설명력이 유의미하게 차이가 나지 않으면 중단
- 설명력이 유의미하게 차이가 나면 A+B+C, A+B+D 중에 설명력이 가장 큰 조합을 찾음
- 이상의 과정을 계속
절편만 있는 모형을 만든다.
model.1 = lm(Days ~ 1, data = quine)
stepAIC
는 AIC라는 지표를 이용하여 단계적 회귀분석을 한다. AIC가 낮을 수록 설명력이 높은 모형이다.
step.forward = stepAIC(model.1, # 절편만 있는 모형에서 시작
direction = "forward", # 전진 방식
scope=Days ~ Eth + Sex + Age + Lrn) # Days ~ Eth + Sex + Age + Lrn 이 되면 멈춘다
Start: AIC=815.18 Days ~ 1 Df Sum of Sq RSS AIC + Eth 1 2980.51 35324 805.35 + Age 3 2535.13 35769 811.18 <none> 38304 815.18 + Sex 1 269.44 38035 816.15 + Lrn 1 78.69 38226 816.88 Step: AIC=805.35 Days ~ Eth Df Sum of Sq RSS AIC + Age 3 2274.91 33049 801.63 <none> 35324 805.35 + Sex 1 279.01 35045 806.19 + Lrn 1 100.88 35223 806.93 Step: AIC=801.63 Days ~ Eth + Age Df Sum of Sq RSS AIC + Lrn 1 598.37 32450 800.96 <none> 33049 801.63 + Sex 1 122.90 32926 803.09 Step: AIC=800.96 Days ~ Eth + Age + Lrn Df Sum of Sq RSS AIC <none> 32450 800.96 + Sex 1 213.82 32237 802.00
각 단계를 살펴보면 처음 절편만 있는 모형(Days ~ 1
)은 AIC가 815.18이다. 여기에 Eth
를 추가하면 AIC가 805.35감소한다. 여기에 Age
를 추가하면 801.63, Lrn
을 추가하면 800.96
까지 내려간다. 그러나 Sex
를 추가하면 AIC가 802.00으로 증가하기 때문에 추가하지 않는다. 결과적으로 Days ~ Eth + Age + Lrn
에서 멈춘다.
후진(backward) 방식
- 독립변수를 하나씩 제거
- 예) A, B, C, D를 가지고 Y를 예측하는 후진 방식의 단계적 회귀분석을 한다면,
- A+B+C+D에서 설명력이 가장 적게 줄어드는 변수를 제거 (D라고 하자)
- A+B+C와 A+B+C+D 설명력이 유의미하게 차이가 나면 중단
- 차이가 나지 않으면 A+B+C에서 설명이 가장 적게 줄어드는 변수를 제거
- 이상의 과정을 반복
model.2 = lm(Days ~ Eth + Sex + Age + Lrn, data = quine)
step.backward = stepAIC(model.2, direction = "backward")
Start: AIC=802 Days ~ Eth + Sex + Age + Lrn Df Sum of Sq RSS AIC - Sex 1 213.82 32450 800.96 <none> 32237 802.00 - Lrn 1 689.29 32926 803.09 - Age 3 2645.84 34882 807.52 - Eth 1 2774.02 35011 812.05 Step: AIC=800.96 Days ~ Eth + Age + Lrn Df Sum of Sq RSS AIC <none> 32450 800.96 - Lrn 1 598.37 33049 801.63 - Age 3 2772.41 35223 806.93 - Eth 1 2747.81 35198 810.83
각 단계를 살펴보면 Days ~ Eth + Sex + Age + Lrn
는 AIC가 802이다. 여기서 Sex
를 빼면 800.96으로 AIC가 가장 많이 줄어든다. 그 다음에는 Lrn
을 빼도 801.63, Age
를 빼도 806.93, Eth
를 빼도 810.83으로 AIC가 증가하므로 아무 것도 제외하지 않고 멈춘다.
주의할 점
- 변수를 순서대로 선택하기 때문에 검토하지 못하는 조합이 생김
- A -> A+B -> A+B+C ... 순으로 탐색을 하면 B+C는 검토할 기회가 없음
- 전진 방식과 후진 방식의 결과가 항상 같은 건 아님
- 대체로 전진 방식이 후진 방식보다 적은 변수를 선택하는 경향이 있음