Повний посібник із покрокової регресії в r
Поетапна регресія – це процедура, яку ми можемо використати для побудови регресійної моделі з набору змінних предикторів шляхом покрокового введення та видалення предикторів у моделі, доки більше не буде статистично обґрунтованої причини для введення або видалити більше.
Метою поетапної регресії є створення регресійної моделі, яка включає всі прогностичні змінні, які статистично значимо пов’язані зі змінною відповіді .
У цьому посібнику пояснюється, як виконувати такі покрокові процедури регресії в R:
- Покроковий вибір
- Покроковий вибір назад
- Покроковий вибір в обох напрямках
Для кожного прикладу ми будемо використовувати вбудований набір даних mtcars :
#view first six rows of mtcars
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3,460 20.22 1 0 3 1
Ми підберемо модель множинної лінійної регресії, використовуючи mpg (милі на галон) як змінну відповіді та інші 10 змінних у наборі даних як потенційні змінні прогнозу.
Для кожного прикладу ми будемо використовувати вбудовану функцію step() пакета stats для виконання покрокового вибору, який використовує такий синтаксис:
етап (лише модель перехоплення, напрямок, дальність)
золото:
- лише оригінальна модель : формула лише оригінальної моделі
- Напрямок: режим покрокового пошуку може бути «обидва», «назад» або «вперед».
- scope: формула, яка визначає предиктори, які ми хотіли б спробувати ввести в модель
Приклад 1: Покроковий вибір вперед
У наведеному нижче коді показано, як виконати вибір крок за кроком:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform forward stepwise regression forward <- step(intercept_only, direction=' forward ', scope= formula (all), trace=0) #view results of forward stepwise regression forward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model forward$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
Примітка. Аргумент trace=0 повідомляє R не відображати повні результати покрокового вибору. Це може зайняти багато місця, якщо є велика кількість змінних предиктора.
Ось як інтерпретувати результати:
- По-перше, ми підходимо до моделі лише перехоплення. Ця модель мала AIC 115,94345 .
- Потім ми підганяємо всі можливі моделі до предиктора. Модель, яка створила найнижчий AIC і також мала статистично значуще зниження AIC порівняно з базовою моделлю, використовувала предиктор wt . Ця модель мала AIC 73,21736 .
- Далі ми підганяємо всі можливі моделі з двома предикторами. Модель, яка створювала найнижчий AIC і також мала статистично значуще зниження AIC порівняно з моделлю з одним предиктором, додала предиктор cyl . Ця модель мала AIC 63,19800 .
- Далі ми підганяємо всі можливі моделі до трьох предикторів. Модель, яка створила найнижчий AIC і також мала статистично значуще зниження AIC порівняно з моделлю з двома предикторами, додала предиктор hp . Ця модель мала AIC 62,66456 .
- Далі ми підганяємо всі можливі моделі до чотирьох предикторів. Виявилося, що жодна з цих моделей не призвела до значного зниження AIC, тому ми припинили процедуру.
Остаточна модель виходить такою:
mpg ~ 38,75 – 3,17*вага – 0,94*cyl – 0,02*hyp
Приклад 2: Покроковий вибір назад
Наступний код показує, як зробити крок назад:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression backward <- step(all, direction=' backward ', scope= formula (all), trace=0) #view results of backward stepwise regression backward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 21 147.4944 70.89774 2 - cyl 1 0.07987121 22 147.5743 68.91507 3 - vs 1 0.26852280 23 147.8428 66.97324 4 - carb 1 0.68546077 24 148.5283 65.12126 5 - gear 1 1.56497053 25 150.0933 63.45667 6 - drat 1 3.34455117 26 153.4378 62.16190 7 - available 1 6.62865369 27 160.0665 61.51530 8 - hp 1 9.21946935 28 169.2859 61.30730 #view final model backward$coefficients (Intercept) wt qsec am 9.617781 -3.916504 1.225886 2.935837
Ось як інтерпретувати результати:
- По-перше, ми підбираємо модель, використовуючи всі p предиктори. Визначте це як M p .
- Тоді, для k = p, p-1,…1, ми підбираємо всі k моделей, які містять усі предиктори, крім одного, у M k , для загальної кількості k-1 змінних предикторів. Потім виберіть найкращу серед цих k моделей і назвіть її M k-1 .
- Нарешті, ми вибираємо найкращу модель з M 0 … M p за допомогою AIC.
Остаточна модель виходить такою:
mpg ~ 9,62 – 3,92*вага + 1,23*qsec + 2,94*am
Приклад 3: Покрокове виділення в обох напрямках
Наступний код показує, як виконати покроковий вибір в обох напрямках:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression both <- step(intercept_only, direction=' both ', scope= formula (all), trace=0) #view results of backward stepwise regression both$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model both$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
Ось як інтерпретувати результати:
- По-перше, ми підходимо до моделі лише перехоплення.
- Далі ми послідовно додавали предиктори до моделі, як і для покрокового вибору. Однак після додавання кожного предиктора ми також видалили всі предиктори, які більше не забезпечували покращення відповідності моделі.
- Ми повторювали цей процес, поки не отримали остаточну модель.
Остаточна модель виходить такою:
mpg ~ 9,62 – 3,92*вага + 1,23*qsec + 2,94*am
Зауважте, що крок вперед і вибір кроку в обох напрямках створили той самий кінцевий шаблон, тоді як вибір кроку назад створив інший шаблон.
Додаткові ресурси
Як перевірити значущість нахилу регресії
Як читати та інтерпретувати таблицю регресії
Керівництво з мультиколінеарності в регресії