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.

  • (I.e. Équation fondamentale : La régression simple ajuste y = alpha + beta x, et la régression multiple étend cette même droite à k prédicteurs sous forme matricielle.
  • 🧮 Méthode d'estimation : La méthode des moindres carrés ordinaires minimise la somme des carrés des distances verticales entre les valeurs observées et les valeurs prédites.
  • Syntaxe du modèle : lm(formula, data) remplace le signe égal par un tilde, et -1 supprime l'ordonnée à l'origine.
  • (I.e. Sortie de lecture : La fonction summary() fournit les coefficients, les valeurs p et le R² ajusté, qui atteint 0.8199 sur l'exemple mtcars.
  • ???? Diagnostics: par(mfrow = c(2, 2)) suivi de plot(fit) affiche les quatre graphiques de résidus utilisés pour tester les hypothèses OLS.
  • (I.e. Sélection des variables : La régression par étapes dans olsrr ajoute et supprime des prédicteurs en fonction de la valeur p et se stabilise sur wt plus hp.

Régression linéaire multiple dans R

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 :

Régression linéaire simple dans R

  • y = Variable dépendante
  • x = Variable indépendante
  • Régression linéaire simple dans R = composante d'erreur aléatoire
  • Régression linéaire simple dans R = intercepter
  • Régression linéaire simple dans R = Coefficient de x

Considérons le tracé suivant :

Régression linéaire simple dans R

L'équation est Régression linéaire simple dans R 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 Régression linéaire simple dans R et Régression linéaire simple dans R, 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 :

nuage de points

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 Estimations des moindres carrés et Estimations des moindres carrés C'est simple. Ce tutoriel ne démontre pas les formules, il se contente de les énoncer.

Vous souhaitez estimer : Estimations des moindres carrés

Le but de la régression OLS est de minimiser l’équation suivante :

Estimations des moindres carrés

Estimations des moindres carrés est la valeur réelle et Estimations des moindres carrés est la valeur prédite.

La solution pour Estimations des moindres carrés is Estimations des moindres carrés

Notez que Estimations des moindres carrés signifie la valeur moyenne de x

La solution pour Estimations des moindres carrés is Estimations des moindres carrés

Dans R, vous pouvez utiliser les fonctions cov() et var() pour estimer Estimations des moindres carrés et vous pouvez utiliser la fonction Mean() pour estimer Estimations des moindres carrés

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 :

Régression linéaire multiple dans R

En notation matricielle, vous pouvez réécrire le modèle :

  • Régression linéaire multiple dans R

La variable dépendante y est désormais fonction de k variables indépendantes. La valeur du coefficient Régression linéaire multiple dans R détermine la contribution de la variable indépendante Régression linéaire multiple dans R et Régression linéaire multiple dans R.

Nous présentons brièvement l'hypothèse que nous avons faite sur l'erreur aléatoire Régression linéaire multiple dans R de l'OLS :

  • Moyenne égale à 0
  • Écart égal à Régression linéaire multiple dans R
  • Distribution normale
  • Les erreurs aléatoires sont indépendantes (au sens probabiliste)

Vous devez résoudre pour Régression linéaire multiple dans R, 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 :

Régression linéaire multiple dans R

avec:

  • indique le transposer de la matrice X
  • Régression linéaire multiple dans R 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

Variables continues dans R

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

Variables continues dans R

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 :

Variables continues dans R

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 :

Variables continues dans R

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.

  1. 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.
  2. Appelez predict(). Transmettez l'objet ajusté et le nouveau cadre de données.
  3. 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 :

Régression linéaire pas à pas dans R

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 Exemple de régression pas à pas étape par étape 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 :

Exemple de régression pas à pas étape par étape

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 :

Régression linéaire pas à pas dans R
Régression linéaire pas à pas dans R
  • É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.

FAQ

Le coefficient de détermination (R²) augmente systématiquement lorsqu'on ajoute un prédicteur, même inutile. Le R² ajusté, quant à lui, pénalise chaque variable supplémentaire et peut donc diminuer. Il est recommandé d'utiliser le R² ajusté pour comparer des modèles comportant un nombre différent de prédicteurs.

Le graphique des résidus en fonction de l'effet de levier met en évidence les points influents grâce à la distance de Cook. Il est important de les examiner avant de supprimer des données : une valeur aberrante peut être due à une erreur de saisie ou constituer l'observation la plus instructive de l'échantillon.

Non. R crée automatiquement les variables indicatrices dès qu'une colonne est un facteur. Le premier niveau devient le groupe de référence, et chaque autre coefficient est interprété comme une différence par rapport à cette référence.

La régression linéaire est rapide, entièrement vérifiable et difficile à surapprendre, ce qui en fait la référence standard avant que toute équipe d'IA ne se lance dans le gradient boosting ou les réseaux de neurones. Les secteurs réglementés exigent souvent cette transparence.

Oui. Les assistants IA peuvent proposer des spécifications candidates, expliquer les résultats étape par étape et signaler les problèmes de multicolinéarité. Considérez ces suggestions comme des hypothèses et confirmez-les à l'aide de vos propres diagnostics et de votre expertise du domaine.

Résumez cet article avec :