Полное руководство по пошаговой регрессии в 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

Примечание.Аргумент 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 * утра

Обратите внимание, что прямой пошаговый отбор и пошаговый отбор в обоих направлениях дали одну и ту же окончательную модель, в то время как обратный пошаговый отбор дал другую модель.

Дополнительные ресурсы

Как проверить значимость наклона регрессии
Как читать и интерпретировать таблицу регрессии
Руководство по мультиколлинеарности в регрессии

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.