INTRODUCTION AU LOGICIEL R - 3. Tests statistiques et graphes
Transcription
INTRODUCTION AU LOGICIEL R - 3. Tests statistiques et graphes
Plan Tests statistiques Graphes Graphes avancés INTRODUCTION AU LOGICIEL R 3. Tests statistiques et graphes Anne Dubois, Julie Bertrand, Emmanuelle Comets [email protected] INSERM UMR738 E. Comets (UMR738) Introduction à R - Novembre 2009 1 / 65 Plan Tests statistiques Graphes Graphes avancés Plan Tests statistiques Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Graphes Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Graphes avancés Librairies graphiques avancées ggplot2 E. Comets (UMR738) Introduction à R - Novembre 2009 2 / 65 Plan Tests statistiques Graphes Graphes avancés Remise en jambe : un exercice 1 Simulez deux vecteurs vec1 et vec2 contenant 20 réalisations d’une loi normale de moyennes respectivement 70 et 25, et de variances 10 et 4 2 Simulez un deuxième vecteur vec3 contenant 20 réalisations d’une loi uniforme sur l’intervalle [0; 5] transformez vec3 pour qu’il contienne des valeurs entières 3 Créez un dataframe contenant les 3 vecteurs dans 3 colonnes, et nommez-les "poids", "age" et "douleur" respectivement 4 Calculez les moyennes et les variances des deux variables continues E. Comets (UMR738) Introduction à R - Novembre 2009 3 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Plan Tests statistiques Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Graphes Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Graphes avancés Librairies graphiques avancées ggplot2 E. Comets (UMR738) Introduction à R - Novembre 2009 4 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Test de la moyenne Les tests usuels pour une moyenne ou une comparaison de moyenne sont : • le test t pour des variables normales : t.test(x) ou t.test(x,y) • le test de Wilcoxon, non-paramétrique, pour des petits échantillons ou des variables non normales : wilcox.test(x) ou wilcox.test(x,y) Pour un test apparié on utilise l’option "paired=T" > > > > x <- rnorm(50,0,1) y <- rnorm(50,-0.27,0.4) w <- x + rnorm(50,0,0.1) t.test(x,y) Pour ces deux tests on peut spécifier l’hypothèse alternative en utilisant l’argument mu=. E. Comets (UMR738) Introduction à R - Novembre 2009 5 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Application du test t Comparaison de moyennes entre 2 groupes : > t.test(x,y) Welch Two Sample t-test t = 2.6064, df = 63.131, p-value = 0.01140 alternative hypothesis: true difference in means != 0 95 percent confidence interval: 0.0967519 0.7325692 Comparaison de moyennes sur données appariées : > t.test(x,w,paired=T) Paired t-test t = 0.246, df = 49, p-value = 0.8067 95 percent confidence interval: -0.02543856 0.03253569 Il est possible d’obtenir un intervalle de confiance sur l’estimation de la moyenne en spécifiant conf.int=T, et l’option alternative ("two.sided", "less", "greater") permet de spécifier l’hypothèse alternative. E. Comets (UMR738) Introduction à R - Novembre 2009 6 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Test de Wilcoxon Pour une seule variable ou deux variables appariées, wilcox.test produit un test des signes de Wilcoxon (sur x ou sur (x-y)). Pour deux variables non appariées, le test correspond au test de Mann-Whitney aussi appelé test des rangs de Wilcoxon. L’option exact=T est utilisée pour demander un calcul exact de la p-value. E. Comets (UMR738) Introduction à R - Novembre 2009 7 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Utilisation avec un dataframe On utilise la base energy contenue dans la librairie ISwR : > library(ISwR) > attach(energy) On teste une différence de dépense énergétique entre obèses et non-obèses : > t.test(expend~stature) qui revient à tester : > t.test(expend[stature=="lean"],expend[stature=="obese"]) Cela correspond en SAS à : proc ttest data=energy; class stature; var expend; run; E. Comets (UMR738) Introduction à R - Novembre 2009 8 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Exercice 1 En reprenant la base que vous avez créée en début de cours, testez l’égalité des moyennes entre les sujets ayant un grade de douleur inférieur ou supérieur à 2. 2 En utilisant le test de Wilcoxon, comparez les moyennes dans les 2 échantillons pour les cas suivants A=c(0,1,2), B=c(100,150,5000) A=c(0,1,2), B=c(100,150,5000,6000) A=c(0,1,2,3,4), B=c(100,150,5000,6000) Qu’en concluez-vous? 3 Faites la même chose qu’en 2 en utilisant un test t. E. Comets (UMR738) Introduction à R - Novembre 2009 9 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Comparaison des variances (1) Par défaut, on suppose que la variance entre les 2 groupes est différente (ce qui n’est pas le cas en SAS). Il est préférable d’effectuer un test d’homogénéité des variances : > var.test(expend~stature) F test to compare two variances F = 0.7844, num df = 12, denom df = 8, p-value = 0.6797 alt. hypothesis: true ratio of variances is not equal to 1 On ne rejette pas l’hypothèse d’égalité des variances : > t.test(expend~stature,var.equal=T) E. Comets (UMR738) Introduction à R - Novembre 2009 10 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Comparaison des variances (2) Le test de Fisher porte stricto sensu sur des variables normales. D’autres tests d’homogénéité des variances sont disponibles sous R. En particulier le test de Bartlett est plus robuste en cas d’écarts à la normalité > bartlett.test(expend~stature) Bartlett test of homogeneity of variances data: expend by stature Bartlett’s K-squared = 0.1362, df = 1, p-value = 0.712 Il existe également des tests non-paramétriques (Fligner-Killeen, Ansari-Bradley et Mood) d’homogénéité de la variance. E. Comets (UMR738) Introduction à R - Novembre 2009 11 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Récupération des résultats On peut stocker le résultat du test dans un objet : test <- t.test(x,y) > names(test) [1] "statistic" "parameter" "p.value" "conf.int" "estimate" [6] "null.value" "alternative" "method" "data.name" On peut aussi utiliser attributes(test). Si on souhaite conserver la statistique de test, l’IC 95% et la p-value : > res <- c(test$statistic,test$conf.int,test$p.value) > names(res) <- c("stat","Lim0.025","Lim0.975","p.value") > res stat Lim0.025 Lim0.975 p.value 2.60640690 0.09675190 0.73256922 0.01140137 E. Comets (UMR738) Introduction à R - Novembre 2009 12 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Corrélations La syntaxe pour calculer la corrélation et la tester est : > cor.test(x,y,method="methode") où methode peut être : • Pearson (par défaut) • Spearman (non paramétrique) • Kendall (non paramétrique) > cor.test(x,y,method="spearman") Spearman’s rank correlation rho ... S = 15460, p-value = 0.07103 alternative hypothesis: true rho is not equal to 0 sample estimates: rho 0.2576230 Par défaut retire les valeurs manquantes. E. Comets (UMR738) Introduction à R - Novembre 2009 13 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Analyse de variance (1) Pour comparer simultanément les moyennes de plusieurs variables, on pratique une ANOVA. On utilise le jeu de données red.cell.folate. On souhaite tester une différente en folates selon le type de ventilation (N2 O+O2 pendant 24h, N2 O+O2 pendant l’opération, seulement O2 pendant 24h) : > attach(red.cell.folate) > anova(lm(folate~ventilation)) Analysis of Variance Table Response: folate Df Sum Sq Mean Sq F value Pr(>F) ventilation 2 15516 7758 3.7113 0.04359 * Residuals 19 39716 2090 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ ... E. Comets (UMR738) Introduction à R - Novembre 2009 14 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Analyse de variance (2) Comme une différence significative entre les 3 types de ventilation a été mise en évidence, on peut faire un test 2 à 2 entre les types de ventilation : > pairwise.t.test(folate,ventilation,p.adj="fdr") data: folate and ventilation N2O+O2,24h N2O+O2,op N2O+O2,op 0.042 O2,24h 0.232 0.408 Note: ce test inclut une correction pour tests multiples. Autre possibilité : TukeyHSD (sur un objet de type aov) E. Comets (UMR738) Introduction à R - Novembre 2009 15 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution ANOVA non paramétrique Le test de Kruskal Wallis (kruskal.test) est la forme non paramétrique de l’ANOVA : > kruskal.test(folate~ventilation) Kruskal-Wallis rank sum test data: folate by ventilation Kruskal-Wallis chi-squared = 4.1852, df = 2, p-value = 0.1234 E. Comets (UMR738) Introduction à R - Novembre 2009 16 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Exercice 1 La base airquality est un jeu de données de R contenant des mesures de qualité de l’air réalisées sur plusieurs mois. visualiser la base 2 Comparer la concentration d’ozone entre les mois de mai et d’août. en utilisant un test t en utilisant un test non paramétrique 3 La concentration d’ozone est-elle comparable pour les différents mois (utiliser un test global)? avec une anova (utiliser as.factor() et lm) en utilisant un test non paramétrique E. Comets (UMR738) Introduction à R - Novembre 2009 17 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Variables discrètes : test du χ2 (1) Cas classique : on cherche à savoir si le fait de présenter une caractéristique particulière (exemple : le fait de fumer) a une influence sur la réponse à un traitement. On a donc deux vecteurs avec pour chaque sujet, 1 s’il fume et 0 sinon, et sa réponse au traitement considéré. Le tableau de contingence se construit avec la commande table(x,y) : > fumeur <- rbinom(50,1,0.4) > reponse <- rbinom(50,1,0.4) > table(fumeur,reponse) reponse fumeur 0 1 0 18 16 1 11 5 E. Comets (UMR738) Introduction à R - Novembre 2009 18 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Test du χ2 (2) Pour effectuer le test d’une relation entre le fait de fumer et la réponse au traitement, on utilise la fonction chisq.test. Deux syntaxes sont possibles : • forme vectorielle chisq.test(x,y) > chisq.test(fumeur,reponse) Pearson’s Chi-squared test with Yates’ continuity correction data: fumeur and reponse X-squared = 0.5616, df = 1, p-value = 0.4536 • forme matricielle chisq.test(tab), en utilisant le tableau de contingence tab > chisq.test(table(fumeur,reponse)) ... E. Comets (UMR738) Introduction à R - Novembre 2009 19 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Généralisation à plusieurs classes On utilise les mêmes commandes si les variables ont plusieurs classes : > malade <- rbinom(15,2,0.3) > trait <- rbinom(15,2,0.3) > table(malade,trait) trait malade 0 1 2 0 2 3 2 1 2 3 1 2 1 0 1 > chisq.test(malade,trait) Pearson’s Chi-squared test data: malade and trait X-squared = 1.8214, df = 4, p-value = 0.7686 Warning message: l’approximation du Chi-2 est peut-être incorrecte in: chisq.test(malade, trait) E. Comets (UMR738) Introduction à R - Novembre 2009 20 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Variables discrètes (2) La fonction CrossTable, contenue dans le package gmodels, permet d’obtenir des tables de contigence identiques à la Proc Freq de SAS : > library(gmodels) > CrossTable(fumeur,reponse,prop.t=F,prop.chisq=F) | reponse fumeur | 0 | 1 | Row Total | -------------|-----------|-----------|-----------| 0 | 18 | 16 | 34 | | 0.529 | 0.471 | 0.680 | | 0.621 | 0.762 | | -------------|-----------|-----------|-----------| 1 | 11 | 5 | 16 | | 0.688 | 0.312 | 0.320 | | 0.379 | 0.238 | | -------------|-----------|-----------|-----------| Column Total | 29 | 21 | 50 | | 0.580 | 0.420 | | -------------|-----------|-----------|-----------| E. Comets (UMR738) Introduction à R - Novembre 2009 21 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Tests de comparaison d’une proportion (1) On suppose un taux de succès p = O /N où O est le nombre de succès et N est le nombre de patients. Dans le cas de plusieurs groupes, on suppose que l’on a les variables Succes et Groupe. • comparaison de p à une référence : prop.test(O,N,p0) ou binom.test(O,N,p0) > prop.test(220,500,0.5) 1-sample proportions test with continuity correction data: 220 out of 500, null probability 0.5 X-squared = 6.962, df = 1, p-value = 0.008326 alternative hypothesis: true p is not equal to 0.5 95 percent confidence interval: 0.3961300 0.4848059 sample estimates: p 0.44 E. Comets (UMR738) Introduction à R - Novembre 2009 22 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Tests de comparaison d’une proportion (1) On suppose un taux de succès p = O /N où O est le nombre de succès et N est le nombre de patients. Dans le cas de plusieurs groupes, on suppose que l’on a les variables Succes et Groupe. • comparaison de deux proportions : prop.test(c(O1,O2),c(N1,N2)) fisher.test(matrix(c(O1,O2,N1-O1,N2-O2),2)) fisher.test(Succes,Groupe) chisq.test(matrix(c(O1,O2,N1-O1,N2-O2),2)) chisq.test(Succes,Groupe) • comparaison de plus de 2 proportions : chisq.test(Succes,Groupe) ou fisher.test(Succes,Groupe) E. Comets (UMR738) Introduction à R - Novembre 2009 23 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Tests de normalité Test de Shapiro-Wilk (hypothèse nulle = "normalité"): > x <- rnorm(100) > y <- runif(100,-2,2) > shapiro.test(x) Shapiro-Wilk normality test data: x W = 0.9872, p-value = 0.4523 > shapiro.test(y) Shapiro-Wilk normality test data: y W = 0.9516, p-value = 0.001055 E. Comets (UMR738) Introduction à R - Novembre 2009 24 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Tests de distribution Test de Kolmogorov-Smirnov ks.test(x,"distribution") pour tester si x suit la distribution "distribution" (ex : punif, pnorm...) ks.test(x,y) pour tester si x et y suivent les mêmes distributions > x<-runif(20);y<-rnorm(20) > ks.test(x,y) Two-sample Kolmogorov-Smirnov test data: x and y D = 0.55, p-value = 0.003967 alternative hypothesis: two.sided > ks.test(x,"pnorm") One-sample Kolmogorov-Smirnov test data: x D = 0.5048, p-value = 3.032e-05 alternative hypothesis: two.sided E. Comets (UMR738) Introduction à R - Novembre 2009 25 / 65 Plan Tests statistiques Graphes Graphes avancés Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Exercice Reprendre la base airquality pour répondre à la question : y’a-t-il une relation entre le fait d’observer une température supérieure à 85◦ F et le fait d’observer un pic d’ozone supérieur à 75 ppb? construire le tableau de contingence et utiliser un test du χ2 la distribution des concentrations d’Ozone suit-elle une loi normale? attention aux données manquantes E. Comets (UMR738) Introduction à R - Novembre 2009 26 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Plan Tests statistiques Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Graphes Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Graphes avancés Librairies graphiques avancées ggplot2 E. Comets (UMR738) Introduction à R - Novembre 2009 27 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Les graphiques La fonction de base est plot : 1.0 > x<-c(-1000:1000)*pi/500 > y<-cos(x) > plot(x,y) y −1.0 −0.5 0.0 0.5 donne −6 −4 −2 0 2 4 6 x E. Comets (UMR738) Introduction à R - Novembre 2009 28 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Options de la fonction plot main="Le titre" sub="Le sous-titre" xlab="",ylab="" xlim=c(xa,xb) ylim=c(ya,yb) type="" log="" pch=n, lty=n col=n font=n,cex=n titre du graphe sous-titre du graphe légende des axes limites des axes par défaut : "p" pour points sinon "l", "o", "h" ou "s" échelle logarithmique pour les X ("x"), pour les Y ("y") ou les 2("xy") symbole ou type de ligne utilisé couleur fonte et taille du texte et des symboles Pour plus de détails, voir help(par) E. Comets (UMR738) Introduction à R - Novembre 2009 29 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Types de symboles utilisables (pour référence) plot symbols : points (... pch = *, cex = 3 ) 0 6 12 18 24 0 0 1 7 13 19 25 + + 2 8 14 20 * − − 3 9 15 21 . | | 4 10 16 22 o o % % 5 11 17 23 O O # # E. Comets (UMR738) Introduction à R - Novembre 2009 * 30 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Exemple d’utilisation de plot > plot(x,y,xlim=c(0,pi),ylim=c(-1,1), xlab="x",ylab="y",lty=2,type="l", main="graphe de la fonction cosinus") graphe de la fonction cosinus y −1.0 −0.5 0.0 0.5 1.0 donne 0.0 0.5 1.0 1.5 2.0 2.5 3.0 x E. Comets (UMR738) Introduction à R - Novembre 2009 31 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Tracé de variables discrètes > plot(test$poids,test$womac, xlim=c(70,85),ylim=c(0,50), xlab="poids",ylab="womac",pch=2,type="p", main="relation entre les variables poids et womac") 0 10 20 womac 30 40 50 relation entre les variables poids et womac 70 75 80 85 poids E. Comets (UMR738) Introduction à R - Novembre 2009 32 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Exercice Réaliser le graphe suivant à partir de la base airquality 0 10 20 ozone 30 40 50 Ozone observée les 20 premiers jours du mois de mai 0 E. Comets (UMR738) 5 10 Introduction à R -jours Novembre 2009 15 20 33 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Ajouter des éléments à un graphe title() legend() text() mtext() box() lines(x,y) points(a,b) arrows(a,b,c,d) abline(a,b) E. Comets (UMR738) titre légende texte texte dans la marge encadrement du graphe trait entre x(=c(a,b)) et y(=c(c,d)) tracé du point de coordonnées (a,b) tracé d’une flèche entre (a,b) et (c,d) tracé de la droite d’ordonnée à l’origine a et de pente b Introduction à R - Novembre 2009 34 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Exemple −0.5 0.0 0.5 1.0 >x<-c(0:1000)*pi/100 >plot(x,cos(x),xlim=c(0,pi),ylim=c(-1,1), type="l",ylab="",font=3) >lines(x,sin(x),lty=2) >abline(-1,1,lty=3) >legend(1, -0.5, c("cos(x)", "sin(x)", "x-1"), lty = c(1, 2, 3)) −1.0 cos(x) sin(x) x−1 0.0 E. Comets (UMR738) 0.5 1.0 1.5 2.0 2.5 x Introduction à R - Novembre 2009 3.0 35 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Exercice Réaliser le graphe suivant à partir de la base airquality 120 Relation entre l’ozone et le vent, selon la température 80 40 60 Ozone (ppb) 100 Temp>=85°F Temp<85°F 2 4 6 8 10 12 14 Vent (mph) E. Comets (UMR738) Introduction à R - Novembre 2009 36 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Les différents types de graphes hist() barplot() boxplot() qqplot(), qqnorm() pie() pairs() matplot() E. Comets (UMR738) histogramme graphe en barre boîte à moustache graphe quantile-quantile camembert corrélations entre les colonnes d’une matrice corrélations entre les colonnes de deux matrices Introduction à R - Novembre 2009 37 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Histogramme On peut spécifier le nombre de barres de l’histogramme grâce à la commande breaks hist(airquality$Ozone) hist(airquality$Ozone ,breaks=20) Histogram of airquality$Ozone 20 15 Frequency 10 20 0 0 5 10 Frequency 30 25 Histogram of airquality$Ozone 0 50 100 150 0 airquality$Ozone E. Comets (UMR738) 50 100 150 airquality$Ozone Introduction à R - Novembre 2009 38 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Histogrammes de plusieurs variables Pour tracer plusieurs graphes sur la même page (ex : histogramme de différentes variables), on utilise l’option mfrow=c(m,n) 20 Frequency 0 10 20 10 0 Frequency 30 30 par(mfrow=c(2,2)) hist(airquality$Ozone,main="",xlab="Ozone") hist(airquality$Solar.R,main="",xlab="Solar.R") hist(airquality$Wind,main="",xlab="Wind") hist(airquality$Temp,main="",xlab="Temp") 0 50 100 150 0 50 250 350 30 20 Frequency 10 0 0 5 10 15 20 60 Wind E. Comets (UMR738) 150 Solar.R 10 20 30 Frequency Ozone 0 > > > > > Introduction à R - Novembre 2009 70 80 90 100 Temp 39 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Exercice 0.02 0.04 Density 4 3 0 0.00 1 2 Frequency 5 0.06 6 7 Réaliser le graphique suivant à partir de la base swiss 0 20 40 60 80 5 10 20 25 30 35 10 8 6 0 2 4 Frequency 8 6 4 Frequency 2 0 0 E. Comets (UMR738) 15 Examination 10 Agriculture 10 20 30 40 50 Education Introduction 0 20 à R - Novembre 2009 40 60 Catholic 80 100 40 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Boxplot Le boxplot permet de résumer graphiquement la distribution d’un échantillon : 0 50 100 150 > boxplot(airquality$Ozone) Ozone E. Comets (UMR738) Introduction à R - Novembre 2009 41 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Boxplot de plusieurs variables On peut tracer un boxplot d’un data.frame (peu d’intérêt si les échelles des variables sont trop différentes) 0 50 100 150 200 250 300 > boxplot(airquality) Ozone E. Comets (UMR738) Solar.R Wind Temp Month Introduction à R - Novembre 2009 Day 42 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Boxplot d’une variable selon des catégories Pour tracer les boxplot de Ozone, selon si Temp est < ou ≤ à 85◦ F. air1<-transform(airquality,Iftemp=ifelse(Temp>85,1,0)) attach(air1) boxplot(Ozone~Itemp,xlab="Itemp",ylab="Ozone") legend(1.8,170,c("0 : Temp<=85","1 : Temp>85")) 100 50 Ozone 150 0 : Temp<85 1 : Temp>85 0 > > > > 0 1 Itemp E. Comets (UMR738) Introduction à R - Novembre 2009 43 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Exercice 90 80 70 60 Fertility 0 : Edu <10 1 : Edu >10 0 E. Comets (UMR738) 40 50 60 40 50 Fertility 70 80 90 Réaliser le graphique suivant à partir de la base swiss 1 Introduction à R - Novembre 2009 0 : Inf.Mort<20 1 : Inf.Mort>20 0 1 44 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Les spaghetti plot La fonction interaction.plot trace des données longitudinales selon des catégories (en particulier par sujet) >attach(esoph) >interaction.plot(agegp, alcgp, ncases/ncontrols, xlab="age par groupe",trace.label="alcool") 1.0 ’esoph’ Data alcool 0.6 0.4 0.0 0.2 mean of ncases/ncontrols 0.8 80−119 120+ 40−79 0−39g/day 25−34 35−44 45−54 55−64 65−74 75+ age par groupe E. Comets (UMR738) Introduction à R - Novembre 2009 45 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Quantile-quantile plot Pour comparer les quantile empiriques de 2 vecteurs x1,x2. Si x1 et x2 sont 2 réalisations d’une même variable aléatoire, le qq-plot est proche de la droite y=x 0.4 x2 0.6 0.8 1.0 x1<-runif(100) x2<-runif(100) qqplot(x1,x2,main="qq-plot de x1 et x2") qq−plot de x1 et x2 abline(0,1) 0.2 > > > > 0.0 E. Comets (UMR738) 0.2 0.4 0.6 x1 0.8 Introduction à R - Novembre 2009 1.0 46 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Quantile-quantile norm Pour comparer les quantile empiriques d’un vecteur aux quantiles théoriques de la distribution normale. > x<-runif(100) > qqnorm(x) > abline(0,1) > y<-rnorm(100) > qqnorm(y) > abline(0,1) qq−norm de y 0 −3 0.0 −2 −1 Sample Quantiles 0.6 0.4 0.2 Sample Quantiles 1 0.8 2 1.0 qq−norm de x −2 −1 0 1 2 −2 Theoretical Quantiles E. Comets (UMR738) −1 0 1 2 Theoretical Quantiles Introduction à R - Novembre 2009 47 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Camembert Pour faire un camembert > pie(rep(1,12),col=rainbow(12)) 4 3 5 2 6 1 7 12 8 11 9 E. Comets (UMR738) 10 Introduction à R - Novembre 2009 48 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Corrélations : pairs Trace les graphes des variables deux à deux : > pairs(trees) 70 75 80 85 16 18 20 65 80 85 8 10 12 14 Girth 50 60 70 65 70 75 Height 10 20 30 40 Volume 8 10 12 E. Comets (UMR738) 14 16 18 20 10 Introduction à R - Novembre 2009 20 30 40 50 60 70 49 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Graphes associés à un type d’objet (1) Normal Q−Q plot −10 1 3 0 0 10 Standardized residuals 3 Residuals 8 2 8 −1 20 attach(swiss) lm1<-lm(Fertility~Education) par(mfrow=c(2,2)) plot(lm1) Residuals vs Fitted −20 24 24 40 50 60 70 80 −2 Fitted values 0 1 2 0.15 Cook’s distance plot 0.10 42 47 46 0.00 0.05 1.0 Cook’s distance 8 243 0.5 Standardized residuals 1.5 Scale−Location plot 40 50 60 Fitted values E. Comets (UMR738) −1 Theoretical Quantiles 0.0 > > > > 70 80 0 10 20 30 40 Obs. number Introduction à R - Novembre 2009 50 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Graphes associés à un type d’objet (2) Pour afficher uniquement le premier graphe : > > > > attach(swiss) lm1<-lm(Fertility~Education) par(mfrow=c(2,2)) plot(lm1,which=1) En fait plot fait ici appel à une autre fonction, plot.lm, qui sait comment construire les graphes associés aux résultats d’une régression linéaire. Il y a de nombreuses méthodes spécifiques associées à différents objets : methods(plot) E. Comets (UMR738) Introduction à R - Novembre 2009 51 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Analyse de variance (3) : graphe 250 300 350 xbar <- tapply(folate,ventilation, mean) s <- tapply(folate,ventilation,sd) n <- tapply(folate,ventilation,length) # nombre de patients sem <- s/sqrt(n) stripchart(folate~ventilation,pch=16,vert=T) arrows(1:3,xbar+sem,1:3,xbar-sem,angle=90,code=3,length=.1) lines(1:3,xbar,pch=4,type="b",cex=2) 200 > > > > > > > N2O+O2,24h E. Comets (UMR738) N2O+O2,op Introduction à R - Novembre 2009 O2,24h 52 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Enregistrer une figure Sauvegarde avec une commande, exemple en postscript postscript("mongraphe.eps") par(mfrow=c(2,2)) plot(lm1) dev.off() Formats disponibles jpeg : jpeg("mongraphe.jpg") postscript : postscript("mongraphe.eps") png : png("mongraphe.png") Sauvegarde avec la fenêtre graphique placer la souris sur la figure de R puis File/Save as/ et choisir son format Copier-coller dans Power-Point placer la souris sur la figure de R et taper Ctrl+C ouvrir PowerPoint et dans une diapo, taper Ctrl+V. E. Comets (UMR738) Introduction à R - Novembre 2009 53 / 65 Plan Tests statistiques Graphes Graphes avancés Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Exercice Tracer sur 4 figures placées sur une même page les densités des lois suivantes : loi normale centrée réduite loi log-normale correspondante loi de Poisson (paramètre à choisir) loi Gamma E. Comets (UMR738) Introduction à R - Novembre 2009 54 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Plan Tests statistiques Moyenne et variance Analyse de variance Variables discrètes Tests de distribution Graphes Graphes simples Eléments des graphes Les différents types de graphes Sauvegarde Graphes avancés Librairies graphiques avancées ggplot2 E. Comets (UMR738) Introduction à R - Novembre 2009 55 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Graphes avancés Librairies graphiques spécialisées lattice : librairie graphique apportant des fonctions treillis ggplot2 : définition d’une “grammaire graphique“ Ces librairies sont utilisées par d’autres librairies pour tracer des graphes xpose par exemple utilise lattice Conception différente d’un graphe graphe considéré comme un objet dont on spécifie les caractéristiques pas d’ajout possible sur un graphe de type lattice (mais complètement paramétrable) E. Comets (UMR738) Introduction à R - Novembre 2009 56 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Librairie lattice Utilisation similaire aux fonctions graphiques classiques mais fonctionnement différent création d’un objet tracé automatique quand R est utilisé interactivement à l’intérieur d’un fichier (source) ou d’une fonction, l’objet doit être tracé explicitement par un print Utilisation de formules (∼) décrivant les relations représentées dans les graphes relation directe et intuitive entre graphe et analyse capacités graphiques améliorées par rapport aux graphes de la librairie standard E. Comets (UMR738) Introduction à R - Novembre 2009 57 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Librairie ggplot2 Librairie développée par Hadley Wickham première version ggplot utilise lattice Apprentissage pas de tutoriel livre disponible en PDF E. Comets (UMR738) Introduction à R - Novembre 2009 58 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Graphe de base : qplot Fonctionne comme plot Peut être redirigé vers un objet nécessite d’appeler l’objet pour que le graphe soit tracé Options automatisées ajout de couleurs pour différencier des groupes (couleurs choisies selon des palettes prédéfinies) différenciation (split) selon des groupes nom des attributs faciles à retenir (colour, size, shape) E. Comets (UMR738) Introduction à R - Novembre 2009 59 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Un graphe avec plot 150 plot(airquality$Temp,airquality$Ozone,xlab="Temperature",ylab="Ozone",type="n") month<-sort(unique(airquality$Month)) for(i in month) points(airquality$Temp[airquality$Month==i], airquality$Ozone[airquality$Month==i],col=(i-4)) legend(60,150,month,col=(month-4),pch=1) Month 0 50 Ozone 100 5 6 7 8 9 60 70 80 90 Temperature E. Comets (UMR738) Introduction à R - Novembre 2009 60 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Le même graphe avec qplot library(ggplot2) qplot(Temp,Ozone,data=airquality,colour=Month) 150 100 Month Ozone 5 6 7 8 9 50 60 70 80 90 Temp E. Comets (UMR738) Introduction à R - Novembre 2009 61 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Changements de graphes Fonctionne par la définition d’objets géométriques (geom) caractérisant les graphes Ajustement d’une courbe par ajout de l’option geom="smooth" ajustement linéaire (method="lm") ajustement de splines Changement de style de graphe histogramme : geom="histogram" boîte à moustaches : geom="boxplot" Deux courbes/styles peuvent se superposer : geom=c("point","smooth") notion de couche (layer) comme Photoshop ou Gimp E. Comets (UMR738) Introduction à R - Novembre 2009 62 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Un graphe plus sophistiqué q1<-qplot(Temp,Ozone,data=airquality,colour=Month,geom=c("point","smooth"), facets=.~Month,span=2,facet_grid)+geom_smooth(method="lm",linetype=2) q1 E. Comets (UMR738) Introduction à R - Novembre 2009 63 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Passer à ggplot2 ou pas? Deux modes de raisonnement très différents... Avantage des graphes ”de base“ simple mais paramétrisable à l’infini on arrive toujours à faire ce qu’on veut (mais parfois on y passe du temps!) Avantage des graphes de ggplot2 très rapide de faire de beaux graphes sans avoir à régler plein de petits détails (regroupement, comparaisons,...) relation immédiate entre le graphe et l’analyse statistique en revanche, plus compliqué de paramétriser certains éléments par rapport aux graphiques de base ⇒ Choix très personnel... E. Comets (UMR738) Introduction à R - Novembre 2009 64 / 65 Plan Tests statistiques Graphes Graphes avancés Librairies graphiques avancées ggplot2 Pas immédiat : plusieurs graphes sur une page plot(airquality[,1:2],type="n",axes=F,xlab="",ylab="") pl1<-qplot(as.factor(Month),Ozone,data=airquality,colour=Month,geom=c("jitter"), xlab="Month") pl2<-qplot(as.factor(Month),Ozone,data=airquality,colour=Month,geom=c("boxplot"), xlab="Month") vp1<-viewport(width=0.5, height=1,x=0.25,y=0.5) vp2<-viewport(width=0.5, height=1,x=0.75,y=0.5) print(pl1,vp=vp1) print(pl2,vp=vp2) E. Comets (UMR738) Introduction à R - Novembre 2009 65 / 65