2020. 7. 17. 11:57ㆍADP | 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를 기준으로 가장 적합하다고 판단되는 회귀모형을 찾는다.
위의 예제의 경우는 후진선택법을 통한 변수선택 예시 하나가 다른 결과를 도출해 냈지만, 다른 데이터셋은 셋 다 공통적인 결과를 불러오는 경우도 많다. 아마 후진선택법이 다른 결과를 도출한 이유는 알고리즘에 따른 변수 선택/제거 순서와 과정이 다르기에 적절한 변수를 찾거나 제거하는 정지점이 달라서이기 때문이다.
'ADP | ADsP with R > Knowledge' 카테고리의 다른 글
[ADP] R로 하는 시계열 분석 실습(분해시계열, ARIMA) (0) | 2020.07.18 |
---|---|
[ADP] R을 활용한 다변량 분석 -상관분석/ 다차원 척도법 / 주성분분석 (PCA) (0) | 2020.07.17 |
[ADP] R을 활용한 단순회귀/다중회귀/다항회귀분석 실습 (0) | 2020.07.16 |
[ADP] R - 결측값 처리와 이상값 탐색 (0) | 2020.07.14 |
[ADP] R-데이터 마트(2) / sqldf / plyr / data.table (0) | 2020.07.14 |