주어진 데이터에 쓸 수 있는 예측변수가 너무 많을 때, 그 중 어떤 것을 선택할 것인지는 모델 생성에서 아주 중요한 문제이다.
이 때 regsubsets() 함수는 , Best Subset selection, forward selection ,backward selection을 모두 지원한다.
library(leaps)
regfit.full <- regsubsets(y~., data, nvmax = k)
# y~. : y : 반응변수, y제외 나머지 : 예측변수
# nvmax : 예측변수를 몇개 까지 넣고 조사할 것인지. default는 8 언저리라고 함.
# Best subset selection 수행
#이 때, method 인자를 주면, forward, backward selection도 수행한다.
regfit.full <- regsubsets(y~., data, nvmax = k, method = 'forward')
regfit.full <- regsubsets(y~., data, nvmax = k, method = 'backward')
여기 까지는 아주 무난하다.
문제는 구한 regsubsets 값을 어떻게 활용할 것인데..
여기서 내가 하고 싶은 건
1. 그래서 어느 subset을 골라야 하는지
2. cp, bic, rss, adjusted R-squared 등 지표의 시각화
이 때, regfit.full 자체를 사용하기보다는 이 객체가 담고있는 정보를 요약한
summary(regfit.full)을 활용하자.
in:
names(summary(regfit.full))
out:
[1] "which" "rsq" "rss" "adjr2" "cp" "bic" "outmat" "obj"
여기서 rsq, rss, adjr2, cp, bic는 모두 포함된 예측변수 수에 따른 지표이다,
이 자료들은 모두 시각화가 가능하며, 예측변수가 몇개일 때 최소/최대 값을 가지는지도 확인 할 수 있다.
par (mfrow = c(2, 2)) # figure을 2x2로 분할
plot (reg.summary$rss , xlab = " Number of Variables ",
ylab = " RSS ", type = "l")
plot (reg.summary$adjr2 , xlab = " Number of Variables ",
ylab = " Adjusted RSq ", type = "l")
which.max (reg.summary$adjr2) # 몇개가 포함되었을때 최대?
points (11, reg.summary$adjr2[11], col = " red ", cex = 2,
pch = 20)
plot (reg.summary$cp, xlab = " Number of Variables ",
ylab = "Cp", type = "l")
which . min (reg.summary$cp)
points (10, reg.summary$cp[10], col = " red ", cex = 2,
pch = 20)
which.min (reg.summary$bic)
plot (reg.summary$bic , xlab = " Number of Variables ",
ylab = " BIC ", type = "l")
points (6, reg.summary$bic[6], col = " red ", cex = 2,
pch = 20)
핵심만 요약하자면, plot함수를 이용해 포함된 predictors 개수에 따른 지표들을 비교 할 수 있다.
시각화 자료와 최저/최대점을 이용해 K개의 변수가 포함될 때 Best Subset 임을 알아냈다고 하자.
이때의 모델 coefficient를 구하는 것은 간단하다.
coef(regfit.full, k)
이로써 best model이 선택 되었다.
forward, backward의 경우에도 동일한 방법으로 수행하면 된다.
'Programming > R' 카테고리의 다른 글
Shrinkage Methods using R (0) | 2022.05.12 |
---|---|
Resampling using R : Cross-validation / Bootstrap (0) | 2022.05.08 |
R을 이용한 Classifiers : LDA, QDA, NaiveBayes (0) | 2022.05.08 |
R : lm() / glm() (0) | 2022.05.07 |