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 학교의 결석에 관한 자료입니다. 이 데이터의 변수는
> quine.nxt <- update(quine.hi, . ~ . - Eth:Sex:Age:Lrn)
update함수는 이미 구한 fit에서 특정 효과를 제외할 수 있습니다. formular를 보면 .~. 이 있습니다. 이것은 앞서 있던 fit의 formula를 그대로 받는다는 의미이고, - Eth:Sex:Age:Lrn은 이것만 제외시키라는 것입니다.
Fit의 결과를 보면
이제 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
를 수행하면
라는 결과가 얻어집니다.
이런 Eth:Sex:Age와 Sex:Age:Lrn를 제외시키는 것을 추천받았습니다.
결과적으로
모형은 단순하면서도 설명력이 높아야 좋습니다. 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: 한 해의 결석 날짜
> 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를 기준으로 했을 때 이 모형이 가장 간소하다는 결론입니다.
댓글
댓글 쓰기