Montpellier L'analyse des données multivariées à l'aide du logiciel L'analyse en composantes principales (A.C.P.) INRA - Formation Permanente Juillet 2005 André Bouchier p.1/23
Copyright 2005 André Bouchier Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. p.2/23
1.Avant propos : l Pré-recquis Ce support de cours concerne la mise en oeuvre d'une analyse en composantes principales à l'aide du logiciel de statistiques R. Ce n'est ni un cours de statistique ni une initiation à R. On suppose donc connues les bases de ce logiciel ainsi que quelques notions de statistiques concernant l'analyse en composantes principales. l Les fonctions utilisées : Les fonctions utilisées pour cette analyse sont disponibles dans les bibliothèques standard de R et dans la bibliothèque ade4. Pour aider à la compréhension, l'écriture des «programmes» sera détaillée. Par la suite, vous pourrez condenser cette écriture. Mais n'oubliez pas de les commenter abondamment. p.3/23
2.Rappels : l L ACP est une méthode descriptive. l Son objectif est de représenter sous forme graphique l essentiel de l information contenue dans un tableau de données quantitatif. l Dans un tableau de données à j variables, les individus se trouvent dans un espace à j dimensions. l Lorsqu on projette ces données sur un plan, on obtient un graphique déformé de la réalité. l Le rôle de l ACP est de trouver des espaces de dimensions plus petites minimisant ces déformations. l On utilise un espace à 2 dimensions (un plan). Ce plan est appelé le plan principal. p.4/23
3.Les données d'exemple : l Le tableau des données d'exemple : Ce tableau de données, contient les données techniques sur 62 véhicules - année modèle 1994. Les variables sont : row.names : nom du modèle Puissance : en chevaux fiscaux Cylindree : en cm 3 Longueur : longueur de la voiture Largeur : largeur de la voiture Surface : surface de la voiture Poids : poids total en Kg Vitesse : vitesse maximum en km/h DepArret : Temps, en secondes, pour parcourir 1000 m, départ arrêté. Conso : Consommation moyenne aux 100 Km, en litres (essence ou gazole) p.5/23
4.Préparation du tableau des données : l Les données seront dans le tableau «don»: Puissance Cylindree Longueur Largeur Surface Poids Vitesse DepArret Conso Alfa-Romeo 33 1.5 ie 7 1490 4.07 1.61 6.58 970 180 31.4 7.7 Alfa-Romeo 155 2.0 10 1995 4.44 1.70 7.55 1215 205 31.3 8.0 Alfa-Romeo 155 TD 6 1929 4.44 1.70 7.55 1250 180 35.0 6.4 Alfa-Romeo 164 2.5 T 7 2500 4.55 1.76 8.02 1490 202 32.2 6.8 BMW 316i 7 1596 4.43 1.70 7.53 1190 191 34.1 7.9 BMW 325 TD 7 2498 4.43 1.70 7.53 1335 198 33.3 6.9 BMW 518i 10 1796 4.72 1.75 8.26 1360 194 33.6 8.6 BMW 525 TD 7 2498 4.72 1.75 8.26 1465 188 NA 7.6.../... l On élimine les 10 individus ayant des valeurs manquantes don<-na.omit(don) l L'identifiant des individus est row.names(don) Il contient le nom des véhicules p.6/23
5.Description des variables, les histogrammes : l Les histogrammes de toutes les variables layout(matrix(c(1:9),3,3)) for(i in 1:9) {hist(don[,i],main=names(don)[i],xlab="")} layout(1) Puissance Largeur Vitesse Frequency 0 5 15 25 4 6 8 10 14 Cylindree Frequency 0 5 15 25 500 1500 2500 Longueur Frequency 0 5 10 15 Frequency 0 5 15 1.5 1.7 1.9 2.1 Surface Frequency 0 4 8 12 5 6 7 8 9 Poids Frequency 0 2 4 6 8 Frequency 0 5 10 15 140 180 220 DepArret Frequency 0 5 15 25 28 32 36 40 Conso Frequency 0 5 10 15 3.5 4.0 4.5 5.0 800 1200 1600 4 6 8 10 12 p.7/23
6.Description des variables, contrôle de la linéarité des relations : l Les relations entre les variables quantitatives : pairs(don,main="données voitures 1994") p.8/23
7.L'A.C.P. - fonction dudi.pca () de la bibliothèque ade4 : l On lance l analyse en composantes principale Les résultats de l'analyse sont stockés dans la variable z library(ade4) z<- dudi.pca(don, center = T, scale = T, scannf = F) l Choix du type d'analyse Les options center et scale de la fonction dudi.pca sont utilisées pour centrer et réduire les variables. p.9/23
8.Les valeurs propres : l Impression des valeurs propres (variances de chaque composante) : z$eig 6.453 1.137 0.656 0.331 0.236 0.100 0.0434 0.0390 0.000 l Les variances cumulées (Σ des variances = 9, les données sont centrées réduites) : cumsum(z$eig) 6.453 7.591 8.247 8.579 8.816 8.917 8.960 8.999 9.000 l Les variances en pourcentages et pourcentages cumulés : z$eig/sum(z$eig)*100 71.704 12.640 7.298 3.688 2.632 1.114 0.482 0.434 0.004 cumsum(z$eig/sum(z$eig)*100) 71.70 84.34 91.64 95.33 97.96 99.07 99.56 99.99 100.00 p.10/23
9.L'histogramme des valeurs propres l Une représentation en % de variance expliquée : inertie<-z$eig/sum(z$eig)*100 barplot(inertie,ylab="% d'inertie",names.arg=round(inertie,2)) title("eboulis des valeurs propres en %") Eboulis des valeurs propres en % % d'inertie 0 10 20 30 40 50 60 70 71.7 12.64 7.3 3.69 2.63 1.11 0.48 0.43 0 p.11/23
10.Interprétation des composantes : les contributions "relatives" l Contributions des variables à la construction des axes : inertia.dudi(z,col.inertia = T)$col.abs Comp1 Comp2 Puissance 824 1867 Cylindree 1201 2 Longueur 1291 528 Largeur 937 2211 Surface 1307 1196 Poids 1345 485 Vitesse 1263 868 DepArret 798 2354 Conso 1034 490 Somme 10000 10000 p.12/23
11.Présentation des résultats - le plan principal : l Le résultat de l'a.c.p a été stocké dans la variable z. Les coordonnées des lignes et des colonnes se trouvent respectivement dans z$li et z$co l La première composante sera : cl1<-z$li[,1] cc1<-z$co[,1] pour les individus pour les variables l La deuxième sera : cl2<-z$li[,2] cc2<-z$co[,2] pour les individus pour les variables p.13/23
12.Présentation des résultats - le plan des individus : l Représentation du graphique du plan des individus : plot(cl1,cl2,type="n",main="les individus",xlim=c(-7,7)) abline(h=0,v=0) text(cl1,cl2,row.names(z$li)) Les individus cp2-3 -2-1 0 1 2 Peugeot 605 Sv24 Citroen AX1.4i Alfa-Romeo 33 1.5 ie Fiat UNO 1.4i.e Alfa-Romeo 155 2.0 BMW 730i Citroen Renault AX1.0Clio 1.4 Fiat RN TIPO 1.8ie Citroen XM V6 Fiat UNO TD Fiat TEMPRA 1.8ie Citroen Fiat CROMA XANTIA 2.0i Renault Twingo Renault Renault Clio Citroen 1.9D Renault Peugeot 19 ZX1.6 21 1.8RN 405 Prima Citroen SR TS XM 2.0i Peugeot Renault 19 BMW BMW 316i BMW 325 TD 518i Citroen AX14TD Citroen Fiat TIPO Citroen 306 1.4RN Renault ZX1.9TD 19 XTDT XANTIA dt Peugeot 1.8I 605 SLi Peugeot 106 XN Peugeot Peugeot Fiat Alfa-Romeo 405 CROMA STD 164 2.5 TD 2.5 T Renault Clio 1.2 RN Fiat 306 TEMPRA XN TD Peugeot 106 XTD Peugeot Alfa-Romeo Renault 40521 GL Renault Prima 155 TD TD Safrane2.0i Citroen Citroen ZX1.1 XANTIA 1.6I Citroen XANTIA TD Citroen Renault Renault XM Safrane2.5 TD12 Espace d2.2i Peugeot 605 SLD Renault Espace 2.1dT -6-4 -2 0 2 4 6 cp1 p.14/23
13.Présentation des résultats - le plan des variables : l La représentation graphique du plan des variables : plot(cc1,cc2,type="n", main="les variables", xlim=c(-1,1), ylim=c(-1,1), asp=1, #rapport entre "Echelle X" et "Echelle Y" ylab= "Comp2 71.7%", xlab= "Comp1 12.6%") abline(h=0,v=0) text(cc1,cc2,row.names(z$co)) l Le cercle des corrélations : symbols(0,0,circles=1,inches=false,add=true) p.15/23
14.Graphique du plan des variables : Les variables Comp2 71.7% -1.0-0.5 0.0 0.5 1.0 DepArret Puissance Vitesse Conso Cylindree Longueur Poids Surface Largeur -1.0-0.5 0.0 0.5 1.0 Comp1 12.6% p.16/23
15.Les données supplémentaires : l La bibliothèque ade4 propose les fonctions supcol() et suprow() pour calculer les coordonnées des variables et individus supplémentaires. Ces fonctions s'utilisent après le calcul de l'a.c.p. l Le tableau de données donsup contient 10 individus dont les données manquantes ont été remplacées par des valeurs grossièrement estimées. Ces données sont peu fiables et ont été introduites en supplémentaire dans l'analyse. Puissance Cylindree Longueur Largeur Surface Poids Vitesse DepArret Conso BMW 525 TD 7 2498 4.72 1.75 8.26 1465 188 31 7.6 Fiat Panda 1000i.e 4 999 3.41 1.49 5.09 715 140 41 6.2 Ford Fiesta 1400 6 1392 3.74 1.61 6.01 840 163 38 7.2 Ford Fiesta TD 5 1753 3.74 1.61 6.01 900 170 37 6.1 Ford Escort 1400 6 1391 4.10 1.70 6.96 1000 163 39 7.8 Ford Escort 1800 TD 6 1753 4.10 1.70 6.96 1100 172 35 6.3 Ford MONDEO 1800i 7 1796 4.48 1.75 7.83 1277 197 32 7.2 Ford MONDEO TD 5 1753 4.48 1.75 7.83 1277 183 35 6.2 Ford Scorpio 2000i 10 1998 4.74 1.69 8.03 1245 195 33 7.7 Ford Scorpio 2900i 15 1998 4.74 1.69 8.03 1345 201 32 10.8 p.17/23
16.Les individus supplémentaires : l Les coordonnées des individus supplémentaires sont calculés en tenant compte des options utilisées dans l'acp sur les individus actifs. Ici, ils seront centréréduits. z<- dudi.pca(don, center = T, scale = T, scannf = F) ligsup<-suprow(z,donsup) l Les coordonnées des individus supplémentaires se trouve dans ligsup$lisup Axis1 Axis2 BMW 525 TD 2.5032655-0.2648280 Fiat Panda 1000i.e -5.7235880-0.1497245 Ford Fiesta 1400-2.9921568 0.1666408 Ford Fiesta TD -2.7224814 0.1001151 Ford Escort 1400-1.7987546-1.0503674 Ford Escort 1800 TD -1.0292275-0.3706771 Ford MONDEO 1800i 1.2600677 0.0763634 Ford MONDEO TD 0.1373121-1.2755206 Ford Scorpio 2000i 1.7339527 0.4465114 Ford Scorpio 2900i 3.3727519 1.9269659 p.18/23
17.Représentation simultanée des individus actifs et supplémentaires: l Représentation simultanée des individus actifs et supplémentaires cl1<-z$li[,1] cl2<-z$li[,2] csup1<-ligsup$lisup[,1] csup2<-ligsup$lisup[,2] plot(cl1,cl2,type="n",main="les individus",xlim=c(-8,8)) abline(h=0,v=0) text(cl1,cl2,row.names(z$li),) text(csup1,csup2,row.names(ligsup$lisup),col="red",cex=1.2) Les individus cl2-3 -2-1 0 1 2 Peugeot 605 Sv24 Citroen AX1.4i Ford Scorpio 2900i Alfa-Romeo 33 1.5 ie Fiat UNO 1.4i.eAlfa-Romeo 155 2.0 BMW 730i Citroen Renault AX1.0 Clio Fiat 1.4 RN TIPO 1.8ie Citroen XM V6 Fiat UNO TDFiat TEMPRA 1.8ie Citroen Fiat CROMA XANTIA 2.0i Renault Twingo Renault Ford Citroen Peugeot 19 1.8RN Scorpio 2000i ZX1.6 Citroen XM 2.0i Ford Renault Peugeot Renault Clio Renault 1.9D 19 BMW BMW 316i BMW 325 TD 518i Citroen AX14TDCitroen Fiat Citroen TIPO 306 1.4RN 21405 Prima SR TS Ford Fiesta Fiesta Renault Ford 1400 TD ZX1.9TD 19 MONDEO XTDT XANTIA Peugeot dt 1.8I 1800i Fiat Panda 1000i.e 605 SLi Peugeot 106 Peugeot XN Peugeot Fiat Alfa-Romeo CROMA 164 2.5 2.5 T Fiat 306 TEMPRA XN 405 STD Renault Ford Clio 1.2 Escort RN 1800 BMW TD TD 525 TD Peugeot 106 XTD Peugeot Alfa-Romeo Renault 405 21 Renault GL Prima 155 TD Safrane2.0i TD Ford Citroen Escort Citroen ZX1.1 XANTIA 1.6I Citroen 1400 Ford MONDEO XANTIA TD TD Citroen Renault Renault XM Safrane2.5 TD12 Espace 2.2i d Peugeot 605 SLD Renault Espace 2.1dT -5 0 5 cl1 p.19/23
18.Représentation séparée des individus principaux et supplémentaires: l Pour plus de lisibilité, dans le cas présent, il est sans doute préférable de représenter séparément les individus supplémentaires plot(cl1,cl2,type="n",main="individus supplém",xlim=c(-8,8)) abline(h=0,v=0) text(csup1,csup2,row.names(ligsup$lisup),col="red",cex=1.1) Individus supplém cl2-3 -2-1 0 1 2 Ford Scorpio 2900i Ford Scorpio 2000i Ford Ford Fiesta Fiesta 1400 TD Ford MONDEO 1800i Fiat Panda 1000i.e Ford Escort 1800 BMW TD 525 TD Ford Escort 1400 Ford MONDEO TD -5 0 5 cl1 p.20/23
19.L'A.C.P., le programme complet : #lecture et préparation des données don<-na.omit(don) #exploration graphique des données layout(matrix(c(1:9),3,3)) for(i in 1:9) {hist(don[,i],main=names(don)[i],xlab="")} layout(1) pairs(don,main="données voitures 1994") #le calcul de l'acp. Les résultats sont stockés dans la variable z library(ade4) z<- dudi.pca(don, center = T, scale = T, scannf = F) #l'éboulis des valeurs propres en % inertie<-z$eig/sum(z$eig)*100 barplot(inertie,ylab="% d'inertie",names.arg=round(inertie,2)) title("eboulis des valeurs propres en %") #les coordonnées lignes et colonnes cl1<-z$li[,1]; cc1<-z$co[,1]; cl2<-z$li[,2]; cc2<-z$co[,2] #graphique du plan des individus actifs plot(cl1,cl2,type="n",main="les individus",xlim=c(-8,8)) abline(h=0,v=0) text(cl1,cl2,row.names(z$li),) #graphique du plan des variables actives plot(cc1,cc2,type="n",main="les variables",xlim=c(-1,1),ylim=c(-1,1), asp=1,ylab= "Comp2 71.7%",xlab= "Comp1 12.6%") abline(h=0,v=0) text(cc1,cc2,row.names(z$co)) symbols(0,0,circles=1,inches=false,add=true) p.21/23
20.Quelques références : l Logiciel R : R Development Core Team (2004). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URL http://www.r-project.org. l Bibliothèque ade4 : Jean Thioulouse, Anne-Beatrice Dufour and Daniel Chessel (2004). ade4: Analysis of Environmental Data : Exploratory and Euclidean methods in Environmental sciences. R package version 1.3-3. http://pbil.univ-lyon1.fr/ade-4 Mailing list: http://pbil.univ-lyon1.fr/ade-4/adelist.html p.22/23
21.Table des matières 1.Avant propos :...3 2.Rappels :...4 3.Les données d'exemple :...5 4.Préparation du tableau des données :...6 5.Description des variables, les histogrammes :...7 6.Description des variables, contrôle de la linéarité des relations :...8 7.L'A.C.P. - fonction dudi.pca () de la bibliothèque ade4 :...9 8.Les valeurs propres :...10 9.L'histogramme des valeurs propres...11 10.Interprétation des composantes : les contributions "relatives"...12 11.Présentation des résultats - le plan principal :...13 12.Présentation des résultats - le plan des individus :...14 13.Présentation des résultats - le plan des variables :...15 14.Graphique du plan des variables :...16 15.Les données supplémentaires :...17 16.Les individus supplémentaires :...18 17.Représentation simultanée des individus actifs et supplémentaires:...19 18.Représentation séparée des individus principaux et supplémentaires:...20 19.L'A.C.P., le programme complet :...21 20.Quelques références :...22 p.23/23