Cours 8 Les régressions linéaires
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"
Les 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() 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"
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...
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
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,4450, 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
Régression linéaire multiple Exemples:
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)
Classification
La fonction kmeans() Méthodes de type « nuées dynamiques »: on suppose que les individus sont des points de R^n muni de la distance euclidienne On recherche un partitionnement des individus en classes Variance des classes minimale (classes homogènes) Variance entre classes maximale Rappel : théorème de Huygens: la somme de l ’inertie interclasse et de l ’inertie intraclasse est constante (inertie = moyenne des carrés des distances au centre de gravité)
suite Exemple en dimension 2 sur le dataframe D PROB LECT CARR OPER SYNO PFB SUITE ANAL D70 T M s E=D[,c(1,2)] cl <- kmeans(E, 4, 20) (donne 4 sous-nuages) plot(E, col = cl$cluster) (tracé pour un objet de type résultat de la fct kmeans) points(cl$centers, col = 1:4, pch = 8)
Autre exemple data(airquality); a=airquality [,3:4] cl=kmeans(a,3,20) plot(a, col = cl$cluster) ;points(cl$centers, col = 1:4, pch = 8)
le résultat de la fct kmeans est une liste contenant :les composants suivants: cluster: un vecteur d’entiers indiquant la partition ( le sous-nuage) à laquelle est affecté chaque point centers: la matrice des centres des sous- nuages withinss: The within-cluster sum of squares for each cluster. size: le nombre de points dans chaque sous- nuage
La fonction hclust() ●
La fonction cutree() ●