Traitements statistiques et Informatique. Utilisation du logiciel R
Transcription
Traitements statistiques et Informatique. Utilisation du logiciel R
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Traitements statistiques et Informatique. Utilisation du logiciel R Avertissement : Ce document est en cours d’élaboration. La présente version n’est donc que la version alpha d’un travail qui demande à être complété par la suite… Vous l’avez remarqué, le traitement des données statistiques est grandement facilité avec Excel. Pourtant dans certains cas les tableurs ne sont pas les outils idéaux. Des macros complémentaires sont proposés par Microsoft pour certains tests statistiques par exemple, qui viennent compléter des fonctions statistiques intéressantes, mais le tableur n’est pas l’outil idéal pour autant. C’est encore plus vrai pour les graphiques qui, s’ils sont agréables à regarder pour le non-spécialiste, sont parfois très surprenants pour quiconque examine avec attention les données à traiter. Par exemple Excel est capable de représenter une série la série de données suivante : 35 6 9 15 26 30 32 30 25 20 15 10 5 0 1 2 3 4 5 6 En fait Excel « invente » une série d’abscisse qui n’a pas forcément de signification. L’utilisation d’outils dédiés aux statistiques se comprend donc, et le succès de produits tels SAS ou SPSS, ou Splus le démontre. Leur point commun : la performance et le prix. Il faut savoir qu’il existe dans le domaine public un logiciel aux performances étonnantes, et dont la syntaxe est proche de Splus. Ce logiciel gratuit est le logiciel R. R est disponible entre autres aux adresses suivantes : http://www.r-project.org/ http://mirror.internet.tp/cran/ http://cran.univ-lyon1.fr/ http://cran.cict.fr/ De nombreux sites proposent de la documentation sur ce programme, dont : http://zoonek2.free.fr/UNIX/48_R/all.html (en anglais...) http://www.pallier.org/ressources/tpr/tpR.html http://pbil.univ-lyon1.fr/R/enseignement.html http://www.mat.ulaval.ca/sites_de_cours/cours_stt/stt_19909/documentation_logiciel_r/ http://www-labsad.upmf-grenoble.fr/lafaye/html/manuelr.htm http://zoonek2.free.fr/UNIX/48_R_2004/all.html (en français) Des sites proposent un R-Web, c'est-à-dire la possibilité d’utiliser R vis l’interface d’un navigateur, donc pouvoir le tester sans l’installer. http://claree.univ-lille1.fr/Rweb/ http://pbil.univ-lyon1.fr/Rweb/ http://bayes.math.montana.edu/Rweb/Rweb.general.html Page 1 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Son installation proche ne pose pas de problème. Au lancement on obtient : R fonctionne donc en mode de commandes et permet de faire calculs, traitements, et graphiques via un langage : le langage R. Aide en ligne : > help.start() (au format html) quand le logiciel est bine installé… Sa syntaxe, synthétique permet d’obtenir assez rapidement des choses intéressantes : Opérations simples : > 6+5 [1] 11 > 3*4 [1] 12 > 8/2 [1] 4 > Affectation dans une variable, et manipulation de variables > x<-15 > y<-24 > y-x [1] 9 Traitement sur une série : la première la déclare dans une variable (nommée serie), la seconde l’affiche, puis on effectue et on liste les traitements > serie<-c(2,5,9,12,4,8,16,20,9,11,8,7) > serie [1] 2 5 9 12 4 8 16 20 9 11 8 7 > mean(serie) [1] 9.25 > sd(serie) [1] 5.029459 > max(serie) [1] 20 > min(serie) [1] 2 > var(serie) [1] 25.29545 > summary(serie) Page 2 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Min. 1st Qu. 2.00 6.50 Median 8.50 Mean 3rd Qu. 9.25 11.25 Max. 20.00 La dernière commande permet d’obtenir minimum, maximum, les trois quartiles (dont la médiane), et la moyenne. Vecteurs et matrices R reconnaît deux types d’objets pouvant contenir des valeurs : les vecteurs et les matrices. Vecteurs : Objet (variable de base). UN vecteur peut contenir du texte et/ou des valeurs numériques. Une ou plusieurs valeurs. L’affectation de valeurs dans un vecteur de fait de la manière suivante :nom_du_vecteur<-. Le signe <- affecte une valeur textuelle ou numérique à un vecteur. Exemple : > w<-5 > w [1] 5 Confirmation : > is.vector(w) [1] TRUE Même chose avec du texte > t<-"coucou" > t [1] "coucou" > is.vector(t) [1] TRUE Pour une série de valeurs consécutives : liste<-1:10 > liste [1] 1 2 3 4 5 6 7 8 9 10 Série de valeurs quelconques : On utilise la syntaxe suivante : Nom_du_vecteur<-c(valeur1, valeur2, …), soit : > vecteur<-c(5,2,9,10,14,3,8,16) > vecteur [1] 5 2 9 10 14 3 8 16 Vous aurez compris que saisir le nom de l’objet permet de faire afficher son contenu. On peut aussi saisir au clavier valeur par valeur avec la fonction scan : > vecteur2<-scan() 1: 6 2: 9 3: 2 4: 4 Page 3 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 5: 7 6: Read 5 items > vecteur2 [1] 6 9 2 4 7 Le premier retour chariot vide met fin à la saisie des valeurs du vecteur. Insertion de lettres :letters > letters [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" [18] "r" "s" "t" "u" "v" "w" "x" "y" "z" Sélection d’échantillons :sample. . Exemple ci-dessous en sélectionnant 3 valeurs au hasard parmi les 9 valeurs saisies : L’échantillonnage devient sympa… > sample(c(5,8,6,9,3,23,56,1,7),3) [1] 23 3 1 Même chose ici : choisir au hasard 1O nombres parmi les 500 premiers : > sample((1:500),10) [1] 281 123 14 375 279 77 357 161 184 325 Des vecteurs contenant des valeurs logiques sont fréquents ; ouinon<-c(T,F,F,T,F,T,T) > ouinon [1] TRUE FALSE FALSE TRUE FALSE TRUE TRUE Connaître le nombre et la liste des objets créés:ls() > ls() [1] "liste" "Liste1" "ouinon" "t" "tab" "vecteur" "w" Supprimer un objet :rm(nom_objet) > rm(w) > w Error: Object "w" not found Connaître le type de valeurs contenues dans un vecteur: mode(nom_objet) > mode(t) [1] "character" > mode(vecteur) [1] "numeric" > mode(ouinon) [1] "logical" Les matrices (tableaux, data.frame) L’exemple ci-dessous permet de comprendre que l’objet nommé tab n’est pas un vecteur, mais un tableau dont les colonnes ont des propriétés ou des significations différentes. > is.vector(tab) Page 4 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 [1] FALSE > tab sexe poids taille 1 f 95 164 2 f 83 183 Un data.frame peut contenir plusieurs types de données( quantitatives, textuelles, logiques) Par contre une matrice ne peut contenir qu’un seul type d’enregistrements. > is.matrix(tab) [1] FALSE L’objet tab est donc un data.frame, et pas une matrice. La preuve. [1] FALSE > is.data.frame(tab) [1] TRUE La différence essentielle se fera sentir avec les traitements… Création d’un data.frame : Premier moyen : saisir un vecteur que l’on transforme en tableau :Ici le vecteur va comporter 6 valeurs pour donner naissance à un tableau de 2 colonnes et 3 lignes, puis un autre de 3 colonnes et 2 lignes. > v0<-c(5,6,8,1,4,7) > t1<-matrix(v0, nrow=3, ncol=2) >t2<-matrix(v0, nrow=2, ncol=3) > v0 [1] 5 6 8 1 4 7 > t1 [,1] [,2] [1,] 5 1 [2,] 6 4 [3,] 8 7 > t2 [,1] [,2] [,3] [1,] 5 8 4 [2,] 6 1 7 Autre moyen : > tab0<-matrix(c(5,6,9,8,10,4,1,2), nrow=2) > tab0 [,1] [,2] [,3] [,4] [1,] 5 9 10 1 [2,] 6 8 4 2 > tab1<-matrix(c(5,6,9,8,10,4,1,2), ncol=2) > tab1 [,1] [,2] [1,] 5 10 [2,] 6 4 [3,] 9 1 [4,] 8 2 Autre exemple : Page 5 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 > mat<-matrix(11:16,ncol=3) > mat [,1] [,2] [,3] [1,] 11 13 15 [2,] 12 14 16 Par défaut les matrices sont remplies colonne par colonne. Pour les remplir ligne par ligne ajouter l’argument byrow=T : > tab2<-matrix(c(5,6,9,8,10,4,1,2), ncol=2, byrow=T) > tab1 > tab2 [,1] [,2] [,1] [,2] [1,] 5 10 [1,] 5 6 [2,] 6 4 [2,] 9 8 [3,] 9 1 [3,] 10 4 [4,] 8 2 [4,] 1 2 > mat<-matrix(11:16,ncol=3, byrow=T) > mat [,1] [,2] [,3] [1,] 11 12 13 [2,] 14 15 16 Renseignements sur une matrice : Taille : > dim(mat) [1] 2 3 Nombre de lignes : > nrow(mat) (ici 2), de colonnes : > ncol(mat) (3) Voir les noms des lignes et colonnes : > ncol(mat), > colnames(mat) (ici NULL car pas encore de noms) Nommer les lignes : > rownames(mat)<-c("H", "F") Nommer les colonnes : > colnames(mat)<-c("Paris", "Bordeaux","Nice") D’où la matrice : > mat Paris Bordeaux Nice H 11 12 13 F 14 15 16 Extraire des éléments d’une matrice : > tab1[1,2] [1] 10 Deuxième colonne, puis première ligne : > tab1[,2] [1] 10 4 1 2 > tab1[1,] [1] 5 10 Attention : la colonne est présentée en ligne… Travail sur les vecteurs Faire afficher que certaines valeurs : nom_vecteur[c(rangs)] > vect<-10:15 Page 6 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 > vect [1] 10 11 12 13 14 15 > vect<-10:15 > vect[3] [1] 12 > vect[c(1,4,5)] [1] 10 13 14 Soit le vecteur exemple suivant : exemple<-c(5,6,2,8,4,7,1,5,3,9,12,4,14,5,6,3,19) Nombre de valeurs : > length(exemple) [1] 17 Afficher que les valeurs de rang , 0, 10, 15. > exemple[c(5,10,15)] [1] 4 9 6 Afficher que les valeurs supérieures à 5 : > exemple[exemple>5] [1] 6 8 7 9 12 14 6 19 Valeurs comprises entre 5 et 10 > exemple[exemple>5 & exemple<10] [1] 6 8 7 9 6 Valeurs inférieures à 5 ou supérieures à10. > exemple[exemple<5|exemple>10] [1] 2 4 1 3 12 4 14 3 19 Le ou est représenté par le caractère | (ALT GR 6) Afficher que les valeurs uniques (une seule fois chaque valeur présente) > unique(exemple) [1] 5 6 2 8 4 7 1 3 9 12 14 19 5 5 Nombre de valeurs différentes : > length(unique(exemple)) [1] 12 Tri croissant des valeurs > sort(exemple) [1] 1 2 3 3 4 4 5 6 6 7 Insertion de ce tri dans un nouveau vecteur : > croissant<-sort(exemple) Page 7 sur22 8 9 12 14 19 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 > croissant [1] 1 2 3 > exemple [1] 5 6 2 3 4 4 5 5 5 6 6 7 8 4 7 1 5 3 9 12 Les valeurs uniques triées : > sort(unique(exemple)) [1] 1 2 3 4 5 6 7 8 9 12 14 19 8 4 14 9 12 14 19 5 6 3 19 Rang des valeurs du vecteur : rank(exemple) [1] 8.0 10.5 10.5 [16] 3.5 17.0 2.0 13.0 5.5 12.0 1.0 8.0 3.5 14.0 15.0 5.5 16.0 8.0 Idem avec les valeurs uniques : rank(unique(exemple)) [1] 5 6 2 8 4 7 1 3 9 10 11 12 Tri de ces rangs : > sort(rank(unique(exemple))) [1] 1 2 3 4 5 6 7 8 9 10 11 12 Logique non ? Calculs numériques : Somme des valeurs: sum(exemple) [1] 113 Somme cumulée des valeurs : > cumsum(exemple) [1] 5 11 13 21 25 32 33 38 41 50 62 66 80 85 91 94 113 Produit des valeurs (uniques) : > prod(unique(exemple)) [1] 1158312960 Produits cumulés des valeurs uniques : > cumprod(unique(exemple)) [1] 5 30 [7] 13440 40320 60 362880 480 4354560 Moyenne des valeurs : > mean(exemple) [1] 6.647059 Page 8 sur22 1920 13440 60963840 1158312960 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Calculs vectorisés : Double des valeurs uniques : > unique(exemple)*2 [1] 10 12 4 16 8 14 2 6 18 24 28 38 Retirer 5 de chaque valeur et créer un vecteur (moinscinq) avec le résultat > moinscinq<-exemple-5 > moinscinq [1] 0 1 -3 3 -1 2 -4 0 -2 4 7 -1 9 0 1 -2 14 0 2 Différence entre les deux vecteurs : > exemple-moinscinq [1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 Ce résultat n’est guère surprenant… Valeurs absolues du double des valeurs moins 10 : > abs(2*exemple-10) [1] 0 2 6 6 2 4 8 0 4 8 14 2 18 4 28 Logarithme népérien de chaque valeur unique : > log(unique(exemple)) [1] 1.6094379 1.7917595 0.6931472 2.0794415 1.3862944 1.9459101 0.0000000 [8] 1.0986123 2.1972246 2.4849066 2.6390573 2.9444390 Racines carrées des valeurs uniques : > sqrt(unique(exemple)) [1] 2.236068 2.449490 1.414214 2.828427 2.000000 2.645751 1.000000 1.732051 [9] 3.000000 3.464102 3.741657 4.358899 Minimum, maximum : > min(exemple) [1] 1 > max(exemple) [1] 19 Moyenne, Variance : > min(exemple) [1] 1 > max(exemple) [1] 19 Médiane, valeurs extrêmes : > median(exemple) [1] 5 > median(unique(exemple)) [1] 6.5 Page 9 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 > range(exemple) [1] 1 19 Déciles : > quantile(exemple, probs=seq(from=0, to=1, by=0.1)) 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 1.0 2.6 3.2 4.0 5.0 5.0 6.0 7.2 8.8 12.8 19.0 Quartiles : > quantile(exemple, probs=seq(from=0, to=1, by=0.25)) 0% 25% 50% 75% 100% 1 4 5 8 19 Donc médiane : > quantile(exemple, probs=seq(from=0, to=1, by=0.5)) 0% 50% 100% 1 5 19 Résumé des principaux indicateurs : > summary(exemple) Min. 1st Qu. Median 1.000 4.000 5.000 Mean 3rd Qu. 6.647 8.000 Max. 19.000 Facilités de saisie REP : Répétitions. Créer un vecteur de 5 valeurs identiques (3 par exemple) > cinq<-rep(3,5) > cinq [1] 3 3 3 3 3 Avec des valeurs textuelles : > text<-rep("Attention", 6) > text [1] "Attention" "Attention" "Attention" "Attention" "Attention" "Attention" Les possibilités sont intéressantes : > rep(c(1,2),3) [1] 1 2 1 2 1 2 > rep(c(1,2),c(3,3)) [1] 1 1 1 2 2 2 SEQ : créer des suites : Valeurs de 125 à 135 : > 125:135 [1] 125 126 127 128 129 130 131 132 133 134 135 Page 10 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Valeurs de 35 à 100 avec un pas de 5 : > seq(from=35, to= 100, by=5) [1] 35 40 45 50 55 60 65 70 75 80 20 10 85 90 95 100 Suite de nombres inversés : REV : Valeurs inversées de 90 à 90 : > rev(90:80) [1] 80 81 82 83 84 85 86 87 88 89 90 Valeurs inversées d’une suite de pas 10 : > rev(seq(from=10, to=100, by=10)) [1] 100 90 80 70 60 50 40 30 Graphiques Création d’un histogramme : > hist(serie) 0 1 2 Frequency 3 4 5 Histogram of serie 0 5 pour obtenir : 10 15 20 serie Lire des données : Read.table(« chemin et nom du fichier »). Cela marche aussi avec des données distantes ; exemple : read.table("http://andruccioli.u-bordeaux4.fr/R/tableau_1.txt", h=T) On arrive alors à : 1 2 3 4 5 6 7 8 9 10 11 12 13 sexe poids taille f 95 164 f 83 183 h 81 182 f 54 177 h 69 175 h 76 155 f 49 181 h 79 184 f 45 190 h 47 163 h 83 189 h 94 163 f 93 177 Page 11 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 14 15 f h 68 59 184 187 Insérons ces données dans une variable (« matrice ») tab<-read.table("http://andruccioli.u-bordeaux4.fr/R/tableau_1.txt", h=T) Nous pouvons à présent manipuler sans difficulté ces données. Editeur de données : edit(nom_du_fichier) ; soit avec notre exemple : Edit(tab) Modifions des données, et fermons la fenêtre de l’éditeur : Vous avez remarqué qu’il ne s’est rien passé ; la fonction EDIT permet de modifier, mais pas de sauvegarder ces modifications. Il faut donc stocker les résultats des modifications faites avec edit dans une (nouvelle) variable. Ainsi :tabmodif<-edit(tab) permet de modifier le tableau nommé tab et de sauvegarder les modifications dans une nouvelle variable de type matrice : tabmodif. > tab sexe poids taille 1 f 95 164 2 f 83 183 3 h 81 182 > tabmodif sexe poids taille 1 f 55 155 2 f 88 188 3 h 81 182 Sin on souhaite conserver la même variable : fix(tab) qui lance l’éditeur permettant de saisir des modifications. Sa fermeture permet au tableau de conserver ces mises à jour. > fix(tab) > tab sexe poids taille 1 f 22 122 2 f 25 125 3 h 81 182 Historique des commandes : Utiliser les touches de direction haut et bas pour faire afficher les dernières commandes saisies. Page 12 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Indicateurs synthétiques: > summary(tab) sexe poids taille f:7 Min. :22.00 Min. :122.0 h:8 1st Qu.:48.00 1st Qu.:163.0 Median :68.00 Median :177.0 Mean :62.93 Mean :170.3 3rd Qu.:80.00 3rd Qu.:184.0 Max. :94.00 Max. :190.0 Ecrire une fonction : Faire plus tard Exporter des données (paragraphe sur échanger des données) Sauvegarde : Sauver l’historique des commandes : C’est dans un fichier ;RHistory (File, puis Save, history). Sauver les objets créés : fichier RData : (File puis save image ou save Workspace selon les versions.) Lois de probabilités :beta, binomial, cauchy, chi-squared, exponential, F, gamma, geometric, hypergeometric, log-lormal, logistic, normal, poisson, student, uniform, weibull, wilcoxon. Graphiques : Egalement un des points forts de R. Peut-être un peu moins convivial u’Excel, mais R présente des fonctions graphique qui permettent de disposer de graphiques statistiques justes… La fonction centrale : plot() Exemple : création d’un vecteur et représentation : x 3 4 5 6 7 > x<-c(5,6,7,3) > plot(x) 1.0 1.5 2.0 2.5 Index Page 13 sur22 3.0 3.5 4.0 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Plutôt basique ! mais les possibilités sont nombreuses pour améliorer ceci comme nous le verrons plus loin. En ajoutant type="l" on obtient des courbes Avec deux vecteurs on peut disposer d’une abscisse et d’une ordonnée très simplement : 6 x 4 5 20 12 3 16 y 24 7 > y<-c(12,14,20,26) > plot(x,y, type="l") > >plot(x,y, type="l") 12 3 4 5 6 16 7 20 24 y x TYPE :Syntaxe type="code", et le code donne :l pour les lignes, p pour les points, h pour des bâtons… Bien sûr le type de lignes et de points et paramétrable. Col permet de modifier les couleurs, xlim(), et ylim() sont pratiques pour modifier les limites des axes. Exemple : > x<-c(20,0,30,45,25) > y<-c(3,5,9,4,12) > plot(x,y) > points(x,y, pch=3) > lines(x,y, lty=4) > text(10,8,"Remarque") > abline(h=7) > title("Premier essai") 8 Remarque 4 6 y 10 Premier essai 0 10 20 30 40 x Autres graphiques :hist() pour les histogrammes, boxplot() pour les boîtes, barplot() pour les barres horizontales. Tests statistiques : Test du khi2 : Exemple avec le tableau de contingence suivant : Sous Excel il nous faut construire le tableau des effectifs théoriques pour avoir le khi2 calculé (7,6458) ; La fonction khideux.inverse propose le khi2 théorique si on donne le degré de lierté, pour un seuil de 5% par exemple (9,4877) La fonction test.khideux donne le seuil de basculement entre H1 et H0, soit ici :0,1054) Voyons ce que cela donne sous R : Insertion des données dans une matrice : b<-matrix(c(45,45,62,35,47,40,60,50,45), ncol=3) Réalisation du test : Page 14 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 > chisq.test(b) Pearson's Chi-squared test data: b X-squared = 7.6458, df = 4, p-value = 0.1054 R fournit donc directement le kh2 calculé, le degré de liberté, et le seuil de basculement. Ajustement & Régression avec R R permet avec un minimum d’effort de réaliser des ajustements et des régressions. Régression linéaire simple (une variable explicative) Entrée des données : > x<-c(3,6,9,12,15,18,21,24) > y<-c(20,50,40,70,40,60,50,80) Première et deuxième droite d’ajustement : > droite1<-lm(y~x) > droite1 Call: lm(formula = y ~ x) Coefficients: (Intercept) 27.143 x 1.786 > droite2<-lm(x~y) > droite2 Call: lm(formula = x ~ y) Coefficients: (Intercept) -0.4070 y 0.2714 Coefficient de corrélation : > cor(x,y) [1] 0.6961075 Test F : > anova(droite1) Analysis of Variance Table Response: y Df Sum Sq Mean Sq F value Pr(>F) Page 15 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 x 1 1205.36 1205.36 5.6407 0.05514 . Residuals 6 1282.14 213.69 --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Tracé du nuage de points, puis ajout de la droite : 50 20 30 40 y 60 70 80 > plot(x,y) > abline(droite1) 5 10 15 20 x Régression multiple : (deux variables explicatives) Entrée des données : comme précédemment : > y<-c(85,70,100,140,115,105) > x1<-c(3,5,9,12,14,17) > x2<-c(11,14,15,16,19,23) Régression : > reg<-lm(y~x1+x2) > reg Call: lm(formula = y ~ x1 + x2) Coefficients: (Intercept) 197.21 x1 13.38 x2 -13.99 ANOVA : > anova(reg) Analysis of Variance Table Page 16 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Response: y Df Sum Sq Mean Sq F value Pr(>F) x1 1 1284.03 1284.03 31.821 0.01102 * x2 1 1532.42 1532.42 37.977 0.00860 ** Residuals 3 121.06 40.35 --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Le logiciel R permet de faire ce test facilement ; la syntaxe est la suivante : (Remarque : les lignes écrites dans cette police sont les instructions R) Saisie des valeurs : déclaration du tableau des observations. > observations<-matrix(c(15,25,10,65,5,10,15,30,5,5,10,40), ncol=4, byrow=T) Nommons les lignes et les colonnes (optionnel pour le calcul) > rownames(observations)<-c("M1","M2","M3") > colnames(observations)<-c("C1","C2","C3","C4") Affichons le tableau : > observations C1 C2 C3 C4 M1 15 25 10 65 M2 5 10 15 30 M3 5 5 10 40 Effectuons le test : > chisq.test(observations) Pearson's Chi-squared test data: observations X-squared = 14.0853, df = 6, p-value = 0.0287 Représentons graphiquement le tableau: Histogramme : Page 17 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 0 20 40 60 80 100 120 Histogramme C1 C2 C3 C4 Boîte à moustaches (Boxplot) de Tukey > boxplot(c1,c2,c3,c4, col=c("lightblue","lightpink","lightgrey","yellow"), main="Boîte à moustache de Tukey") Boîte à moustache de Tukey 10 10 20 20 30 30 40 40 50 50 60 60 Idem pour les magasins Diagramme en mosaïque: > mosaicplot(t(observations), col=c("lightgreen","lightblue","lightyellow"), main="Diagramme en mosaïque") Page 18 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Diagramme en mosaïque C2 C3 C4 M3 M2 M1 C1 Calculons les effectifs théoriques : pour cela il nous faut auparavant les totaux en lignes, en colonnes et le total général : > > > > > > margeC<-margin.table(observations,2) margeM<-margin.table(observations,1) tous<-sum(observations) efftheoriques<-round(margeC%*%t(margeM)/tous,2) efftheoriques<-t(efftheoriques) efftheoriques C1 C2 C3 C4 M1 12.23 19.57 17.13 66.06 M2 6.38 10.21 8.94 34.47 M3 6.38 10.21 8.94 34.47 Représentation graphique de ces effectifs théoriques : mosaicplot(t(efftheoriques),col=c("lightblue","lightgreen","lightyellow"), main="Mosaicplot - effectifs théoriques") Page 19 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Mosaicplot - effectifs théoriques C2 C3 C4 M3 M2 M1 C1 La confrontation avec le premier diagramme permet de visualiser les différences entre effectifs, et de justifier l’utilisation d’un test. Calculons à présent les fréquences absolues : > freqabsolues<-round(observations/tous*100,2) > freqabsolues C1 C2 C3 C4 M1 6.38 10.64 4.26 27.66 M2 2.13 4.26 6.38 12.77 M3 2.13 2.13 4.26 17.02 ANOVA et R Il est plus facile de présenter les données sous forme de colonnes pour faire un tel traitement dans R. Le tableau précédent a don été retraité dans Excel et sauvegardé sous la forme d’un simple fichier textes nommé test.txt. Il est présent à l’adresse suivante : http://andruccioli.u-bordeaux4.fr/R/test.txt. Voici sa structure: Page 20 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 Dans R, commençons par le récupérer avec l’instruction Read.table : > observations<-read.table("http://andruccioli.u-bordeaux4.fr/R/test.txt", h=T) Vérifions: > observations mag cond don 1 1 1 15 2 2 1 5 3 3 1 5 4 1 2 25 5 2 2 10 6 3 2 5 7 1 3 10 8 2 3 15 9 3 3 10 10 1 4 65 11 2 4 30 12 3 4 40 Déclarons les facteurs lignes et colonnes (ici magasins puis conditionnements): > observations$mag<-as.factor(observations$mag) > observations$mag [1] 1 2 3 1 2 3 1 2 3 1 2 3 Levels: 1 2 3 > observations$cond<-as.factor(observations$cond) > attach(observations) Demandons lui quelques indicateurs statistiques conditionnels par magasin, puis par conditionnement : (Ci-dessous seuls les instructions en gras n été saisies…) > by(don, mag, summary) mag: 1 Min. 1st Qu. Median Mean 3rd Qu. Max. 10.00 13.75 20.00 28.75 35.00 65.00 -----------------------------------------------------------mag: 2 Min. 1st Qu. Median Mean 3rd Qu. Max. 5.00 8.75 12.50 15.00 18.75 30.00 Page 21 sur22 R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006 -----------------------------------------------------------mag: 3 Min. 1st Qu. Median Mean 3rd Qu. Max. 5.0 5.0 7.5 15.0 17.5 40.0 > by(don, cond, summary) INDICES: 1 Min. 1st Qu. Median Mean 3rd Qu. Max. 5.000 5.000 5.000 8.333 10.000 15.000 -----------------------------------------------------------INDICES: 2 Min. 1st Qu. Median Mean 3rd Qu. Max. 5.00 7.50 10.00 13.33 17.50 25.00 -----------------------------------------------------------INDICES: 3 Min. 1st Qu. Median Mean 3rd Qu. Max. 10.00 10.00 10.00 11.67 12.50 15.00 -----------------------------------------------------------INDICES: 4 Min. 1st Qu. Median Mean 3rd Qu. Max. 30.0 35.0 40.0 45.0 52.5 65.0 Faisons une ANOVA à un facteur pour les magasins (Lignes) (en gras ce qui a été saisi) > mag.aov<-aov(don~mag, data=observations) > summary(mag.aov) Df Sum Sq Mean Sq F value Pr(>F) mag 2 504.17 252.08 0.7393 0.5043 Residuals 9 3068.75 340.97 Idem pour les conditionnements (Colonnes) > cond.aov<-aov(don~cond, data=observations) > summary(cond.aov) Df Sum Sq Mean Sq F value Pr(>F) cond 3 2622.92 874.31 7.3626 0.01091 * Residuals 8 950.00 118.75 Et enfin une ANOVA à deux facteurs : > deux.aov<-aov(don~cond+mag, data=observations) > summary(deux.aov) Df Sum Sq Mean Sq F value Pr(>F) cond 3 2622.92 874.31 11.7664 0.006331 ** mag 2 504.17 252.08 3.3925 0.103359 Residuals 6 445.83 74.31 --Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1 Page 22 sur22