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