Повний посібник із покрокової регресії в 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

Зауважте, що крок вперед і вибір кроку в обох напрямках створили той самий кінцевий шаблон, тоді як вибір кроку назад створив інший шаблон.

Додаткові ресурси

Як перевірити значущість нахилу регресії
Як читати та інтерпретувати таблицю регресії
Керівництво з мультиколінеарності в регресії

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *