Data = PrixSurface (d’un appartement)

On régresse la variable “Prix” (expliquée) sur la variable “Surface” (explicative)

y = Prix de vente de la maison x = Surface au sol de la maison

# install.packages("FactoMineR")
library(FactoMineR)
library(DAAG)
data(houseprices)
show(houseprices)
##    area bedrooms sale.price
## 9   694        4      192.0
## 10  905        4      215.0
## 11  802        4      215.0
## 12 1366        4      274.0
## 13  716        4      112.7
## 14  963        4      185.0
## 15  821        4      212.0
## 16  714        4      220.0
## 17 1018        4      276.0
## 18  887        4      260.0
## 19  790        4      221.5
## 20  696        5      255.0
## 21  771        5      260.0
## 22 1006        5      293.0
## 23 1191        6      375.0
pricereg <- lm(sale.price ~ area, data = houseprices)
pricereg
## 
## Call:
## lm(formula = sale.price ~ area, data = houseprices)
## 
## Coefficients:
## (Intercept)         area  
##     70.7504       0.1878
summary(pricereg$coef)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.1878 17.8284 35.4691 35.4691 53.1098 70.7504

On a donc l’équation de la droite de régression : sale.price= 70.75 = 0.188 area + constante , que l’on peut tracer avec le nuage de points :

# Charger la bibliothèque ggplot2
library(ggplot2)

# Créer un nuage de points (scatter plot) avec ggplot2
ggplot(data = houseprices, aes(x = area, y = sale.price)) +
  geom_point(color = "blue") +  # Points bleus pour les "vraies" valeurs
  geom_smooth(method = "lm", formula = y ~ x, color = "red", se = FALSE) +
  labs(x = "Surface", y = "Prix") +
  theme_minimal()

Ou tout simplement on peut tracer la courbe en utilisant l’une parmi les commandes les plus usées sous R :

plot(sale.price ~ area, data=houseprices)
abline(pricereg, col = "red") 

summary(pricereg)
## 
## Call:
## lm(formula = sale.price ~ area, data = houseprices)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -92.499 -19.302   2.406  28.019  80.607 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  70.7504    60.3477   1.172   0.2621  
## area          0.1878     0.0664   2.828   0.0142 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 48.18 on 13 degrees of freedom
## Multiple R-squared:  0.3809, Adjusted R-squared:  0.3333 
## F-statistic: 7.997 on 1 and 13 DF,  p-value: 0.01425

Interprétations du “summary” du modèle :

1 - Résumé du Modèle:

Le modèle de régression linéaire simple est résumé avec un appel à lm(). Il régresse la variable “sale.price” sur la variable “area” dans le jeu de données “houseprices”. Residuals (Résidus):

Les résidus mesurent la différence entre les valeurs observées et les valeurs prédites par le modèle. Le minimum des résidus est -92.499, le 1er quartile (1Q) est -19.302, la médiane est 2.406, le 3e quartile (3Q) est 28.019, et le maximum est 80.607.

2 - Coefficients (Coefficients):

L’intercept (constante) est estimé à 70.7504 avec une erreur standard de 60.3477. Le t-value est de 1.172, et la p-valeur est de 0.2621. Cela signifie que la constante n’est pas significative à un seuil de signification commun (alpha = 0.05). Le coefficient pour “area” est estimé à 0.1878 avec une erreur standard de 0.0664. Le t-value est de 2.828, et la p-valeur est de 0.0142. Cela signifie que la variable “area” est significative à un seuil de signification de 0.05. Il y a une relation positive significative entre “area” et “sale.price”. Pour chaque augmentation d’une unité de “area”, “sale.price” augmente en moyenne de 0.1878 unité.

3 - Residual Standard Error (Erreur standard des résidus):

L’erreur standard des résidus est de 48.18. Cela représente la dispersion des points par rapport à la droite de régression. Plus l’erreur standard est faible, meilleur est l’ajustement du modèle.

4 - R-squared (Coefficient de détermination):

Le coefficient de détermination multiple R-squared est de 0.3809. Cela signifie que 38.09% de la variation de “sale.price” est expliquée par la variation de “area”. C’est une mesure de l’ajustement du modèle aux données.

5 - Adjusted R-squared (R-carré ajusté):

L’ajustement R-squared est de 0.3333. Il tient compte du nombre de prédicteurs dans le modèle et est généralement légèrement inférieur au R-squared.

6 - F-statistic (Statistique F):

La statistique F est de 7.997, avec 1 et 13 degrés de liberté. Elle teste l’ensemble du modèle par rapport à un modèle nul (aucune relation linéaire) et a une p-valeur de 0.01425. Cela signifie que le modèle dans son ensemble est significatif à un seuil de 0.05.

En résumé, cette régression linéaire simple montre que la variable “area” a un effet significatif sur la variable “sale.price”. Le modèle explique environ 38.09% de la variation de “sale.price”, et le modèle global est significatif.

Représentations graphiques

par(mfrow = c(2,2))
par(mar=c(2, 2, 2, 2))
plot(pricereg)

Vérification des hypothèses de la régression Linéaire :

Hypothèse de linéarité :

# Scatter plot
plot(houseprices$area, houseprices$price, main = "Scatter Plot", xlab = "Surface", ylab = "Prix")

# Test de Linéarité avec un test F (ANOVA)
anova(pricereg)
## Analysis of Variance Table
## 
## Response: sale.price
##           Df Sum Sq Mean Sq F value  Pr(>F)  
## area       1  18566 18566.0  7.9974 0.01425 *
## Residuals 13  30179  2321.5                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# knitr::kable(anova(pricereg))   ## sous forme d'une table

Commentaire :

La p-valeur de 0.01425 est inférieure à un seuil de signification commun de 0.05, ce qui indique que la variable “area” a un effet significatif sur la variable “sale.price”. En d’autres termes, Anova affirme que notre modèle est linéaire.

Autrement fait :

# Installer le package 'car' si ce n'est pas déjà fait
# install.packages("car")

# Charger le package 'car'
library(car)

# Spécifier l'hypothèse nulle (H0 : Le coefficient de 'area' est égal à zéro, donc pas de relation linéaire)
H0 <- "area = 0"

# Effectuer le test d'hypothèse
linearHypothesis(pricereg, H0)
## Linear hypothesis test
## 
## Hypothesis:
## area = 0
## 
## Model 1: restricted model
## Model 2: sale.price ~ area
## 
##   Res.Df   RSS Df Sum of Sq      F  Pr(>F)  
## 1     14 48745                              
## 2     13 30179  1     18566 7.9974 0.01425 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Commentaire :

En interprétant les résultats, la p-valeur (0.01425) est inférieure à un seuil de signification commun de 0.05. Par conséquent, vous pouvez rejeter l’hypothèse nulle (H0) et conclure qu’il y a suffisamment de preuves statistiques pour affirmer qu’il existe une relation linéaire significative entre la variable “area” et la variable “sale.price”. En d’autres termes, la variable “area” a un effet significatif sur le prix “sale.price”.

Hypothèse de normalité des résidus (Normality of residuals):

Normalité des résidus (Normality of Residuals) : Les résidus doivent suivre une distribution normale.

# Histogram of Residuals
hist(resid(pricereg), main = "Histogram of Residuals")

# Test de Normalité des Résidus (Shapiro-Wilk)
shapiro.test(resid(pricereg))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(pricereg)
## W = 0.98222, p-value = 0.9824

Interprétations :

La façon de lire ce résultat est la suivante :

  • L’hypothèse nulle (H0) du test de Shapiro-Wilk est que les données suivent une distribution normale.
  • L’hypothèse alternative (H1) est que les données ne suivent pas une distribution normale.

Dans notre cas, la p-valeur est très élevée (0.9824), ce qui signifie qu’il n’y a pas suffisamment de preuves pour rejeter l’hypothèse nulle. En d’autres termes, les données ne fournissent pas de preuves significatives pour affirmer qu’elles ne suivent pas une distribution normale. Par conséquent, nous pouvons conclure que les résidus de notre modèle de régression linéaire semblent suivre approximativement une distribution normale.

