Régression linéaire multiple dans R : méthode simple et par étapes avec exemples
⚡ Résumé intelligent
La régression linéaire simple et multiple dans R modélise une variable dépendante continue comme une somme pondérée de prédicteurs estimés par la méthode des moindres carrés ordinaires. Ce guide aborde la fonction `lm()`, la lecture des coefficients, les prédicteurs factoriels, le diagnostic des résidus, la prédiction et la sélection automatique des variables.
Place de la régression linéaire dans l'apprentissage automatique
La régression linéaire est l'une des plus anciennes méthodes de modélisation supervisée. machine learning algorithmes, et c'est encore le premier modèle auquel la plupart des analystes ont recours. L'une des premières applications d'apprentissage automatique était le filtre anti-spam.
Parmi les autres applications courantes de l'apprentissage automatique, on peut citer :
- Identification des messages de spam indésirables dans les e-mails
- Segmentation du comportement client pour une publicité ciblée
- Réduction des transactions frauduleuses par carte de crédit
- Optimisation de la consommation d'énergie dans les habitations et les bâtiments de bureaux
- La reconnaissance faciale
Apprentissage supervisé
In Apprentissage supervisé, les données d'entraînement que vous fournissez à l'algorithme incluent une étiquette.
Classification Il s'agit probablement de la technique d'apprentissage supervisé la plus utilisée. L'une des premières tâches de classification abordées par les chercheurs a été le filtrage des spams. L'objectif de cet apprentissage est de prédire si un courriel est classé comme spam ou comme courriel légitime. Après la phase d'entraînement, la machine est capable de déterminer la catégorie du courriel.
Régressions sont couramment utilisées dans le domaine de l'apprentissage automatique pour prédire des valeurs continues. Une tâche de régression peut prédire la valeur d'une variable. variable dépendante basé sur un ensemble de variables indépendantes (également appelés prédicteurs ou régresseurs). Par exemple, les régressions linéaires peuvent prédire le cours d’une action, les prévisions météorologiques, les ventes, etc.
Voici quelques algorithmes d'apprentissage supervisé fondamentaux :
- Régression linéaire
- Régression logistique
- Voisins les plus proches
- Machine à vecteur de support (SVM)
- Arbres de décision et Random Forest
- Les réseaux de neurones
Apprentissage non supervisé
In Apprentissage non supervisé, les données d'entraînement ne sont pas étiquetées. Le système essaie d'apprendre sans référence. Vous trouverez ci-dessous une liste d'algorithmes d'apprentissage non supervisé.
- K-moyenne
- Hiérarchique Cluster Analyse
- Maximisation des attentes
- Visualisation et réduction de la dimensionnalité
- Analyse des composants principaux
- PCA du noyau
- Incorporation localement linéaire
Dans ce contexte, le reste de ce tutoriel construit étape par étape des modèles de régression dans R.
Régression linéaire simple dans R
La régression linéaire répond à une question simple : peut-on mesurer une relation exacte entre une variable cible et un ensemble de prédicteurs ?
Le modèle probabiliste le plus simple est le modèle linéaire :
où
- y = Variable dépendante
- x = Variable indépendante
-
= composante d'erreur aléatoire
-
= intercepter
-
= Coefficient de x
Considérons le tracé suivant :
L'équation est Dans cette équation, l'ordonnée à l'origine est de 4.77, donc lorsque x est égal à 0, la valeur ajustée de y est de 4.77. La pente indique dans quelle proportion y varie lorsque x varie.
Pour estimer les valeurs optimales de et
, vous utilisez une méthode appelée Moindres carrés ordinaires (OLS). Cette méthode tente de trouver les paramètres qui minimisent la somme des erreurs quadratiques, c'est-à-dire la distance verticale entre les valeurs y prédites et les valeurs y réelles. La différence est connue sous le nom de terme d'erreur.
Avant d'estimer le modèle, vous pouvez déterminer si une relation linéaire entre y et x est plausible en traçant un nuage de points.
nuage de points
Nous utiliserons un ensemble de données très simple pour expliquer le concept de régression linéaire simple. Nous importerons les tailles et poids moyens des femmes américaines. L'ensemble de données contient 15 observations. Vous souhaitez mesurer si les hauteurs sont positivement corrélées aux poids.
library(ggplot2) path <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/women.csv' df <-read.csv(path) ggplot(df,aes(x=height, y = weight))+ geom_point()
Sortie :
Le nuage de points suggère une tendance générale à l'augmentation du poids avec la taille. À l'étape suivante, vous mesurerez l'augmentation de poids pour chaque unité de taille supplémentaire.
Estimations des moindres carrés
Dans une régression OLS simple, le calcul de et
C'est simple. Ce tutoriel ne démontre pas les formules, il se contente de les énoncer.
Vous souhaitez estimer :
Le but de la régression OLS est de minimiser l’équation suivante :
où
est la valeur réelle et
est la valeur prédite.
La solution pour is
Notez que signifie la valeur moyenne de x
La solution pour is
Dans R, vous pouvez utiliser les fonctions cov() et var() pour estimer et vous pouvez utiliser la fonction Mean() pour estimer
beta <- cov(df$height, df$weight) / var (df$height) beta
Sortie :
##[1] 3.45
alpha <- mean(df$weight) - beta * mean(df$height) alpha
Sortie :
## [1] -87.51667
Le coefficient bêta implique que pour chaque pouce supplémentaire de hauteur, le poids moyen augmente de 3.45 livres.
Estimer une équation linéaire à la main est instructif mais peu pratique. R La fonction lm() est fournie pour effectuer cette opération, et vous l'utiliserez à partir de la section suivante. Dans les projets réels, vous n'aurez quasiment jamais besoin d'ajuster un modèle à un seul prédicteur ; les tâches de régression impliquent généralement plusieurs estimateurs simultanément.
Régression linéaire multiple dans R
Les applications pratiques de l'analyse de régression utilisent des modèles plus complexes que le simple modèle linéaire. Le modèle probabiliste qui inclut plus d'une variable indépendante est appelé modèles de régression multiples. La forme générale de ce modèle est :
En notation matricielle, vous pouvez réécrire le modèle :
La variable dépendante y est désormais fonction de k variables indépendantes. La valeur du coefficient détermine la contribution de la variable indépendante
et
.
Nous présentons brièvement l'hypothèse que nous avons faite sur l'erreur aléatoire de l'OLS :
- Moyenne égale à 0
- Écart égal à
- Distribution normale
- Les erreurs aléatoires sont indépendantes (au sens probabiliste)
Vous devez résoudre pour , le vecteur de coefficients de régression qui minimisent la somme des erreurs quadratiques entre les valeurs y prédites et réelles.
La solution sous forme fermée est :
avec:
- indique le transposer de la matrice X
indique le matrice inversible
Les exemples ci-dessous utilisent le jeu de données intégré mtcars. L'objectif est de prédire la consommation de carburant (en miles par gallon, mpg) à partir d'un ensemble de caractéristiques.
Variables continues dans R
Pour l’instant, vous n’utiliserez que les variables continues et mettrez de côté les fonctionnalités catégorielles. La variable am est une variable binaire prenant la valeur 1 si la transmission est manuelle et 0 pour les voitures automatiques ; vs est également une variable binaire.
library(dplyr) df <- mtcars %>% select(-c(am, vs, cyl, gear, carb)) glimpse(df)
Sortie :
## Observations: 32 ## Variables: 6 ## $ mpg <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.... ## $ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 1... ## $ hp <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, ... ## $ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.9... ## $ wt <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3... ## $ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 2...
Vous pouvez utiliser la fonction lm() pour calculer les paramètres. La syntaxe de base de cette fonction est :
lm(formula, data, subset)
Arguments:
-formula: The equation you want to estimate
-data: The dataset used
-subset: Estimate the model on a subset of the dataset
N'oubliez pas qu'une équation est de la forme suivante
en R
- Le symbole = est remplacé par ~
- Chaque x est remplacé par le nom de la variable
- Si vous souhaitez supprimer la constante, ajoutez -1 à la fin de la formule
Exemple :
Vous souhaitez estimer le poids des individus en fonction de leur taille et de leurs revenus. L'équation est
L’équation dans R s’écrit comme suit :
y ~ X1+ X2+…+Xn # Avec interception
Donc pour notre exemple :
- Pesée ~ taille + revenu
Votre objectif est d'estimer le mile par gallon en fonction d'un ensemble de variables. L'équation à estimer est :
Vous estimerez votre première régression linéaire et stockerez le résultat dans l'objet d'ajustement.
model <- mpg ~ disp + hp + drat + wt + qsec
fit <- lm(model, df)
fit
Code Explication
- modèle <- mpg ~ disp + hp + drat + wt + qsec : Stocker le modèle à estimer
- lm(model, df) : Estimer le modèle avec la trame de données df
## ## Call: ## lm(formula = model, data = df) ## ## Coefficients: ## (Intercept) disp hp drat wt ## 16.53357 0.00872 -0.02060 2.01577 -4.38546 ## qsec ## 0.64015
Le résultat ne fournit pas suffisamment d’informations sur la qualité de l’ajustement. Vous pouvez accéder à plus de détails tels que la signification des coefficients, le degré de liberté et la forme des résidus avec la fonction summary().
summary(fit)
Sortie :
## return the p-value and coefficient ## ## Call: ## lm(formula = model, data = df) ## ## Residuals: ## Min 1Q Median 3Q Max ## -3.5404 -1.6701 -0.4264 1.1320 5.4996 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 16.53357 10.96423 1.508 0.14362 ## disp 0.00872 0.01119 0.779 0.44281 ## hp -0.02060 0.01528 -1.348 0.18936 ## drat 2.01578 1.30946 1.539 0.13579 ## wt -4.38546 1.24343 -3.527 0.00158 ** ## qsec 0.64015 0.45934 1.394 0.17523 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 2.558 on 26 degrees of freedom ## Multiple R-squared: 0.8489, Adjusted R-squared: 0.8199 ## F-statistic: 29.22 on 5 and 26 DF, p-value: 6.892e-10
Inférence à partir de la sortie du tableau ci-dessus
- Le tableau montre une forte corrélation négative entre le poids et la consommation de carburant (mpg), et un coefficient positif pour la consommation de carburant (drat).
- Seule la variable poids a un impact statistique sur le mpg. Rappelons que pour tester une hypothèse en statistique, on utilise :
- H0 : Aucun impact statistique
- H1 : Le prédicteur a un impact significatif sur y
- Si la valeur p est inférieure à 0.05, cela indique que la variable est statistiquement significative
- R² ajusté : la part de la variance de y expliquée par le modèle, corrigée en fonction du nombre de prédicteurs. Ici, il est de 0.8199, ce qui signifie que le modèle explique environ 82 % de la variance de la consommation (mpg). Le R² est toujours compris entre 0 et 1 ; plus il est élevé, meilleur il est.
Vous pouvez exécuter le ANOVA test pour estimer l'effet de chaque fonctionnalité sur les variances avec la fonction anova().
anova(fit)
Sortie :
## Analysis of Variance Table ## ## Response: mpg ## Df Sum Sq Mean Sq F value Pr(>F) ## disp 1 808.89 808.89 123.6185 2.23e-11 *** ## hp 1 33.67 33.67 5.1449 0.031854 * ## drat 1 30.15 30.15 4.6073 0.041340 * ## wt 1 70.51 70.51 10.7754 0.002933 ** ## qsec 1 12.71 12.71 1.9422 0.175233 ## Residuals 26 170.13 6.54 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Une manière plus conventionnelle d’estimer les performances du modèle consiste à afficher le résidu par rapport à différentes mesures.
Vous pouvez utiliser la fonction plot() pour afficher quatre graphiques :
– Résidus vs valeurs ajustées
– Tracé QQ normal : quartile théorique vs résidus standardisés
– Echelle-Localisation : Valeurs ajustées vs Racines carrées des résidus standardisés
– Résidus vs effet de levier : effet de levier vs résidus standardisés
Vous devez ajouter le code `par(mfrow = c(2, 2))` avant `plot(fit)`. Si vous n'ajoutez pas cette ligne de code, R vous invite à appuyer sur Entrée pour afficher le graphique suivant.
par(mfrow = c(2, 2))
Code Explication
- (mfrow=c(2,2)) : renvoie une fenêtre avec les quatre graphiques côte à côte.
- Les 2 premiers ajoutent le nombre de lignes
- Le second 2 ajoute le nombre de colonnes.
- Si vous écrivez (mfrow=c(3,2)) : vous créerez une fenêtre de 3 lignes et 2 colonnes
plot(fit)
Sortie :
La formule lm() renvoie une liste contenant de nombreuses informations utiles. Vous pouvez y accéder avec l'objet fit que vous avez créé, suivi du signe $ et des informations que vous souhaitez afficher.tract.
– coefficients : `fit$coefficients`
– résidus : `fit$residuals`
– valeur ajustée : `fit$fitted.values`
Régression des facteurs dans R
Dans la dernière estimation du modèle, vous régressez mpg sur des variables continues uniquement. Il est simple d’ajouter des variables factorielles au modèle. Vous ajoutez la variable am à votre modèle. Il est important de s'assurer que la variable est un niveau de facteur et non continue.
df <- mtcars %>%
mutate(cyl = factor(cyl),
vs = factor(vs),
am = factor(am),
gear = factor(gear),
carb = factor(carb))
model <- mpg ~ .
summary(lm(model, df))
Sortie :
## ## Call: ## lm(formula = model, data = df) ## ## Residuals: ## Min 1Q Median 3Q Max ## -3.5087 -1.3584 -0.0948 0.7745 4.6251 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 23.87913 20.06582 1.190 0.2525 ## cyl6 -2.64870 3.04089 -0.871 0.3975 ## cyl8 -0.33616 7.15954 -0.047 0.9632 ## disp 0.03555 0.03190 1.114 0.2827 ## hp -0.07051 0.03943 -1.788 0.0939 . ## drat 1.18283 2.48348 0.476 0.6407 ## wt -4.52978 2.53875 -1.784 0.0946 . ## qsec 0.36784 0.93540 0.393 0.6997 ## vs1 1.93085 2.87126 0.672 0.5115 ## am1 1.21212 3.21355 0.377 0.7113 ## gear4 1.11435 3.79952 0.293 0.7733 ## gear5 2.52840 3.73636 0.677 0.5089 ## carb2 -0.97935 2.31797 -0.423 0.6787 ## carb3 2.99964 4.29355 0.699 0.4955 ## carb4 1.09142 4.44962 0.245 0.8096 ## carb6 4.47757 6.38406 0.701 0.4938 ## carb8 7.25041 8.36057 0.867 0.3995 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 2.833 on 15 degrees of freedom ## Multiple R-squared: 0.8931, Adjusted R-squared: 0.779 ## F-statistic: 7.83 on 16 and 15 DF, p-value: 0.000124
R utilise le premier niveau de facteur comme groupe de base. Vous devez comparer les coefficients de l’autre groupe avec ceux du groupe de base.
Hypothèses de la régression linéaire dans R
La méthode des moindres carrés ordinaires ne produit des coefficients et des p-valeurs fiables que lorsque cinq conditions sont remplies. Les quatre graphiques de diagnostic générés par `plot(fit)` servent précisément à vérifier ces conditions.
- Linéarité : La relation entre chaque prédicteur et y est linéaire. Vérifiez Valeur résiduelle vs valeur ajustée Tracer un graphique ; une courbe visible signifie qu’une transformation ou un terme polynomial est nécessaire.
- Autonomie: Les termes d'erreur sont non corrélés. Les données chronologiques contreviennent souvent à cette règle, ce que vous pouvez vérifier avec la fonction durbinWatsonTest() du package car.
- Homoscédasticité: La variance de l'erreur est constante pour toutes les valeurs ajustées. Une forme d'entonnoir dans le Échelle-Emplacement L'intrigue signale une violation.
- Normalité des résidus : Les erreurs suivent une distribution normale. Les points devraient se situer sur la diagonale de la matrice. QQ normal terrain.
- Pas de multicolinéarité : Les prédicteurs ne sont pas quasiment identiques. Un facteur d'inflation de la variance supérieur à 5 constitue généralement un signal d'alarme.
library(car) vif(fit) # variance inflation factors shapiro.test(residuals(fit)) # normality of residuals
Les violations n'invalident pas toujours un modèle, mais elles modifient le degré de confiance que l'on peut accorder aux valeurs p ; il est donc important de les vérifier avant de communiquer un coefficient.
Comment effectuer des prédictions avec un modèle de régression linéaire dans R
L'ajustement d'un modèle ne représente que la moitié du travail. La fonction predict() applique les coefficients ajustés aux nouvelles observations.
predict(object, newdata, interval = "none", level = 0.95) arguments: -object: The model returned by lm() -newdata: A data frame whose columns match the predictors used in the formula -interval: "none", "confidence" for the mean response, or "prediction" for a single new case -level: The confidence level, 0.95 by default
Suivez ces trois étapes.
- Constituer un tableau de données des nouveaux cas. Les noms des colonnes doivent correspondre exactement aux noms des prédicteurs dans la formule, et les niveaux des facteurs doivent correspondre aux données d'entraînement.
- Appelez predict(). Transmettez l'objet ajusté et le nouveau cadre de données.
- Ajouter un intervalle. Choisissez « confiance » lorsque vous souhaitez connaître l'incertitude autour de la réponse moyenne, et « prédiction » lorsque vous souhaitez connaître la plage de valeurs pour une voiture en particulier.
new_cars <- data.frame(wt = c(2.5, 3.2), hp = c(110, 175)) fit_final <- lm(mpg ~ wt + hp, data = mtcars) predict(fit_final, newdata = new_cars) predict(fit_final, newdata = new_cars, interval = "prediction")
Lecture du résultat. On estime qu'une voiture de 1 134 kg (2.5 000 livres) et de 110 chevaux consomme environ 9,8 l/100 km (24.1 mpg). L'intervalle de prédiction est toujours plus large que l'intervalle de confiance, car il inclut l'incertitude liée à une observation unique, en plus de celle de la courbe d'ajustement.
Deux règles garantissent la fiabilité des prédictions : ne jamais extrapoler au-delà de l’intervalle des prédicteurs d’entraînement, car la droite de régression n’est pas étayée par des données expérimentales ; et toujours effectuer les évaluations sur des données inédites pour le modèle, faute de quoi l’erreur rapportée sera trop optimiste.
Régression linéaire vs régression logistique dans R
Les analystes utilisent souvent la fonction lm() lorsque la variable dépendante n'est pas continue. Le tableau ci-dessous indique les limites de cette fonction.
| Critères | Régression Linéaire | Régression logistique |
|---|---|---|
| Variable de réponse | Continu | Binaire ou catégoriel |
| Résultat prévu | N'importe quel nombre réel | Une probabilité comprise entre 0 et 1 |
| estimation | moindres carrés ordinaires | Plausibilité maximum |
| Mesure de l'ajustement | R², RMSE | AIC, déviance, précision |
| Fonction R | lm(formule, données) | glm(formule, données, famille = « binomial ») |
Si la décision est par oui ou par non, passez à l'étape suivante. modèle linéaire généralisé au lieu de forcer une ligne droite à travers les zéros et les uns.
Régression linéaire pas à pas dans R
La dernière partie de ce tutoriel traite du régression pas à pas algorithme. Le but de cet algorithme est d'ajouter et de supprimer des candidats potentiels dans les modèles et de conserver ceux qui ont un impact significatif sur la variable dépendante. Cet algorithme est significatif lorsque l'ensemble de données contient une grande liste de prédicteurs. Vous n'avez pas besoin d'ajouter et de supprimer manuellement les variables indépendantes. La régression pas à pas est construite pour sélectionner les meilleurs candidats pour correspondre au modèle.
Voyons concrètement comment cela fonctionne. Nous utiliserons le jeu de données mtcars avec les variables continues uniquement à des fins pédagogiques. Avant de commencer l'analyse, il est recommandé d'examiner les relations entre les données à l'aide d'une matrice de corrélation. La bibliothèque GGally est une extension de ggplot2.
La bibliothèque comprend différentes fonctions pour afficher des statistiques récapitulatives telles que la corrélation et la distribution de toutes les variables d'une matrice. Nous utiliserons la fonction ggscatmat, mais vous pouvez vous référer au vignette pour plus d'informations sur la bibliothèque GGally.
La syntaxe de base de ggscatmat() est :
ggscatmat(df, columns = 1:ncol(df), corMethod = "pearson") arguments: -df: A matrix of continuous variables -columns: Pick up the columns to use in the function. By default, all columns are used -corMethod: Define the function to compute the correlation between variable. By default, the algorithm uses the Pearson formula
Vous visualisez la corrélation de toutes vos variables et déterminez lesquelles sont les meilleures candidates pour la première étape de la régression pas à pas. Il existe de fortes corrélations entre vos variables et la variable dépendante, la consommation de carburant (mpg).
library(GGally) df <- mtcars %>% select(-c(am, vs, cyl, gear, carb)) ggscatmat(df, columns = 1: ncol(df))
Sortie :
Exemple de régression pas à pas étape par étape
La sélection des variables est une étape importante de l'ajustement d'un modèle, et la régression pas à pas effectue cette recherche automatiquement. Pour estimer le nombre de choix possibles dans l'ensemble de données, vous calculez avec k est le nombre de prédicteurs. Le nombre de possibilités augmente avec le nombre de variables indépendantes. C'est pourquoi vous devez effectuer une recherche automatique.
Vous devez installer le package olsrr depuis CRAN. Le package n’est pas encore disponible dans Anaconda. Par conséquent, vous l’installez directement depuis la ligne de commande :
install.packages("olsrr")
Vous pouvez tracer tous les sous-ensembles de possibilités avec les critères d'ajustement (c'est-à-dire R-carré, R-carré ajusté, critères bayésiens). Le modèle avec les critères AIC les plus bas sera le modèle final.
library(olsrr) model <- mpg~. fit <- lm(model, df) test <- ols_all_subset(fit) plot(test)
Code Explication
- mpg ~.: Construire le modèle pour estimer
- lm(modèle, df) : Exécuter le modèle OLS
- ols_all_subset(ajustement) : Construire les graphiques avec les informations statistiques pertinentes
- tracé(test): Tracez les graphiques
Sortie :
Les modèles de régression linéaire utilisent le test t Pour estimer l'impact statistique d'une variable indépendante sur la variable dépendante, on utilise généralement un test statistique. Le seuil maximal est fixé à 10 %, et plus la valeur p est faible, plus le lien statistique est fort. La régression pas à pas repose sur ce test pour ajouter ou supprimer des prédicteurs potentiels. L'algorithme fonctionne comme suit :

