Partie 1

Régression Linéaire Multiple (Data = iris) :

# Importation des données iris
data(iris)

# Création d'un modèle de régression linéaire multiple
model <- lm(Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, data=iris)

# Résumé du modèle de régression linéaire multiple
summary(model)
## 
## Call:
## lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, 
##     data = iris)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.82816 -0.21989  0.01875  0.19709  0.84570 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.85600    0.25078   7.401 9.85e-12 ***
## Sepal.Width   0.65084    0.06665   9.765  < 2e-16 ***
## Petal.Length  0.70913    0.05672  12.502  < 2e-16 ***
## Petal.Width  -0.55648    0.12755  -4.363 2.41e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3145 on 146 degrees of freedom
## Multiple R-squared:  0.8586, Adjusted R-squared:  0.8557 
## F-statistic: 295.5 on 3 and 146 DF,  p-value: < 2.2e-16

Interprétations :

1 - Coefficients :

Intercept (Interception) : L’intercept est la valeur de la variable dépendante (Sepal.Length) lorsque toutes les autres variables indépendantes (Sepal.Width, Petal.Length et Petal.Width) sont nulles. Dans ce cas, l’interception est d’environ 1.85600. Sepal.Width (Largeur du sépale) : Lorsque la largeur du sépale augmente d’une unité, la longueur du sépale (Sepal.Length) augmente d’environ 0.65084 unités. Petal.Length (Longueur du pétale) : Lorsque la longueur du pétale augmente d’une unité, la longueur du sépale augmente d’environ 0.70913 unités. Petal.Width (Largeur du pétale) : Lorsque la largeur du pétale augmente d’une unité, la longueur du sépale diminue d’environ 0.55648 unités. Pr(>|t|) : C’est la probabilité associée au test de t pour chaque coefficient. Les valeurs très faibles (notées “< 2e-16”) indiquent que les coefficients sont statistiquement significatifs.

2 - Résidus :

Min (Minimum) : La valeur minimale des résidus est d’environ -0.82816. 1Q (1er quartile) : Le premier quartile des résidus est d’environ -0.21989. Median (Médiane) : La médiane des résidus est d’environ 0.01875. 3Q (3e quartile) : Le troisième quartile des résidus est d’environ 0.19709. Max (Maximum) : La valeur maximale des résidus est d’environ 0.84570.

3 - Residual standard error (Erreur standard résiduelle) : C’est une mesure de l’erreur résiduelle moyenne du modèle. Dans ce cas, l’erreur standard résiduelle est d’environ 0.3145.

4 - Multiple R-squared (R-carré multiple) : C’est une mesure de l’ajustement global du modèle. Il indique la proportion de la variance dans la variable dépendante qui est expliquée par les variables indépendantes. Ici, R-carré multiple est d’environ 0.8586, ce qui signifie que 85.86 % de la variance de la longueur du sépale est expliquée par les variables indépendantes.

5 - Adjusted R-squared (R-carré ajusté) : C’est une version ajustée de l’R-carré multiple qui tient compte du nombre de prédicteurs dans le modèle. Il est légèrement inférieur à l’R-carré multiple, à environ 0.8557.

6 - F-statistic (Statistique F) : Il s’agit d’un test statistique qui évalue la significativité globale du modèle. Plus la statistique F est élevée, plus le modèle est significatif. Ici, la statistique F est de 295.5, avec un p-value très proche de zéro, ce qui indique que le modèle est globalement significatif.

En résumé, ce modèle de régression linéaire multiple semble être un bon ajustement pour les données “iris”, avec des coefficients significatifs pour toutes les variables indépendantes. Le modèle explique une grande partie de la variance dans la longueur du sépale, comme en témoigne le R-carré multiple élevé.

# Tracer un nuage de points avec la variable Sepal.Length en abscisse et la variable Petal.Length en ordonnée
plot(iris$Sepal.Length, iris$Petal.Length)

  1. Diagramme à barres : permet de visualiser la distribution d’une variable qualitative.