Cela suggère que l’hypothèse de normalité des résidus est satisfaite, ce qui est une condition importante pour l’application de certaines méthodes statistiques et pour l’interprétation des coefficients de la régression linéaire.

Hypothèse d’homoscédasticité (Homoscedasticity) :

Les résidus doivent avoir une variance constante à travers toutes les valeurs de la variable indépendante (dans notre cas, x = area).

# Residuals vs Fitted Values Plot
plot(pricereg, which = 1)

# Installer le package 'lmtest' si ce n'est pas déjà fait
# install.packages("lmtest")

# Charger le package 'lmtest'
library(lmtest)

# Effectuer le test de Breusch-Pagan
bptest(pricereg)
## 
##  studentized Breusch-Pagan test
## 
## data:  pricereg
## BP = 0.628, df = 1, p-value = 0.4281

Interprétations :

Pour interpréter ces résultats :

  • L’hypothèse nulle (H0) du test de Breusch-Pagan est que la variance des résidus est constante, ce qui signifie qu’il y a homoscédasticité.

  • L’hypothèse alternative (H1) est que la variance des résidus n’est pas constante, ce qui indiquerait de l’hétéroscédasticité.

Dans notre cas, la p-valeur est de 0.4281, ce qui est supérieur à un seuil de signification commun de 0.05. Par conséquent, nous ne pouvons pas rejeter l’hypothèse nulle. Cela suggère qu’il n’y a pas suffisamment de preuves statistiques pour affirmer que la variance des résidus n’est pas constante. En d’autres termes, il n’y a pas de preuves d’hétéroscédasticité dans notre modèle.

En conclusion, les résultats du test de Breusch-Pagan indiquent que l’homoscédasticité est respectée, ce qui signifie que la variance des résidus est constante à travers toutes les valeurs de la variable indépendante, ce qui est une condition importante pour l’application de certaines méthodes statistiques.

Hypothèse d’indépendance des résidus et test de Durbin-Watson :

Le test de Durbin-Watson est utilisé pour vérifier l’indépendance des résidus. Une valeur proche de 2 indique l’indépendance.

# Test de Durbin-Watson
library(lmtest)
dwtest(pricereg)
## 
##  Durbin-Watson test
## 
## data:  pricereg
## DW = 0.47299, p-value = 0.0001342
## alternative hypothesis: true autocorrelation is greater than 0

Interprétations :

Pour interpréter ces résultats :

  • L’hypothèse nulle (H0) du test de Durbin-Watson est que les résidus ne présentent pas d’autocorrélation, c’est-à-dire qu’il n’y a pas de corrélation significative entre les résidus consécutifs.

  • L’hypothèse alternative (H1) est que les résidus présentent une autocorrélation positive, ce qui signifierait que les résidus sont corrélés de manière positive.

Dans notre cas, la p-valeur est de 0.0001342, ce qui est très faible. Cela signifie que la p-valeur est inférieure à un seuil de signification commun de 0.05. Par conséquent, nous pouvons rejeter l’hypothèse nulle. Cela suggère qu’il y a suffisamment de preuves statistiques pour affirmer que les résidus présentent une autocorrélation positive, c’est-à-dire qu’ils sont corrélés positivement les uns avec les autres.

L’autocorrélation positive dans les résidus peut indiquer que le modèle de régression linéaire simple n’est pas approprié pour nos données, ou que certaines variables pertinentes n’ont pas été incluses dans le modèle. Il est important de prendre en compte l’autocorrélation dans l’analyse des résidus pour s’assurer que les estimations des coefficients et les tests d’hypothèses sont valides. nous pourrions envisager d’explorer des modèles qui prennent en compte cette autocorrélation, comme les modèles de séries temporelles ou les modèles de régression avec des termes ARIMA.

# Ajuster le modèle LM initial
pricereg2 <- lm(sale.price ~ area, data = houseprices)

