stepAIC 활용, 모형 선택

AIC는 Akaike Information Criterion의 약자입니다.
모형은 단순하면서도 설명력이 높아야 좋습니다. AIC를 활용하여 단순하고 더 설명력이 높은, 더 적합한 모델을 선별하는 방법을 알아보겠습니다.

먼저 MASS 패키지가 필요합니다.
> library(MASS)

> quine.hi <- aov(log(Days + 2.5) ~ .^4, quine)
이 코드를 보면 aov()함수 안에 formula가 다음과 같습니다.
log(Days + 2.5) ~ .^4
컴마(.)는 나머지 모든 변수를 의미하고 ^4이 되어 있으니 2way, 3way, 4way interaction effect을 고려하라는 이야기입니다. quine 데이터 셋은 New South Wales 학교의 결석에 관한 자료입니다. 이 데이터의 변수는
  • Eth:인종(원주민, 그렇지 않은 경우)
  • Sex:남녀
  • Age:연령그룹(F0, F1, F2, F3)
  • Lrn: 학습성취도(평균(AL), 느림(SL))
  • Days: 한 해의 결석 날짜
4way를 제외시켜보지요.
> quine.nxt <- update(quine.hi, . ~ . - Eth:Sex:Age:Lrn)

update함수는 이미 구한 fit에서 특정 효과를 제외할 수 있습니다. formular를 보면 .~. 이 있습니다. 이것은 앞서 있던 fit의 formula를 그대로 받는다는 의미이고, - Eth:Sex:Age:Lrn은 이것만 제외시키라는 것입니다.

Fit의 결과를 보면

Call:
   aov(formula = log(Days + 2.5) ~ Eth + Sex + Age + Lrn + Eth:Sex + 
    Eth:Age + Eth:Lrn + Sex:Age + Sex:Lrn + Age:Lrn + Eth:Sex:Age + 
    Eth:Sex:Lrn + Eth:Age:Lrn + Sex:Age:Lrn, data = quine)

Terms:
                     Eth      Sex      Age      Lrn  Eth:Sex  Eth:Age  Eth:Lrn  Sex:Age  Sex:Lrn  Age:Lrn
Sum of Squares  10.68203  0.62388  3.76424  0.65290  0.01533  5.98964  0.01246  8.68925  0.57977  2.38640
Deg. of Freedom        1        1        3        1        1        3        1        3        1        2
                Eth:Sex:Age Eth:Sex:Lrn Eth:Age:Lrn Sex:Age:Lrn Residuals
Sum of Squares      1.93915     3.74062     2.14622     1.46623  64.09900
Deg. of Freedom           3           1           2           2       120

Residual standard error: 0.7308614
3 out of 29 effects not estimable
Estimated effects may be unbalanced


이제 setpAIC로 모델 선택을 해 봅시다.

> quine.stp <- stepAIC(quine.nxt,
                     scope = list(upper = ~Eth*Sex*Age*Lrn, lower = ~1),
                     trace = FALSE)

setpAIS는 MASS 함수입니다. 첫번째 파라미터는 fit입니다.
scope는 관찰할 모델의 범위를 알려줍니다. upper와 lower를 묶어 list 객체로 받습니다. 상수항부터 lower = ~1, 4차까지 받으니 사실 모든 범위를 다 보자는 의미입니다. trace는 중간 결과를 보여줄 것인가를 결정합니다.

이제 결과를 간추려 보기 위해,
> quine.stp$anova
를 수행하면


Stepwise Model Path 
Analysis of Deviance Table

Initial Model:
log(Days + 2.5) ~ Eth + Sex + Age + Lrn + Eth:Sex + Eth:Age + 
    Eth:Lrn + Sex:Age + Sex:Lrn + Age:Lrn + Eth:Sex:Age + Eth:Sex:Lrn + 
    Eth:Age:Lrn + Sex:Age:Lrn

Final Model:
log(Days + 2.5) ~ Eth + Sex + Age + Lrn + Eth:Sex + Eth:Age + 
    Eth:Lrn + Sex:Age + Sex:Lrn + Age:Lrn + Eth:Sex:Lrn + Eth:Age:Lrn


           Step Df Deviance Resid. Df Resid. Dev       AIC
1                                 120   64.09900 -68.18396
2 - Eth:Sex:Age  3 0.973869       123   65.07287 -71.98244
3 - Sex:Age:Lrn  2 1.526754       125   66.59962 -72.59652


라는 결과가 얻어집니다.
이런 Eth:Sex:Age와 Sex:Age:Lrn를 제외시키는 것을 추천받았습니다.

결과적으로

> a <- aov(log(Days + 2.5) ~ Eth + Sex + Age + Lrn + Eth:Sex + Eth:Age + Eth:Lrn + Sex:Age + Sex:Lrn + Age:Lrn + Eth:Sex:Lrn + Eth:Age:Lrn,quine)
> summary(a)
             Df Sum Sq Mean Sq F value   Pr(>F)    
Eth           1  10.68  10.682  20.049 1.68e-05 ***
Sex           1   0.62   0.624   1.171  0.28129    
Age           3   3.76   1.255   2.355  0.07516 .  
Lrn           1   0.65   0.653   1.225  0.27042    
Eth:Sex       1   0.02   0.015   0.029  0.86558    
Eth:Age       3   5.99   1.997   3.747  0.01281 *  
Eth:Lrn       1   0.01   0.012   0.023  0.87872    
Sex:Age       3   8.69   2.896   5.436  0.00151 ** 
Sex:Lrn       1   0.58   0.580   1.088  0.29889    
Age:Lrn       2   2.39   1.193   2.240  0.11077    
Eth:Sex:Lrn   1   4.70   4.696   8.813  0.00359 ** 
Eth:Age:Lrn   2   2.10   1.048   1.967  0.14418    
Residuals   125  66.60   0.533                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
 
AIC를 기준으로 했을 때 이 모형이 가장 간소하다는 결론입니다. 



댓글

이 블로그의 인기 게시물

R에서 csv 파일 읽는 법

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