# Tracer un diagramme à barres de la variable Species du jeu de données iris
barplot(table(iris$Species))

  1. Heatmap : permet de visualiser l’intensité de la relation entre les variables continues.
# Tracer une heatmap pour visualiser l'intensité de la relation entre les variables continues des données iris
heatmap(cor(iris[,1:4]))

Vérification des hypothèses d’une régression linéaire :

  1. Linéarité : la relation entre les variables doit être linéaire.
# Vérifier la linéarité en utilisant le test de la droite de Henry
# install.package("car")
library(car)
linearHypothesis(model, c('Petal.Length=0', 'Petal.Width=0'), test='F')
## Linear hypothesis test
## 
## Hypothesis:
## Petal.Length = 0
## Petal.Width = 0
## 
## Model 1: restricted model
## Model 2: Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width
## 
##   Res.Df     RSS Df Sum of Sq      F    Pr(>F)    
## 1    148 100.756                                  
## 2    146  14.445  2    86.311 436.17 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Le test de la droite de Henry peut être utilisé pour vérifier la linéarité de la relation entre les variables explicatives et la variable cible. Si la relation est linéaire, le test devrait être significatif.

# Vérifier la linéarité entre la variable cible Sepal.Length et les variables explicatives du modèle
plot(model, 1)

Interprétations :

  • Modèle 1 (restricted model) : Dans ce modèle, nous avons restreint les coefficients des variables Petal.Length et Petal.Width à zéro, ce qui signifie que nous considérons un modèle où ces deux variables n’ont aucun effet sur la variable dépendante Sepal.Length.

  • Modèle 2 (Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width) : Il s’agit du modèle complet que vous avez précédemment ajusté, qui inclut toutes les variables indépendantes.

Le test d’hypothèse est effectué pour déterminer si l’ajout des variables Petal.Length et Petal.Width au modèle (Modèle 2) est statistiquement significatif par rapport au modèle plus restreint (Modèle 1) où ces variables sont fixées à zéro.

A - Res.Df (degrés de liberté des résidus) : Il s’agit du nombre de degrés de liberté associé aux résidus dans chaque modèle. Dans le modèle 1, il y a 148 degrés de liberté, tandis que dans le modèle 2, il y en a 146.

B - RSS (somme des carrés résiduels) : C’est la somme des carrés des résidus, une mesure de l’erreur résiduelle dans chaque modèle. Le RSS est plus faible dans le modèle 2 que dans le modèle 1, ce qui est attendu car le modèle 2 est plus complexe.

C - Df (nombre de degrés de liberté) : C’est la différence entre les degrés de liberté des résidus dans les deux modèles. Ici, c’est 2, car nous comparons deux modèles.

D - Sum of Sq (somme des carrés) : C’est la différence entre les sommes des carrés résiduels entre les deux modèles. Il s’agit de la somme des carrés résiduels du modèle 1 soustraite de celle du modèle 2, ce qui donne une mesure de la variation expliquée par les variables Petal.Length et Petal.Width.

E - F-statistic (statistique F) : C’est une statistique qui évalue la significativité de la différence entre les deux modèles. Plus la statistique F est élevée, plus il est probable que les variables ajoutées (Petal.Length et Petal.Width) apportent une contribution significative à l’ajustement du modèle.

F - Pr(>F) (p-valeur du test F) : La p-valeur est très faible (notée “< 2.2e-16”), ce qui signifie que la différence entre les deux modèles est statistiquement significative. En d’autres termes, l’ajout des variables Petal.Length et Petal.Width au modèle améliore de manière significative l’ajustement global du modèle par rapport au modèle plus restreint.

