Chargement et affichage des données
Importer les données, les afficher et les explorer avant toute modélisation.
Importe un fichier CSV dont les colonnes sont séparées par des point-virgules (format français).
# Changer le répertoire si nécessaire : Fichier > Changer le répertoire courant mesdonnees <- read.csv2("exemple_1.csv")
Pour de petits jeux de données, on peut créer directement les vecteurs x et y.
surface_xi <- c(28, 50, 55, 60, 105, 106, 117, 190, 196) prix_yi <- c(132, 280, 268, 320, 375, 570, 670, 790, 800) mesdonnees <- data.frame(surface_xi = surface_xi, prix_yi = prix_yi)
Afficher le tableau complet, les premières/dernières lignes, et un résumé statistique.
mesdonnees # affiche tout le tableau head(mesdonnees) # 6 premières lignes tail(mesdonnees, 4) # 4 dernières lignes names(mesdonnees) # noms des colonnes summary(mesdonnees) # résumé statistique
Représenter le nuage de points (xi, yi) pour visualiser la liaison entre les variables.
plot(mesdonnees)
Régression linéaire simple
Estimer les coefficients, tester leur significativité, construire des intervalles de confiance et faire des prévisions.
Calcule les estimateurs des moindres carrés â et b̂ du modèle Y = ax + b + ε.
reg <- lm(prix_yi ~ surface_xi, data = mesdonnees)
Affiche â, b̂, leurs écarts-types, les statistiques de Student, les p-valeurs et R².
summary(reg)
Obtenir â et b̂ séparément depuis l'objet de régression.
coef(reg) # tous les coefficients : b̂ et â coef(reg)[1] # b̂ (Intercept) coef(reg)[2] # â (pente)
Affiche les sommes des carrés SCreg, SCres et les degrés de liberté.
Permet d'obtenir SCres = Σei².
aov(reg) # Pour plus de chiffres significatifs : options("digits" = 12) aov(reg)
Tableau ANOVA complet avec la statistique F pour tester H₀ : a = 0.
Équivalent au test de Student au carré.
anova(reg)
Obtenir la valeur critique t_{1-α/2}(n-2) pour un test de Student à n-2 degrés de liberté.
# Pour α = 0.05 et n = 9 (ddl = n-2 = 7) : qt(0.975, 7) # Résultat : 2.365 (valeur critique bilatérale)
Obtenir la valeur critique F(α, k, n-k-1) pour un test de Fisher.
# Pour α = 0.05, k = 1 variable, n-k-1 = 7 ddl : qf(0.95, 1, 7) # Résultat : 5.59 (valeur critique)
Calcule les IC à 95 % pour les paramètres a (pente) et b (ordonnée à l'origine).
confint(reg, level = 0.95) # 2.5 % 97.5 % # (Intercept) -52.39 200.98 # surface_xi 2.80 4.99
Pour chaque xi, calcule l'IC pour la valeur moyenne prédite E(Yx) = ax + b. L'intervalle s'élargit quand x s'éloigne de x̄.
# IC pour tous les points du jeu de données : conf <- predict.lm(reg, interval = "confidence") # IC pour une valeur particulière x = 120 : predict(reg, data.frame(surface_xi = c(120)), interval = "conf") # fit lwr upr # 1 542.17 476.55 607.79
Plus large que l'IC de confiance : contient une observation future Y avec probabilité 1-α.
# Intervalle de prédiction pour tous les points : pred <- predict.lm(reg, interval = "prediction") # Intervalle de prédiction pour x = 120 : predict.lm(reg, data.frame(surface_xi = c(120)), interval = "pred") # fit lwr upr # 1 542.17 344.52 739.82
Superposer les courbes des intervalles de confiance (bleu) et de prédiction (vert) au nuage de points.
plot(mesdonnees) # Intervalles de confiance (bleu, pointillés) : lines(mesdonnees$surface_xi, conf[,2], lwd=2, col="blue", lty=2) lines(mesdonnees$surface_xi, conf[,3], lwd=2, col="blue", lty=2) # Intervalles de prédiction (vert, tirets) : lines(mesdonnees$surface_xi, pred[,2], lwd=2, col="green", lty=6) lines(mesdonnees$surface_xi, pred[,3], lwd=2, col="green", lty=6)
Régression linéaire multiple
Extension au cas de k variables explicatives : y = Xβ + ε. Estimation, tests et intervalles de confiance.
Estime β̂ = (X'X)⁻¹X'y pour le modèle y = β₀ + β₁x₁ + β₂x₂ + ε.
mesdonnees <- read.csv2("exemple_2.csv") reg <- lm(Production ~ Travail + Capital, data = mesdonnees) summary(reg)
IC à 95 % pour chaque βⱼ. Utilise la loi de Student avec n-k-1 degrés de liberté.
confint(reg, level = 0.95)
Retourne σ̂² (X'X)⁻¹. La diagonale donne Var(β̂ⱼ) ; les autres termes donnent Cov(β̂ⱼ, β̂ₗ).
vcov(reg)
Décompose SCtot = SCreg + SCres avec les degrés de liberté k et n-k-1. Teste H₀ : β₁ = … = βk = 0.
anova(reg) # Puis le résumé global : summary(reg)
Valeur critique F(α, k, n-k-1) pour le test de Fisher global en régression multiple.
# Pour α = 0.05, k = 2 var., n-k-1 = 6 ddl : qf(0.95, 2, 6) # Valeur critique pour le test de Student : # Pour n-k-1 = 6 ddl : qt(0.975, 6) # donne t_{0.025}(6) = 2.447
Sélection des variables
Choisir les variables explicatives les plus pertinentes par méthodes ascendante ou pas-à-pas.
Visualiser simultanément toutes les relations entre variables avant de construire le modèle.
mesdonnees <- read.csv2("exemple_2.csv") pairs(mesdonnees)
Teste quelles variables à ajouter au modèle courant en minimisant l'AIC et en regardant Pr(>F). Ajouter celle avec le Pr(>F) le plus faible (si < α).
mesdonnees <- read.csv2("ozone.txt") # Étape 1 : modèle vide, chercher 1ère variable add1(lm(maxO3 ~ 1, data=mesdonnees), maxO3 ~ T9+T12+T15+Ne9+Ne12+Ne15+maxO3v, test="F") # Étape 2 : après ajout de T12 add1(lm(maxO3 ~ T12, data=mesdonnees), maxO3 ~ T9+T12+T15+Ne9+Ne12+Ne15+maxO3v, test="F") # Continuer jusqu'à ce qu'aucun Pr(>F) < seuil
Algorithme automatique : ajoute et retire des variables à chaque étape jusqu'à convergence. Minimise l'AIC.
step(lm(maxO3 ~ 1, data=mesdonnees), maxO3 ~ T9+T12+T15+Ne9+Ne12+Ne15+maxO3v, direction="both")
Diagnostics du modèle
Vérifier les hypothèses du modèle : homoscédasticité, normalité des résidus, absence de valeurs aberrantes.
Si le modèle est adéquat (homoscédasticité), les résidus eᵢ = yᵢ - ŷᵢ doivent être répartis uniformément dans une bande horizontale.
plot(reg$residuals) # Ou avec les résidus studentisés (bornes ±2) : plot(rstudent(reg))
Vérifie la normalité des erreurs : les points doivent être alignés sur la droite gaussienne. Ajouter qqline pour la droite de référence.
qqnorm(reg$residuals) qqline(reg$residuals) # Pour afficher les labels d'identification : coords <- qqnorm(reg$residuals) qqline(reg$residuals) text(coords$x, coords$y, labels=mesdonnees$obs, pos=4, cex=0.7)
Représenter les droites de régression par modalité d'une variable qualitative (ex. type de cidre).
library(ggplot2) # install.packages("ggplot2") si nécessaire ggplot(mesdonnees, aes(y=S.Sucree, x=S.Amere, col=Type)) + geom_point() + geom_smooth(method="lm", se=FALSE) # se=TRUE pour afficher les IC autour des droites
Analyse de la variance (ANOVA)
Tester l'égalité des moyennes entre groupes définis par une ou plusieurs variables qualitatives.
Teste H₀ : μ₁ = μ₂ = … = μI (égalité des moyennes par groupe). Variable réponse quantitative, facteur qualitatif.
mesdonnees <- read.csv2("notes.csv") reg <- lm(Note ~ Examinateur, data=mesdonnees) anova(reg) # Valeur critique F(α, I-1, n-I) : qf(0.95, 2, 18) # ici I=3 examinateurs, n=21
Teste l'effet de chaque facteur et leur interaction. L'opérateur * inclut les deux effets principaux et l'interaction.
mesdonnees <- read.csv2("ble.txt") # Modèle avec interaction (A*B = A + B + A:B) : reg <- lm(rendement ~ phyto * variete, data=mesdonnees) anova(reg) # Modèle sans interaction : reg2 <- lm(rendement ~ phyto + variete, data=mesdonnees) anova(reg2)
* pour facteur A × facteur B (effets + interaction) ; + pour effets additifs sans interaction.Modèle mixte : variable quantitative Y expliquée par une variable quantitative X et un facteur qualitatif. Permet de tester l'égalité des pentes et des ordonnées à l'origine.
mesdonnees <- read.csv2("cidre.csv") # Modèle avec pentes différentes (interaction) : reg <- lm(S.Sucree ~ S.Amere * Type, data=mesdonnees) anova(reg) # Modèle avec pentes égales (sans interaction) : reg2 <- lm(S.Sucree ~ S.Amere + Type, data=mesdonnees) anova(reg2) # Modèle avec seul effet de S.Amere : reg3 <- lm(S.Sucree ~ S.Amere, data=mesdonnees) anova(reg3)
Affiche les coefficients estimés (effets de chaque modalité), les statistiques de Student associées, et R².
summary(reg)
summary(reg) — régression simple
Call:
lm(formula = prix_yi ~ surface_xi, data = mesdonnees)
Residuals:
Min 1Q Median 3Q Max
-119.07 -46.68 15.90 37.16 109.34
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 74.2961 53.5743 1.387 0.2074
surface_xi 3.8989 0.4632 8.417 5.36e-05 ***
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1
Residual standard error: 78.85 on 7 degrees of freedom
Multiple R-squared: 0.9102, Adjusted R-squared: 0.8974
F-statistic: 70.84 on 1 and 7 DF, p-value: 5.358e-05
*** p < 0.001 — résultat très hautement significatif : risque de se tromper < 0.1 %. On rejette H₀ avec une très grande certitude.** p < 0.01 — résultat hautement significatif : risque < 1 %. On rejette H₀ avec une grande certitude.* p < 0.05 — résultat significatif : risque < 5 %. Seuil classique en statistique — on rejette H₀.. p < 0.10 — résultat marginalement significatif : tendance, mais insuffisant au seuil 5 %. p ≥ 0.10 — résultat non significatif : on ne peut pas rejeter H₀, le coefficient pourrait être nul.anova(reg)
Analysis of Variance Table
Response: prix_yi
Df Sum Sq Mean Sq F value Pr(>F)
surface_xi 1 440381 440381 70.839 5.358e-05 ***
Residuals 7 43517 6217
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05
confint(reg, level=0.95)
2.5 % 97.5 % (Intercept) -52.386951 200.979174 surface_xi 2.803539 4.994333
summary(reg) — régression multiple
Call:
lm(formula = Production ~ Travail + Capital, data = mesdonnees)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -437.710 57.933 -7.556 0.000283 ***
Travail 0.336 0.090 3.748 0.009627 **
Capital 0.410 0.196 2.092 0.081584 .
Residual standard error: 23.07 on 6 degrees of freedom
Multiple R-squared: 0.9784, Adjusted R-squared: 0.9712
F-statistic: 135.9 on 2 and 6 DF, p-value: 4.384e-06
*** p < 0.001 — très hautement significatif (β₀ ici)** p < 0.01 — hautement significatif (Travail ici). p < 0.10 — marginalement significatif (Capital ici) : tendance à la limite du seuil 5 % p ≥ 0.10 — non significatif : envisager de retirer la variable du modèleanova(reg) — régression multiple
Analysis of Variance Table
Response: Production
Df Sum Sq Mean Sq F value Pr(>F)
Travail 1 142369 142369 267.369 1.29e-06 ***
Capital 1 2326 2326 4.376 0.08158 .
Residuals 6 3194 532
---
SCtot = 142369 + 2326 + 3194 = 147889