- Étape 1: Régressez chaque prédicteur sur y séparément. À savoir, régressez x_1 sur y, x_2 sur y vers x_n. Conservez le p-valeur et conservez le régresseur avec une valeur de p inférieure à un seuil défini (0.1 par défaut). Les prédicteurs dont la signification est inférieure au seuil seront ajoutés au modèle final. Si aucune variable n'a une valeur p inférieure au seuil d'entrée, alors l'algorithme s'arrête et vous obtenez votre modèle final avec une constante uniquement.
- Étape 2 : utilisez le prédicteur avec la valeur p la plus basse et ajoutez séparément une variable. Vous régressez une constante, le meilleur prédicteur de la première étape et une troisième variable. Vous ajoutez au modèle pas à pas, les nouveaux prédicteurs avec une valeur inférieure au seuil d'entrée. Si aucune variable n'a une valeur p inférieure à 0.1, alors l'algorithme s'arrête et vous obtenez votre modèle final avec un seul prédicteur. Vous régressez le modèle pas à pas pour vérifier la signification des meilleurs prédicteurs de l'étape 1. S'il est supérieur au seuil de suppression, vous le conservez dans le modèle pas à pas. Sinon, vous l'excluez.
- Étape 3: Vous reproduisez l’étape 2 sur le nouveau meilleur modèle pas à pas. L'algorithme ajoute des prédicteurs au modèle pas à pas en fonction des valeurs saisies et exclut le prédicteur du modèle pas à pas s'il ne satisfait pas au seuil d'exclusion.
- L'algorithme continue jusqu'à ce qu'aucune variable ne puisse être ajoutée ou exclue.
Vous pouvez exécuter l'algorithme avec la fonction ols_stepwise() du package olsrr.
ols_stepwise(fit, pent = 0.1, prem = 0.3, details = FALSE) arguments: -fit: Model to fit. Need to use `lm()`before to run `ols_stepwise() -pent: Threshold of the p-value used to enter a variable into the stepwise model. By default, 0.1 -prem: Threshold of the p-value used to exclude a variable into the stepwise model. By default, 0.3 -details: Print the details of each step
⚠️ Remarque concernant l'emballage : Les versions récentes d'olsrr ont renommé ces fonctions. Utilisez-les. ols_step_all_possible() à la place de ols_all_subset() et ols_step_both_p() en remplacement de ols_stepwise(). Les arguments et le résultat restent inchangés.
Avant cela, nous vous montrons les étapes de l'algorithme. Vous trouverez ci-dessous un tableau avec les variables dépendantes et indépendantes :
| Variable dépendante | Variables indépendantes |
|---|---|
| mpg | disp |
| hp | |
| idiot | |
| wt | |
| qsec |
Commencer
Pour commencer, l’algorithme commence par exécuter le modèle sur chaque variable indépendante séparément. Le tableau montre la valeur p pour chaque modèle.
## [[1]] ## (Intercept) disp ## 3.576586e-21 9.380327e-10 ## ## [[2]] ## (Intercept) hp ## 6.642736e-18 1.787835e-07 ## ## [[3]] ## (Intercept) drat ## 0.1796390847 0.0000177624 ## ## [[4]] ## (Intercept) wt ## 8.241799e-19 1.293959e-10 ## ## [[5] ## (Intercept) qsec ## 0.61385436 0.01708199
Pour entrer dans le modèle, l'algorithme conserve la variable avec la valeur p la plus basse. D'après la sortie ci-dessus, c'est le poids
Étape 1
Dans un premier temps, l'algorithme exécute mpg sur wt et les autres variables indépendamment.
## [[1]] ## (Intercept) wt disp ## 4.910746e-16 7.430725e-03 6.361981e-02 ## ## [[2]] ## (Intercept) wt hp ## 2.565459e-20 1.119647e-06 1.451229e-03 ## ## [[3]] ## (Intercept) wt drat ## 2.737824e-04 1.589075e-06 3.308544e-01 ## ## [[4]] ## (Intercept) wt qsec ## 7.650466e-04 2.518948e-11 1.499883e-03
Chaque variable est une candidate potentielle pour le modèle final. Cependant, l'algorithme ne retient que la variable ayant la p-valeur la plus faible. Il s'avère que hp a une p-valeur légèrement inférieure à celle de qsec ; hp est donc intégrée au modèle final.
Étape 2
L'algorithme répète la première étape mais cette fois avec deux variables indépendantes dans le modèle final.
## [[1]] ## (Intercept) wt hp disp ## 1.161936e-16 1.330991e-03 1.097103e-02 9.285070e-01 ## ## [[2]] ## (Intercept) wt hp drat ## 5.133678e-05 3.642961e-04 1.178415e-03 1.987554e-01 ## ## [[3]] ## (Intercept) wt hp qsec ## 2.784556e-03 3.217222e-06 2.441762e-01 2.546284e-01
Aucun des candidats restants n'a une valeur p inférieure au seuil d'entrée. L'algorithme s'arrête ici, et voici le modèle final :
## ## Call: ## lm(formula = mpg ~ wt + hp, data = df) ## ## Residuals: ## Min 1Q Median 3Q Max ## -3.941 -1.600 -0.182 1.050 5.854 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 37.22727 1.59879 23.285 < 2e-16 *** ## wt -3.87783 0.63273 -6.129 1.12e-06 *** ## hp -0.03177 0.00903 -3.519 0.00145 ** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 2.593 on 29 degrees of freedom ## Multiple R-squared: 0.8268, Adjusted R-squared: 0.8148 ## F-statistic: 69.21 on 2 and 29 DF, p-value: 9.109e-12
Vous pouvez utiliser la fonction ols_stepwise() pour comparer les résultats.
stp_s <-ols_stepwise(fit, details=TRUE)
Sortie :
L'algorithme trouve une solution en deux étapes et renvoie le même résultat que la procédure détaillée ci-dessus.
Le modèle final s'explique donc par deux prédicteurs et une constante : la consommation de carburant (en miles par gallon) est inversement proportionnelle à la puissance brute et au poids.
## You are selecting variables based on p value... ## 1 variable(s) added.... ## Variable Selection Procedure ## Dependent Variable: mpg ## ## Stepwise Selection: Step 1 ## ## Variable wt Entered ## ## Model Summary ## -------------------------------------------------------------- ## R 0.868 RMSE 3.046 ## R-Squared 0.753 Coef. Var 15.161 ## Adj. R-Squared 0.745 MSE 9.277 ## Pred R-Squared 0.709 MAE 2.341 ## -------------------------------------------------------------- ## RMSE: Root Mean Square Error ## MSE: Mean Square Error ## MAE: Mean Absolute Error ## ANOVA ## -------------------------------------------------------------------- ## Sum of ## Squares DF Mean Square F Sig. ## -------------------------------------------------------------------- ## Regression 847.725 1 847.725 91.375 0.0000 ## Residual 278.322 30 9.277 ## Total 1126.047 31 ## -------------------------------------------------------------------- ## ## Parameter Estimates ## ---------------------------------------------------------------------------------------- ## model Beta Std. Error Std. Beta t Sig lower upper ## ---------------------------------------------------------------------------------------- ## (Intercept) 37.285 1.878 19.858 0.000 33.450 41.120 ## wt -5.344 0.559 -0.868 -9.559 0.000 -6.486 -4.203 ## ---------------------------------------------------------------------------------------- ## 1 variable(s) added... ## Stepwise Selection: Step 2 ## ## Variable hp Entered ## ## Model Summary ## -------------------------------------------------------------- ## R 0.909 RMSE 2.593 ## R-Squared 0.827 Coef. Var 12.909 ## Adj. R-Squared 0.815 MSE 6.726 ## Pred R-Squared 0.781 MAE 1.901 ## -------------------------------------------------------------- ## RMSE: Root Mean Square Error ## MSE: Mean Square Error ## MAE: Mean Absolute Error ## ANOVA ## -------------------------------------------------------------------- ## Sum of ## Squares DF Mean Square F Sig. ## -------------------------------------------------------------------- ## Regression 930.999 2 465.500 69.211 0.0000 ## Residual 195.048 29 6.726 ## Total 1126.047 31 ## -------------------------------------------------------------------- ## ## Parameter Estimates ## ---------------------------------------------------------------------------------------- ## model Beta Std. Error Std. Beta t Sig lower upper ## ---------------------------------------------------------------------------------------- ## (Intercept) 37.227 1.599 23.285 0.000 33.957 40.497 ## wt -3.878 0.633 -0.630 -6.129 0.000 -5.172 -2.584 ## hp -0.032 0.009 -0.361 -3.519 0.001 -0.050 -0.013 ## ---------------------------------------------------------------------------------------- ## No more variables to be added or removed.
Régression linéaire avec R : Points clés et référence des fonctions
- La régression linéaire répond à une question simple : peut-on mesurer une relation exacte entre une variable cible et un ensemble de prédicteurs ?
- La méthode des moindres carrés ordinaires trouve les paramètres qui minimisent la somme des erreurs au carré, c'est-à-dire la distance verticale entre les valeurs y prédites et les valeurs y réelles.
- Le modèle probabiliste qui inclut plus d’une variable indépendante est appelé modèle de régression multiple.
- Le but de l'algorithme de régression linéaire pas à pas est d'ajouter et de supprimer des candidats potentiels dans les modèles et de conserver ceux qui ont un impact significatif sur la variable dépendante.
- La sélection des variables est une étape importante de l'ajustement d'un modèle, et la régression pas à pas effectue cette recherche automatiquement.
Chaque fonction utilisée dans ce tutoriel est listée ci-dessous :
| Bibliothèque | Objectif | Fonction | Arguments |
|---|---|---|---|
| base | Calculer une régression linéaire | lm() | formule, données |
| base | Résumer le modèle | résumé() | s'adapter |
| base | Extraccoefficients t | lm()$coefficient | |
| base | Extracrésidus t | lm()$résidus | |
| base | Extracvaleur ajustée de t | lm()$fitted.values | |
| olsrr | Exécuter une régression pas à pas | ols_stepwise() | ajustement, pent = 0.1, prem = 0.3, détails = FALSE |
NoteN'oubliez pas de convertir les variables catégorielles en facteurs avant d'ajuster le modèle.