En conclusion, les résultats du test d’hypothèse suggèrent que les variables Petal.Length et Petal.Width sont statistiquement significatives et apportent une contribution significative à l’ajustement du modèle de régression linéaire pour prédire la longueur du sépale (Sepal.Length) par rapport au modèle plus restreint.

  1. Indépendance : les résidus doivent être indépendants les uns des autres.
# Vérifier l'indépendance en utilisant le test de Durbin-Watson
# install.packages("lmtest")
library(lmtest)
dwtest(model)
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 2.0604, p-value = 0.6013
## alternative hypothesis: true autocorrelation is greater than 0
# Le test de Durbin-Watson est un test statistique qui évalue la présence d'autocorrélation positive (corrélation entre les résidus successifs) dans les résidus d'un modèle de régression. Il est souvent utilisé pour vérifier si les résidus d'un modèle de régression linéaire présentent une autocorrélation, ce qui peut indiquer une violation de l'indépendance des résidus.

# Le test de Durbin-Watson peut être utilisé pour vérifier l'indépendance des résidus. Si les résidus sont indépendants, le test devrait être non significatif.

# Vérifier l'indépendance des résidus en utilisant un graphique Q-Q plot
qqnorm(model$resid)
qqline(model$resid)

Interprétations :

Les résultats du test sont les suivants :

  • DW (Durbin-Watson statistic) = 2.0604 : La statistique de Durbin-Watson est une valeur qui varie entre 0 et 4. Une valeur proche de 2 indique généralement qu’il n’y a pas d’autocorrélation dans les résidus. Dans votre cas, la statistique DW est de 2.0604, ce qui est très proche de 2, suggérant une absence d’autocorrélation positive.

  • p-value = 0.6013 : La p-valeur est utilisée pour déterminer la significativité statistique de la statistique de Durbin-Watson. Dans ce cas, la p-valeur est relativement élevée (0.6013), ce qui signifie que vous ne disposez pas de suffisamment de preuves statistiques pour rejeter l’hypothèse nulle. L’hypothèse nulle ici est que l’autocorrélation réelle est égale à zéro.

  • Hypothèse alternative : L’hypothèse alternative est que l’autocorrélation réelle est plus grande que zéro. Cependant, étant donné que la p-valeur est supérieure à un niveau de signification commun (comme 0,05), vous ne pouvez pas rejeter l’hypothèse nulle. Cela signifie que vous ne disposez pas de suffisamment de preuves pour affirmer qu’il y a une autocorrélation positive significative dans les résidus.

En résumé, les résultats du test de Durbin-Watson indiquent qu’il n’y a pas suffisamment de preuves pour conclure à la présence d’autocorrélation positive dans les résidus du modèle. Cela suggère que les résidus sont indépendants les uns des autres, ce qui est une condition souhaitable dans la régression linéaire.

  1. Homoscédasticité : les résidus doivent avoir une variance constante.
# Vérifier l'homoscédasticité en utilisant le test de Breusch-Pagan
bptest(model)
## 
##  studentized Breusch-Pagan test
## 
## data:  model
## BP = 6.9605, df = 3, p-value = 0.07317
# Le test de Breusch-Pagan, également appelé le test de Breusch-Pagan-Godfrey, est un test utilisé pour évaluer l'hétéroscédasticité dans les résidus d'un modèle de régression. L'hétéroscédasticité signifie que la variance des résidus n'est pas constante et peut varier de manière systématique en fonction des valeurs des variables indépendantes.

# Le test de Breusch-Pagan peut être utilisé pour vérifier l'homoscédasticité des résidus. Si les résidus sont homoscédastiques, le test devrait être non significatif.

# Vérifier l'homoscédasticité des résidus en utilisant un graphique résidus vs ajustements
plot(model$fitted.values, model$resid)

Interprétations :

