회귀분석, 변수 자동 선별: FWDSelect

y가 하나, x가 여러 개....
주어진 y를 가장 잘 설명할 수 있는 임의 개수의 x를 선별하고 싶다고 하자.

1. FWDSelect 설치

R> install.packages("FWDselect")

2. Sample Code

2.1. 패키지 부르기, 데이터 준비

R> library(FWDselect)
R> data("diabetes")
R> y <- diabetes[,1] #y변수
R> x <- diabetes[,2:11] #x변수, 모두 10개

2.2. 변수 선택

R> obj_selected <- selection(x,y,q=2) #x변수 2개 선택

기본적으로 변수를 선택할 때 deviance 기준, gaussian 족을 선택한다. 그런데 deviance 기준 이외에 R 스퀘어나 잔차(residual variance) 혹은 정보량(AIC나 BIC)을 활용하고 싶다면,

R> obj_selected <- selection(x,y,q=2,criterion="variance")

criterion의 옵션을 variance, R2, aic, bic 등으로 변경한다.
마찬가지로, 회귀분석의 방법을 method = "lm" 으로 정할 수 있다. 해당 옵션은 lm, glm, gam이 있다.
잔차 가정을 정규분포 쪽으로 하려면 family="gaussian"이 된다(기본값). 이 옵션은 binomial, poisson으로 변경 가능하다.

2.3. 결과

R> obj_selected
****************************************************
Best subset of size q = 2 : bmi ltg

Information Criterion Value - deviance : 284631.7
****************************************************

x변수 중 bmi와 ltg가 선택되었다.

2.4. 차선 모형 포함

R> obj_selected <- selection(x,y,q=2,seconds = TRUE,nmodels = 4)

seconds를 TRUE로 하고 nmodels에 개수를 밝힌다.

결과는 다음과 같다.
> obj_selected

****************************************************
Best subset of size q = 2 : bmi ltg

Information Criterion Value - deviance : 284631.7
****************************************************
Aternative ( 1 ) subset of size q = 2 : map, bmi
Information Criterion Value - deviance : 318221.4

Aternative ( 2 ) subset of size q = 2 : tch, bmi
Information Criterion Value - deviance : 323156.7

Aternative ( 3 ) subset of size q = 2 : hdl, bmi
Information Criterion Value - deviance : 326948.7

Aternative ( 4 ) subset of size q = 2 : glu, bmi
Information Criterion Value - deviance : 332808.3

3. 적절한 변수의 개수

R> q_size = qselection(x,y,qvector=1:4)

변수를 4개까지 선택하도록 qvector=1:4로 설정한다.

R> q_size$selection
[1] bmi               bmi, ltg          bmi, ltg, map     bmi, ltg, map, tc

결과의 효과를 보기 위하여 plotting을 할 수 있다.

R> plot(q_size)
2개 이후로는 실익이 별로 없다. 모형은 단순한 것이 최고다.


댓글

이 블로그의 인기 게시물

R에서 csv 파일 읽는 법

xlwings tutorial - 데이터 계산하여 붙여 넣기