📌 회귀모델 선택
회귀모델 선택은 모델의 예측정확도와 간명도를 바탕으로 한다.
- 예측 정확도 : 모델의 데이터 적합도
- 간명도 : 모델의 간결함과 재현성
> str(mtcars)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
📌 중첩된 모델 간의 적합도 비교
> mtcars.lm1 <- lm(mpg ~ hp + wt, data=mtcars)
> mtcars.lm2 <- lm(mpg ~ hp + wt + disp + drat, data=mtcars)
> anova(mtcars.lm1, mtcars.lm2)
Analysis of Variance Table
Model 1: mpg ~ hp + wt
Model 2: mpg ~ hp + wt + disp + drat
Res.Df RSS Df Sum of Sq F Pr(>F)
1 29 195.05
2 27 182.84 2 12.21 0.9016 0.4178
귀무가설 : 두 개의 변수에 의해서 증가되는 R-square = 0이다.
p-value=0.4178 이므로 귀무가설을 기각하지 못한다. 통적으로 유의하지 않다. 따라서 hp와 wt만으로 구성된 회귀모델이 바람직하다.
> AIC(mtcars.lm1, mtcars.lm2)
df AIC
mtcars.lm1 4 156.6523
mtcars.lm2 6 158.5837
AIC가 작을수록 우수한 모델이다.
lm1의 AIC=156.6523, lm2의 AIC=158.5837이므로 lm1이 더 우수한 모델이다.
📌 변수 선택
- 전진선택법(forward selection) : 상수항만을 갖는 모델로부터 시작하여 단계별로 한 개씩 중요한 독립변수를 모델에 포함시킨다.
- 후진선택법(backward selection) : 모든 독립변수가 포함된 모델로부터 시작하여 단계별로 한 개씩 덜 중요한 독립변수를 모델에서 제거한다.
- 단계선택법(stepwise selection) : 전진선택법과 후진선택법을 혼합한 방식이다.
새로 진입되거나 제거되는 변수가 더 이상 존재하지 않을 때까지 제거 과정을 반복한다.
step() 함수에 다중 회귀 모델 지정하여 변수 선택 진행
> mtcars.lm <- lm(mpg ~ hp + wt + disp + drat, data=mtcars)
> step(mtcars.lm, direction="backward")
Start: AIC=65.77
mpg ~ hp + wt + disp + drat
Df Sum of Sq RSS AIC
- disp 1 0.844 183.68 63.919
<none> 182.84 65.772
- drat 1 12.153 194.99 65.831
- hp 1 60.916 243.75 72.974
- wt 1 70.508 253.35 74.209
Step: AIC=63.92
mpg ~ hp + wt + drat
Df Sum of Sq RSS AIC
- drat 1 11.366 195.05 63.840
<none> 183.68 63.919
- hp 1 85.559 269.24 74.156
- wt 1 107.771 291.45 76.693
Step: AIC=63.84
mpg ~ hp + wt
Df Sum of Sq RSS AIC
<none> 195.05 63.840
- hp 1 83.274 278.32 73.217
- wt 1 252.627 447.67 88.427
Call:
lm(formula = mpg ~ hp + wt, data = mtcars)
Coefficients:
(Intercept) hp wt
37.22727 -0.03177 -3.87783
후진선택법을 사용했다. 각 단계마다 AIC 값을 가장 크게 감소시키는 변수가 제거된다.
최종적으로 만들어진 회귀 모델은 hp + wt를 독립변수로 사용한 회귀 모델이다.
📌 가능한 모든 회귀모델을 탐색하고 각 모델의 적합도를 평가
nbest = 독립변수의 각 subset 크기별로 탐색할 모델의 개수
brewer.pal(n, name) : 색상 개수, 색상 이름
> library(leaps)
> mtcars.regsubsets <-regsubsets(x=mpg ~ hp + wt + disp + drat, data=mtcars,
+ nbest=4)
> windows(width=10, height=8)
> library(RColorBrewer)
> plot(mtcars.regsubsets, scale="adjr2",
+ col=brewer.pal(9, "Pastel1"),
+ main="All Subsets Regression")
각 행은 하나의 회귀모델을 나타낸다.
subsets 회귀분석 그래프에 따르면 가장 적합도가 높은 회귀 모델은 그래프의 가장 위에 있는 것이다.
hp, wt, drat를 갖는 회귀모델이다. 수정된 R-square=0.82이다.
📌 수정된 R-square
> summary(mtcars.regsubsets)$adjr2
[1] 0.7445939 0.7089548 0.5891853 0.4461283 0.8148396 0.7658223 0.7444071 0.7308774 0.8194018 0.8082829 0.7603385 0.7509073 0.8135739
📌 몇 번째 회귀모델이 가장 큰지
> which.max(summary(mtcars.regsubsets)$adjr2)
[1] 9
📌 9번째 회귀모델의 회귀계수
coef(mtcars.regsubsets, 9)