Les résultats du test sont les suivants :

  • BP (Breusch-Pagan statistic) = 6.9605 : C’est la statistique du test de Breusch-Pagan. Elle mesure la relation entre la variance des résidus et les variables indépendantes. Une valeur plus élevée indique une plus grande probabilité d’hétéroscédasticité.

  • df (degrés de liberté) = 3 : Il s’agit du nombre de degrés de liberté associé à la statistique du test.

  • p-value = 0.07317 : La p-valeur est utilisée pour déterminer la significativité statistique de la statistique du test. Dans ce cas, la p-valeur est de 0.07317.

Pour interpréter ces résultats :

Si la p-valeur est inférieure à un niveau de signification donné (par exemple, 0.05), on peut rejeter l’hypothèse nulle et conclure qu’il y a de l’hétéroscédasticité significative dans les résidus.

Si la p-valeur est supérieure au niveau de signification, on ne peut pas rejeter l’hypothèse nulle, ce qui signifie qu’il n’y a pas suffisamment de preuves pour conclure à la présence d’hétéroscédasticité significative.

Dans notre cas, la p-valeur est de 0.07317, ce qui est légèrement supérieur à un niveau de signification commun, tel que 0.05. Par conséquent, nous ne disposons pas de suffisamment de preuves pour conclure à la présence d’hétéroscédasticité significative dans les résidus. Cependant, il est important de noter que la décision dépend du niveau de signification choisi. Si votre niveau de signification est plus élevé, nous pourrions conclure différemment.

  1. Normalité : les résidus doivent suivre une distribution normale.
# Vérifier la normalité en utilisant le test de Shapiro-Wilk
shapiro.test(model$resid)
## 
##  Shapiro-Wilk normality test
## 
## data:  model$resid
## W = 0.99559, p-value = 0.9349
# Le test de normalité de Shapiro-Wilk est un test statistique utilisé pour évaluer si un échantillon de données suit une distribution normale (gaussienne). L'hypothèse nulle (H0) du test est que les données proviennent d'une population normalement distribuée.

# Vérifier la normalité des résidus en utilisant un histogramme et un graphique Q-Q plot
par(mfrow=c(2,2))
hist(model$resid)
qqnorm(model$resid)
qqline(model$resid)

Interprétations :

Les résultats du test sont les suivants :

  • W (statistique de Shapiro-Wilk) = 0.99559 : C’est la statistique du test de Shapiro-Wilk. Elle mesure à quel point les données s’écartent de la distribution normale. La statistique W est comprise entre 0 et 1, où une valeur plus proche de 1 suggère que les données sont proches d’une distribution normale.

  • p-value = 0.9349 : La p-valeur est utilisée pour déterminer la significativité statistique de la statistique de Shapiro-Wilk. Dans ce cas, la p-valeur est de 0.9349.

Pour interpréter ces résultats :

Si la p-valeur est inférieure à un niveau de signification donné (par exemple, 0.05), on peut rejeter l’hypothèse nulle et conclure que les données ne suivent pas une distribution normale.

Si la p-valeur est supérieure au niveau de signification, on ne peut pas rejeter l’hypothèse nulle, ce qui signifie que les données ne fournissent pas suffisamment de preuves pour conclure qu’elles ne suivent pas une distribution normale.

Dans notre cas, la p-valeur est de 0.9349, ce qui est bien supérieur à un niveau de signification commun, tel que 0.05. Par conséquent, nous ne disposons pas de suffisamment de preuves pour conclure que les résidus du modèle ne suivent pas une distribution normale. Cela suggère que les résidus sont compatibles avec une distribution normale.

Cependant, il est important de noter que le test de normalité de Shapiro-Wilk peut être sensible à la taille de l’échantillon. Pour des échantillons de grande taille, même de petites déviations de la normalité peuvent donner des p-valeurs élevées.

Points aberrants :

# Vérifier la présence de points aberrants en utilisant le graphique des résidus studentisés
# install.packages("MASS")
library(MASS)
studres = studres(model)
plot(studres, pch=20)
abline(h=c(-3,3), col='red')

Commentaire :

Il n’y a pas de point(s) aberrant(s) dans notre modèle.

Le VIF (Variance Inflation Factor) :

Le VIF (Variance Inflation Factor) est un indicateur utilisé pour évaluer le degré de corrélation entre les variables explicatives dans la régression linéaire multiple. Un VIF élevé (généralement supérieur à 10) indique une forte corrélation et peut être indésirable car il peut conduire à une instabilité des coefficients de régression et à une diminution de la fiabilité des résultats.

# Calculer le VIF pour chaque variable explicative
library(car)
vif(model)
##  Sepal.Width Petal.Length  Petal.Width 
##     1.270815    15.097572    14.234335

commentaires :

1 - Sepal.Width : Le VIF pour la variable Sepal.Width est d’environ 1.270815. Un VIF de 1 indique qu’il n’y a pas de multicollinéarité avec cette variable. Un VIF légèrement supérieur à 1 (comme dans ce cas) est généralement acceptable.

2 - Petal.Length : Le VIF pour la variable Petal.Length est d’environ 15.097572. Un VIF aussi élevé suggère une forte multicollinéarité avec d’autres variables du modèle. Cela peut rendre difficile l’interprétation des effets individuels de cette variable sur la variable dépendante.

3 - Petal.Width : Le VIF pour la variable Petal.Width est d’environ 14.234335, ce qui est similaire au VIF de Petal.Length. Il indique également une forte multicollinéarité avec d’autres variables.

Visualiser la régression linéaire multiple avec la bibliothèque GGally :

La bibliothèque GGally est très utile pour visualiser les relations entre différentes variables dans un ensemble de données. Voici comment visualiser la régression linéaire multiple entre les variables explicatives et la variable cible en utilisant la bibliothèque GGally :

# Visualiser la relation entre les variables explicatives et la variable cible avec GGally
# install.packages("GGally")
library(GGally)

ggpairs(iris,
        columns = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species"), 
        ggplot2::aes(color = Species),
        upper = list(continuous = wrap("cor", size = 8, hjust = 0.5, vjust = 0.5)))

Évaluer l’importance des variables explicatives :

Toutes les variables explicatives ne contribuent pas nécessairement de manière égale à la variable cible. Voici comment évaluer l’importance relative des variables explicatives du modèle :

# Évaluer l'importance relative des variables explicatives
# install.packages("caret")
library(caret)

varImp(model)
##                Overall
## Sepal.Width   9.765380
## Petal.Length 12.502483
## Petal.Width   4.362929

Commentaire :

Cela fournit un tableau montrant l’importance relative de chaque variable explicative pour la variable cible. Les variables explicatives avec une importance relative plus élevée sont considérées comme plus importantes pour le modèle.

Évaluer le modèle avec une validation croisée :

# Évaluer le modèle avec une validation croisée à 10 plis
library(caret)

set.seed(123)
cv_results <- trainControl(method = "cv", number = 10)
lm_model <- train(Sepal.Length ~ ., data = iris, method = "lm", trControl = cv_results)
lm_model$results
##   intercept      RMSE  Rsquared       MAE     RMSESD RsquaredSD      MAESD
## 1      TRUE 0.3058639 0.8675807 0.2513058 0.05110388 0.03029434 0.04969757

Cela fournit les résultats de la validation croisée, montrant la performance du modèle sur des données qui n’ont pas été incluses dans l’ajustement initial. Les mesures d’évaluation telles que la racine carrée de l’erreur quadratique moyenne (RMSE) et le coefficient de détermination (R²) peuvent être utilisées pour évaluer la performance du modèle.

Évaluer l’influence des observations sur le modèle :

Certains points de données peuvent avoir un impact disproportionné sur les résultats du modèle de régression linéaire multiple. Voici comment évaluer l’influence de chaque point de données sur le modèle :

# Évaluer l'influence des observations sur le modèle
library(car)

influenceIndexPlot(model)

Partie 2

