Полное руководство по пошаговой регрессии в 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
Мы подберем модель множественной линейной регрессии, используя мили на галлон (мили на галлон) в качестве переменной отклика, а остальные 10 переменных в наборе данных — в качестве потенциальных переменных-предсказателей.
В каждом примере мы будем использовать встроенную функцию Step() пакета stats для выполнения пошагового выбора, который использует следующий синтаксис:
этап (только модель перехвата, направление, дальность)
Золото:
- только оригинальная модель : формула только оригинальной модели
- Направление: Режим пошагового поиска может быть «в оба», «назад» или «вперед».
- область действия: формула, определяющая предикторы, которые мы хотели бы попытаться ввести в модель.
Пример 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
Примечание. Аргумент трассировки=0 сообщает R не отображать полные результаты пошагового выбора. Это может занять много места, если имеется большое количество переменных-предикторов.
Вот как интерпретировать результаты:
- Во-первых, мы подходим к модели только перехвата. Эта модель имела AIC 115,94345 .
- Затем мы подгоняем все возможные модели к предиктору. Модель, которая давала самый низкий AIC, а также имела статистически значимое снижение AIC по сравнению с моделью, основанной только на базовом уровне, использовала предиктор wt . Эта модель имела AIC 73,21736 .
- Далее мы аппроксимируем все возможные модели двумя предикторами. Модель, которая давала самый низкий AIC, а также имела статистически значимое снижение AIC по сравнению с моделью с одним предиктором, добавила предиктор Cyl . Эта модель имела AIC 63,19800 .
- Далее мы подгоняем все возможные модели к трем предикторам. Модель, которая давала самый низкий AIC, а также имела статистически значимое снижение AIC по сравнению с моделью с двумя предикторами, добавила предиктор HP . Эта модель имела AIC 62,66456 .
- Далее мы подгоняем все возможные модели к четырем предикторам. Оказалось, что ни одна из этих моделей не привела к значительному снижению AIC, поэтому мы остановили процедуру.
Итоговая модель получается:
миль на галлон ~ 38,75 – 3,17*вес – 0,94*цилиндр – 0,02*гип.
Пример 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.
Итоговая модель получается:
миль на галлон ~ 9,62 – 3,92*вес + 1,23*ксек + 2,94*утра
Пример 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
Вот как интерпретировать результаты:
- Во-первых, мы подходим к модели только перехвата.
- Далее мы последовательно добавляли в модель предикторы, как и при пошаговом выборе. Однако после добавления каждого предиктора мы также удалили все предикторы, которые больше не обеспечивали улучшения соответствия модели.
- Мы повторяли этот процесс, пока не получили окончательную модель.
Итоговая модель получается:
миль на галлон ~ 9,62 – 3,92*вес + 1,23*ксек + 2,94*утра
Обратите внимание, что выбор шага вперед и выбор шага в обоих направлениях давали один и тот же конечный шаблон, тогда как выбор шага назад создавал другой шаблон.
Дополнительные ресурсы
Как проверить значимость наклона регрессии
Как читать и интерпретировать таблицу регрессии
Руководство по мультиколлинеарности в регрессии