# Obtenir les résidus du modèle LM initial
residus <- resid(pricereg2)

# Installer le package 'forecast' si ce n'est pas déjà fait
# install.packages("forecast")

# Charger le package 'forecast'
library(forecast)

# Tracer l'autocorrélation partielle
acf(resid(pricereg2))

# Ajuster un modèle AR pour les résidus
modele_ar <- arima(residus, order = c(2, 0, 0))

# Afficher le résumé du modèle AR
summary(modele_ar)
## 
## Call:
## arima(x = residus, order = c(2, 0, 0))
## 
## Coefficients:
##          ar1      ar2  intercept
##       0.8709  -0.1305    10.1628
## s.e.  0.2736   0.2745    26.8502
## 
## sigma^2 estimated as 892:  log likelihood = -72.7,  aic = 153.4
## 
## Training set error measures:
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 0.9914317 29.86655 22.78487 -36.62707 126.8677 0.8430358
##                    ACF1
## Training set 0.06880789

Interprétations :

1 - Call (Appel) : Nous avons ajusté un modèle ARIMA avec les paramètres suivants : order = c(2, 0, 0). Cela signifie qu’il s’agit d’un modèle autorégressif d’ordre 2 (AR(2)) sans différenciation intégrée (d = 0) et sans composante de moyenne mobile (MA).

2 - Coefficients (Coefficients) : Les coefficients du modèle ARIMA sont les suivants :

  • ar1 : Le coefficient du premier terme autorégressif (AR(1)) est d’environ 0.8709.
  • ar2 : Le coefficient du deuxième terme autorégressif (AR(2)) est d’environ -0.1305. intercept : L’intercept est d’environ 10.1628.

3 - Écart type estimé (sigma^2) : L’écart type estimé des résidus est d’environ 892.

4 - Log-likelihood (log vraisemblance) : La log-vraisemblance est d’environ -72.7, ce qui est une mesure de l’ajustement global du modèle aux données.

5 - AIC (Critère d’information bayésien) : L’AIC est d’environ 153.4. Il s’agit d’une mesure de la qualité du modèle, et il est souvent utilisé pour la comparaison de modèles, avec des valeurs inférieures indiquant un meilleur ajustement.

6 - Mesures d’erreur sur l’ensemble d’entraînement (Training set error measures) :

Ces mesures évaluent la performance du modèle sur l’ensemble d’entraînement : * ME (Mean Error) : La moyenne des erreurs. * RMSE (Root Mean Squared Error) : L’écart quadratique moyen des erreurs. * MAE (Mean Absolute Error) : La moyenne des valeurs absolues des erreurs. * MPE (Mean Percentage Error) : La moyenne des erreurs en pourcentage. * MAPE (Mean Absolute Percentage Error) : La moyenne des valeurs absolues des erreurs en pourcentage. * MASE (Mean Absolute Scaled Error) : L’erreur moyenne absolue mise à l’échelle. * ACF1 (Autocorrelation of Residuals) : L’autocorrélation des résidus.

Interprétation :

Le modèle ARIMA avec un terme autorégressif d’ordre 2 (AR(2)) et sans différenciation intégrée (d = 0) a été ajusté pour modéliser l’autocorrélation des résidus. Les coefficients du modèle ARIMA montrent la relation entre les résidus à différents retards. Les mesures d’erreur sur l’ensemble d’entraînement évaluent la performance du modèle.

L’AIC est un peu plus élevé par rapport au modèle précédent, mais cela peut être dû à la complexité accrue du modèle ARIMA. Le faible ACF1 suggère que les résidus sont beaucoup moins autocorrélés par rapport au modèle précédent, ce qui est une amélioration.

Perspective personnelle :

En se penchant sur ces résultats, malgré du fait que le modèle ARIMA nous a aidé à amplement ajuster l’indépendance des résidus en minimisant l’effet d’insignificativité (La non dépendance des résidus). Cependant, L’insértion d’une transformation logarithmique ou polynomiale ne va pas totalement extirper la non-indépendance des résidus dû à la nature du modèle.