Utiliser une régression linéaire régularisée :

Une régression linéaire régularisée est une technique de modélisation qui permet de réduire la variance dans les prédictions du modèle en imposant des pénalités sur les coefficients de régression les plus importants. Cela peut aider à éviter le surajustement ou l’overfitting du modèle. Voici comment utiliser une régression linéaire régularisée (Lasso) sur notre jeu de données :

# Utiliser une régression linéaire régularisée
# install.packages("glmnet")
library(glmnet)

x <- model.matrix(Sepal.Length ~ ., data = iris)[,-1]
y <- iris$Sepal.Length

set.seed(123)
cv_results <- cv.glmnet(x, y, alpha = 1, nfolds = 10, type.measure = "mse")
plot(cv_results)

Cela utilise la bibliothèque glmnet pour ajuster un modèle de régression linéaire régularisée à l’aide d’une validation croisée à 10 plis. Le graphique montre les valeurs d’erreur moyenne en fonction du paramètre de pénalité lambda. La valeur optimale de lambda peut être identifiée à partir du point ayant la valeur minimale d’erreur.

Utiliser une analyse en composantes principales (PCA) :

Une analyse en composantes principales (PCA) est une technique d’analyse multivariée qui permet d’identifier les principaux facteurs qui expliquent la variance dans les données. Cela peut aider à réduire la dimensionnalité des données et à identifier les variables explicatives les plus importantes pour la variable cible. Voici comment utiliser une PCA sur notre jeu de données :

# install.packages("data.table")
library(data.table)
iris_pca <- data.table(iris)

# Exclure la colonne "Species" de la PCA
library(FactoMineR)
pca_results <- PCA(iris_pca[,-5], scale.unit = TRUE, ncp = 4, graph = FALSE)
pca_results$eig
##        eigenvalue percentage of variance cumulative percentage of variance
## comp 1 2.91849782             72.9624454                          72.96245
## comp 2 0.91403047             22.8507618                          95.81321
## comp 3 0.14675688              3.6689219                          99.48213
## comp 4 0.02071484              0.5178709                         100.00000

Interprétations :

Ce tableau présente les résultats d’une analyse en composantes principales (ACP) qui vise à réduire la dimensionnalité des données en identifiant les composantes principales qui capturent la variance dans les données. Voici comment interpréter ces résultats :

  • eigenvalue (valeur propre) : Les valeurs propres mesurent la variance expliquée par chaque composante principale. Dans votre tableau, chaque composante est associée à une valeur propre. Par exemple, la première composante (comp 1) a une valeur propre d’environ 2.9185. Cette valeur propre indique la quantité de variance dans les données qui est expliquée par cette composante.

  • percentage of variance (pourcentage de variance) : Il s’agit du pourcentage de la variance totale des données expliqué par chaque composante principale. Par exemple, la première composante (comp 1) explique environ 72.96 % de la variance totale. Cela signifie que cette composante seule capture la majeure partie de la variance des données.

  • cumulative percentage of variance (pourcentage cumulatif de variance) : Cette colonne montre le pourcentage cumulatif de variance expliqué par les composantes principales jusqu’à la composante actuelle. Par exemple, après avoir inclus la première composante, vous avez capturé environ 72.96 % de la variance totale des données. En ajoutant la deuxième composante, vous capturez environ 95.81 % de la variance totale. Cela permet de voir comment l’ajout de chaque composante contribue à l’explication cumulative de la variance.

En résumé, ces résultats nous indiquent que la première composante principale (comp 1) capture la majeure partie de la variance des données (72.96 %), ce qui en fait la composante la plus importante. Les composantes suivantes (comp 2, comp 3, comp 4) expliquent des pourcentages décroissants de la variance totale. En utilisant ces composantes principales, vous pouvez réduire la dimensionnalité de vos données tout en conservant la plupart de la variance, ce qui peut faciliter l’analyse et la visualisation des données.