Un guide complet sur la régression pas à pas dans R



La régression pas à pas est une procédure que nous pouvons utiliser pour construire un modèle de régression à partir d’un ensemble de variables prédictives en entrant et en supprimant des prédicteurs de manière étape par étape dans le modèle jusqu’à ce qu’il n’y ait plus de raison statistiquement valable d’en saisir ou d’en supprimer davantage.

L’objectif de la régression pas à pas est de créer un modèle de régression qui inclut toutes les variables prédictives qui sont statistiquement significativement liées à la variable de réponse .

Ce didacticiel explique comment effectuer les procédures de régression pas à pas suivantes dans R :

  • Sélection pas à pas vers l’avant
  • Sélection pas à pas en arrière
  • Sélection pas à pas dans les deux sens

Pour chaque exemple, nous utiliserons l’ensemble de données mtcars intégré :

#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

Nous ajusterons un modèle de régression linéaire multiple en utilisant mpg (miles par gallon) comme variable de réponse et les 10 autres variables de l’ensemble de données comme variables prédictives potentielles.

Pour chaque exemple, nous utiliserons la fonction step() intégrée du package stats pour effectuer une sélection par étapes, qui utilise la syntaxe suivante :

étape (modèle d’interception uniquement, direction, portée)

où:

  • modèle à l’origine uniquement : la formule du modèle à l’origine uniquement
  • direction : le mode de recherche pas à pas peut être « les deux », « en arrière » ou « en avant ».
  • scope : une formule qui spécifie les prédicteurs que nous aimerions tenter d’entrer dans le modèle

Exemple 1 : Sélection pas à pas avant

Le code suivant montre comment effectuer une sélection étape par étape :

#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 

Remarque : L’argument trace=0 indique à R de ne pas afficher les résultats complets de la sélection pas à pas. Cela peut prendre beaucoup de place s’il existe un grand nombre de variables prédictives.

Voici comment interpréter les résultats :

  • Tout d’abord, nous ajustons le modèle d’interception uniquement. Ce modèle avait un AIC de 115,94345 .
  • Ensuite, nous adaptons tous les modèles possibles à un prédicteur. Le modèle qui a produit l’AIC le plus bas et qui présentait également une réduction statistiquement significative de l’AIC par rapport au modèle à l’origine uniquement utilisait le prédicteur wt . Ce modèle avait un AIC de 73,21736 .
  • Ensuite, nous ajustons tous les modèles possibles à deux prédicteurs. Le modèle qui a produit l’AIC le plus bas et présentait également une réduction statistiquement significative de l’AIC par rapport au modèle à prédicteur unique a ajouté le prédicteur cyl . Ce modèle avait un AIC de 63,19800 .
  • Ensuite, nous ajustons tous les modèles possibles à trois prédicteurs. Le modèle qui a produit l’AIC le plus bas et a également présenté une réduction statistiquement significative de l’AIC par rapport au modèle à deux prédicteurs a ajouté le prédicteur hp . Ce modèle avait un AIC de 62,66456 .
  • Ensuite, nous adaptons tous les modèles possibles à quatre prédicteurs. Il s’est avéré qu’aucun de ces modèles ne produisait une réduction significative de l’AIC, nous avons donc arrêté la procédure.

Le modèle final s’avère être :

mpg ~ 38,75 – 3,17*poids – 0,94*cyl – 0,02*hyp

Exemple 2 : sélection pas à pas en arrière

Le code suivant montre comment effectuer une sélection pas à pas vers l’arrière :

#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

Voici comment interpréter les résultats :

  • Tout d’abord, nous ajustons un modèle utilisant tous les prédicteurs p . Définissez ceci comme M p .
  • Ensuite, pour k = p, p-1,… 1, nous ajustons tous les k modèles qui contiennent tous les prédicteurs sauf un dans M k , pour un total de k-1 variables prédictives. Ensuite, choisissez le meilleur parmi ces k modèles et appelez-le M k-1 .
  • Enfin, nous choisissons un meilleur modèle parmi M 0 … M p en utilisant AIC.

Le modèle final s’avère être :

mpg ~ 9,62 – 3,92*poids + 1,23*qsec + 2,94*am

Exemple 3 : Sélection pas à pas dans les deux sens

Le code suivant montre comment effectuer une sélection pas à pas dans les deux sens :

#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 

Voici comment interpréter les résultats :

  • Tout d’abord, nous ajustons le modèle d’interception uniquement.
  • Ensuite, nous avons ajouté des prédicteurs au modèle de manière séquentielle, tout comme nous l’avons fait pour la sélection étape par étape. Cependant, après avoir ajouté chaque prédicteur, nous avons également supprimé tous les prédicteurs qui n’apportaient plus d’amélioration de l’ajustement du modèle.
  • Nous avons répété ce processus jusqu’à ce que nous obtenions un modèle final.

Le modèle final s’avère être :

mpg ~ 9,62 – 3,92*poids + 1,23*qsec + 2,94*am

Notez que la sélection pas à pas vers l’avant et la sélection pas à pas dans les deux sens ont produit le même modèle final, tandis que la sélection par étapes vers l’arrière a produit un modèle différent.

Ressources additionnelles

Comment tester la signification d’une pente de régression
Comment lire et interpréter un tableau de régression
Un guide sur la multicolinéarité en régression

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *