[ADP] R을 활용한 변수 선택법 ( step()함수 - Forward, Backward, Stepwise )

2020. 7. 17. 11:57ADP | ADsP with R/Knowledge

 회귀분석을 할 때 다중공선성이 발생하면, 데이터 분석의 신뢰성이나 예측 정확도를 떨어뜨린다. 이러한 문제를 하기 위한 방법 중 하나로 데이터 선정/전처리 과정에서 "변수선택"이 매우 중요하다.

변수 선택법(Variable Selection)은 

1. 전진선택법(Forward Selection)

2. 후진소거법(Backward Elimination)

3. 단계적선택법(Stepwise Selection)

이 있다.

 이 방법들은 모두 각 변수의 OLS 결과를 보고, 직접 p-value와 F통계량을 비교하며 추가/삭제하는 작업을 진행할 수 있다. 하지만, 통계에 수월한 언어인 R에는 step()이란 함수를 통해서 쉽게 3가지 방법 모두를 적용할 수 있다. 


먼저 기본적인 함수의 형태를 알아보자

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

1. lm함수를 대입한 것은 사용할 분석방법이 회귀분석이라는 것을 대입하는 것이다. 

2. scope는 분석할 때 고려할 변수의 범위를 정해주는 것이다. lower = ~1은 상수항부터 시작한다는 것을 입력한 것이고, 모든 변수를 고려하고 싶다면 upper에 설명변수를 모두 기입하면 된다. 그렇지 않다면, 원하는 변수만 기입하면 된다.

3. 우리가 이 함수를 사용할 때, direction의 인수에 "forward", "backward", "both" 인수를 대입하여 전진선택, 후진소거, 단계별 선택을 진행할 수 있다. 

 

 데이터셋을 가져와 실습을 진행해보자

# dataset 로드

library(MASS)
data(hills)
head(hillS)

time을 예측하기 위해 종속변수로 두고, dist와 climb를 설명변수로 간주하겠다. 

 

전진 선택법 ( Forward )

# forward
step(lm(time ~1, hills), scope = list(lower ~ 1, upper = ~dist + climb), direction = "forward")

 위를 보면 최종회귀식은 dist와 climb 변수를 모두 채택하여 time = -8.99204 + 621795dist + 0.01105climb이라는 회귀식을 도출했다. 

 

후진 소거법 ( Backward )

# backward
step(lm(time ~1, hills), scope = list(lower ~ 1, upper = ~dist + climb), direction = "backward")

 위를 보면 최종회귀식은 상수항을 제외한 어떤 변수도 채택하지 않았다. 즉, time = 57.88이라는 회귀식을 도출했다. 

 

단계별 선택법 ( Stepwise )

# stepwise 
step(lm(time ~1, hills), scope = list(lower ~ 1, upper = ~dist + climb), direction = "both")

 위를 보면 최종회귀식은 dist와 climb 변수를 모두 채택하여 time = -8.99204 + 621795dist + 0.01105climb이라는 회귀식을 도출했다.

 

 이 세 가지 변수선택법은 모두 모든 가능한 독립변수들의 조합에 대해서 AIC나 BIC를 기준으로 가장 적합하다고 판단되는 회귀모형을 찾는다. 

 위의 예제의 경우는 후진선택법을 통한 변수선택 예시 하나가 다른 결과를 도출해 냈지만, 다른 데이터셋은 셋 다 공통적인 결과를 불러오는 경우도 많다. 아마 후진선택법이 다른 결과를 도출한 이유는 알고리즘에 따른 변수 선택/제거 순서와 과정이 다르기에 적절한 변수를 찾거나 제거하는 정지점이 달라서이기 때문이다.