Ступенчатая регрессия — это процедура, которую мы можем использовать для построения регрессионной модели из набора переменных-предикторов путем пошагового ввода и удаления предикторов в модель до тех пор, пока не исчезнет статистически значимая причина для ввода или удаления.
Цель пошаговой регрессии состоит в построении регрессионной модели, включающей все переменные-предикторы, которые статистически значимо связаны с переменной отклика .
В этом руководстве объясняется, как выполнить следующие процедуры пошаговой регрессии в 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
Примечание.Аргумент 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, поэтому мы остановили процедуру.
Окончательная модель получается:
миль на галлон ~ 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 - disp 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 * qsec + 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 * qsec + 2,94 * утра
Обратите внимание, что прямой пошаговый отбор и пошаговый отбор в обоих направлениях дали одну и ту же окончательную модель, в то время как обратный пошаговый отбор дал другую модель.
Дополнительные ресурсы
Как проверить значимость наклона регрессии
Как читать и интерпретировать таблицу регрессии
Руководство по мультиколлинеарности в регрессии