Cours 7 Les régressions linéaires
Rappel théorique Existe-t-il une loi permettant de prévoir la résistance à la traction Y en fonction de la teneur en carbone X ?
Est-il possible de trouver une fonction numérique f telle que : Y = f ( X ) ? S'il existe une fonction f telle que Y = f ( X ), alors on dira que f est un modèle du phénomène étudié. X est la variable explicative. Y est la variable expliquée.
Les points du nuage sont presque alignés. Il est donc raisonnable de chercher une fonction f qui soit une fonction affine. Autrement dit, on cherche une fonction f, un modèle tel que : Y = f ( X ) = a X + b
Si xi est une variable explicative fixée par l'expérimentateur, il mesure pour cette valeur la résistance à la traction de la tige et trouve yi. yi est la valeur observée de la variable expliquée. yi= a xi + b est la valeur théorique ou la valeur expliquée par le modèle ei = yi -yi est le résidu du modèle. | ei | est l'erreur du modèle yi =yi + ei
Yi est la composante prévisible par le modèle. ei est la composante imprévisible due aux erreurs de mesure, ou à des facteurs négligés par le modèle. On peut choisir un modèle y = a x + b rendant minimum la somme des carrés des résidus (SCR) Le modèle obtenu par cette méthode, s'appelle l'ajustement affine de Y en X par la méthode des moindres carrés. Le modèle affine Y = a X + b d'ajustement de Y en X par la méthode des moindres carrés s'obtient en prenant :
a = cov(X,Y)/s^2(X) et en écrivant que la droite d'équation Y = a X + b passe par le point moyen G (m(X),m(Y)) du nuage : b = m(Y)- a *m(X)
Changement de variable Evolution du coût de la construction : essai d'ajustement à un modèle exponentiel Considérons des observations ( xi, yi ) relatives à deux variables X et Y, et le nuage de points correspondant : Par exemple, l'évolution de l'indice du coût de la construction selon l'INSEE (base 100 en 1953)
X = rang de l'année Y = indice
Essayons d'expliquer la variation de l'indice Y, en fonction du rang X de l'année par un modèle affine : Y = f ( x ) = a X + b en ajustant une droite à ce nuage de points par la méthode des moindres carrés. On obtient l'équation de la droite d'ajustement de Y en X : Y = X + 161
Calculons les valeurs théoriques prévues par le modèle, et les résidus : Nuage des résidus
Le nuage des résidus a une forme curviligne qui indique que le modèle affine n'est pas adéquat pour représenter le phénomène. On procède alors par changement de variable.On pose : V = log Y Si on procède à un ajustement affine de V en X : log Y = V = c X + d Alors : Y = k^aX avec k = 10d et a = 10c et on obtient Y comme fonction exponentielle de X.
Les points du nuage semblent assez bien alignés. La droite d'ajustement de V en X a pour équation : V = X
résultat De : V = log Y = X on tire : Y = ( ) * ( )^X On prendra cette relation comme modèle du phénomène considéré.
On aurait pu procéder à un autre changement de variable en posant : U = log X V = log Y En procédant à un ajustement affine de V en U : log Y = V = c X + d = c log X + d On obtient : Y = k Xc où k = 10d et Y apparaît comme une fonction puissance de X.
La comparaison du modèle exponentiel : Y = ( ) ( )^X et du modèle par une fonction puissance : Y = ( ) X^ montre que le modèle exponentiel est mieux adapté. D'autres changements de variables peuvent être utilisés, pour se ramener à un ajustement affine en fonction du modèle que l'on veut ajuster aux données.
Qualité d'un ajustement SCT = ( yi - m(Y) )² est la somme des carrés totale, somme des carrés des écarts à la moyenne des valeurs observées. SCA = (yi-m(Y) )² est la somme des carrés des écarts des prévisions à la moyenne. SCR = ( yi - yi)² est la somme des carrés des résidus.
SCT = SCA + SCR En divisant cette égalité par n on obtient ² ( Y ) = (1/n) ( yi - m(Y) )² = (1/n)SCT est la variance des valeurs observées ou variance totale. VE = (1/n) (yi - m(y))² = SCA est la variance expliquée par l'ajustement ou variance des prévisions yi. VR = (1/n) ( yi -yi )² est la variance résiduelle. SCA = R * SCT = * n où n est le nombre d'observations. VE = R V ( Y ) = = a Cov ( X, Y ) où : a = Cov ( X, Y ) / s² ( X ) est le coefficient directeur de la droite d'ajustement de Y en X. SCR = SCT - SCA = ( 1 - R ) s² ( Y ) * n VR = s² ( Y ) - VE = ( 1 - R ) s² ( Y )
On a : ² ( Y ) = VE + VT L'ajustement est d'autant meilleur que SCR est proche de 0. SCR = 0 si et seulement si les points du nuage sont alignés. Si SCR = 0, SCT = SCA L'ajustement est d'autant meilleur que : R= SCA/SCT est proche de 1 R se nomme le coefficient de détermination. R est compris entre 0 et 1 R se calcule facilement par la formule : R =Cov(X,Y)^2/ ² ( X ) ² ( Y )
Les analyses statistiques avec R Modèles linéaires,lm() Modèles linéaires généralisés,glm() Analyse de variance, aov()
Généralités L ’argument principal est une formule du type: réponse ~ prédicteur exemples: data(I=InsectSprays) aov(sqrt(count) ~ spray,data=I) équivalent à : aov(sqrt(I$count) ~ I$spray) ou à aov(sqrt(I[,1]) ~ I[,2])
Les formules y~model ou y est la réponse analysée et model est un ensemble de termes pour lesquels les paramètres sont estimés attention: les symboles arithmétiques ont ici une signification particulière exemples: y~x1+x2 désigne le modèle y=ax1+bx2+c y~I(x1+x2) désigne le modèle y=a(x1+x2)+c y~poly(x,2) désigne le modèle y=ax^2+bx+c y~x1+x2 désigne le modèle y=ax1+bx2+c y~x1-1 désigne le modèle y=ax1
Les fonctions génériques Les objets qui contiennent les résultats d ’une analyse, ont un attribut particulier, la classe. Certaines fonctions, dites génériques, permettent d ’extraire des informations d ’un objet résultat exemples: summary()qui a une action différente sur un objet de classe lm(), aov(),...
apropos("^summary") [1] "summary.aov" "summary.aovlist" "summary.glm" [4] "summary.infl" "summary.lm" "summary.manova" [7] "summary.mlm" "summary.stepfun" "summaryRprof" [10] "summary" "summary.connection" "summary.data.frame" [13] "summary.Date" "summary.default" "summary.factor" [16] "summary.matrix" "summary.POSIXct" "summary.POSIXlt" [19] "summary.table"
Des fonctions génériques plot() print()résumé succint summary()résumé détaillé df.residualsnbre de ddl résiduels coefcoefficients estimés residualsrésidus deviancedéviance fittedvaleurs ajustées par le modèle logLiklogarithme de la vraisemblance...
Un objet-résultat, produit par aov(), lm()…. est généralement une liste,bien qu ’il ne soit pas affiché comme tel, dont les éléments peuvent être affiché par la fonction names() ou attributes() ex names(res.reg)pour une régréssion linéaire "coefficients" "residuals" "effects" "rank" "fitted.values" "assign" "qr" "df.residual" "xlevels" "call" "terms" "model"
Régréssion linéaire simple Sur des données fictives: x=1:100 x=sample(x,30,replace=TRUE) x [1] [26] y=3+7*x+rnorm(30,0,100) Y [1] [8] [15]
plot(x,y)
res.reg=lm(y~x); Call: lm(formula = y ~ x) Coefficients: (Intercept) x Droite de régression: y=6,71 *x
De l'objet de classe lm res.reg, on peut extraire les principaux résultats de la régréssion estimée,à savoir Les coefficients de la régréssion coef(res.lin) ou res.lin$coef Le vecteur des résidus residuals(res.reg) La déviance résiduelle deviance(res.reg) La formule formula(res.reg) Quatre graphiques utiles pour le diagnostic plot(res.reg) Valeurs prédites par le modèle fitted(res.lin)
plot(x,y); abline(res.reg)
summary(res.reg) Residuals: Min 1Q Median 3Q Max Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) x e-11 Residual standard error: on 28 degrees of freedom Multiple R-Squared: , Adjusted R- squared: 0.78
Plus sophistiquée... La croissance d ’une bactérie (par jour), modélisé par N=N0 e^kt t=2:12; N=c(55,90,135,245,403,665,1100,1810,3000,4 450,7350); Le modèle est le suivant;
t=c(2:12); N=c(55,90,135,245,403,665,1100,1810, 3000,4450,7350) T=data.frame(t,N,y=log(N));T; > T t N y t N y …..
Calcul de moyenne et écart-type apply(T,2,mean); t N y apply(T,2,sd); t N y
plot(T$t,T$N)
plot(T$t,T$y)
droite de regression ll=lm(y~t,data=T);ll; Call: lm(formula = y ~ t, data = T) Coefficients: (Intercept) t
abline(ll);
summary(ll) Call: lm(formula = y ~ t, data = T) Residuals: Min 1Q Median 3Q Max Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) e-14 *** t e-15 *** --- Signif. codes: 0 `***' `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
summary(ll) suite Residual standard error: on 9 degrees of freedom Multiple R-Squared: , Adjusted R-squared: F-statistic: 1.329e+04 on 1 and 9 DF, p-value: 1.413e-15
Analyses supplémentaires à partir d ’un objet add1() : teste successivement tous les termes qui peuvent être ajoutés à un modèle drop1():teste successivement tous les termes qui peuvent être enlevés à un modèle anova(): calcule une table d ’analyse de variance ou de deviance pour un ou plusieurs modèles predict(): calcule les valeurs prédites pour des nouvelles données update(): réajuste un modèle...
Les tests statistiques les test du chi-deux
La fonction chisq.test(x,y,logical,p) Premier exemple: on lance un dé 300 fois et on obtient le résultat suivant: x=c(43, 49, 56, 45, 66, 41) prob=rep(1/6,6) chisq.test(x,p=prob) Chi-squared test for given probabilities data: x X-squared = 8.96, df = 5, p-value =
Second exemple sur un tableau de contingence Exemple d ’un tableau donnant la cécité en fonction du sexe: tab=matrix(c(442,514,38,6),nrow=2,byrow=TRUE) colnames(tab)=c("homme","femme") rownames(tab)=c("voyant","aveugle") homme femme voyant aveugle 38 6
X2=chisq.test(tab,correct=FALSE) On teste s ’il y a une relation entre sexe et cécité (l ’hypothèse par défaut est celle d ’indépendance) Pearson's Chi-squared test data: tab X-squared = , df = 1, p-value = 1.894e-07
attributes(x2) $names [1] "statistic" "parameter" "p.value" "method" "data.name" "observed" [7] "expected" "residuals" $class [1] "htest » par exemple:
x2$expected homme femme voyant aveugle valeurs attendues sous hypothèse d ’indépendance x2$residuals homme femme voyant aveugle sum(x2$residuals^2) la somme des carrés des résidus est la valeur du chi-deux
Soit le tableau de contingence suivant: roux blond brun bleu marron le test du chi-deux d ’indépendance s ’effectue ainsi: chisq.test(m)
Pearson's Chi-squared test data: m X-squared = , df = 2, p-value = on teste l ’hypothèse nulle suivante « H0:il y a indépendance entre la couleur des yeux et celle des cheveux »
Test sur une moyenne: prop.test() Pour comparer deux ou plusieurs proportions sur des échantillons de grande taille: prop.test(x, n, p = NULL,alternative = c("two.sided", "less", "greater"), conf.level = 0.95, correct = TRUE)
D'autres tests sous R var.test() Il s'agit d'un test F de comparaison des variances de deux échantillons indépendants provenant de populations normales cor.test Test de significativité du coefficient de correlation calculé sur 2 vecteurs
suite ks.test:test pour deteminer si un échantillon provient d'une population dont la loi est connue, ou bien test pour déterminer si deux échantillons ont la même distribution