Université de Strasbourg Analyse des données Master de Sciences, Spécialité Statistique 2012/13 Master Actuariat Emmanuel Périnel Analyse des données - Logiciel R TP n 2. L Analyse en Composantes Principales (ACP) Corrigé AVANT DE COMMENCER : chargement du package FactoMineR Lancer R Installer le package RcmdrPlugin.FactoMineR (Package Installer des packages Choisir un miroir Choisir le package RcmdrPlugin.FactoMineR Lancer Rcmdr : par le menu Package Charger le package ou taper library(rcmdr) Dans le menu Rcmdr : Outil Charger des plug-ins Rcmdr RcmdrPlugin.FactoMineR 1. Une ACP à la main sur un jeu de données à deux variables. L objectif de cet exercice est de retrouver les résultats d une analyse en composantes principales normée (c est-à-dire lorsque les données sont centrées et réduites) en utilisant le formalisme matriciel du logiciel R. 1. Sous Rcmdr, créer le jeu de données suivant (appelé par exemple data) comportant cinq individus et deux variables quantitatives (de type numeric dans le langage R) : Données Nouveau jeu de données. X 1 X 2 0 1 1 2 2 2 3 3 4 2 Remarque importante. Le logiciel Rcmdr est sensible aux fenêtres mal fermées! Après avoir visualisé ou édité des données, il est vivement conseillé de refermer la fenêtre affichant ces données avant de réaliser d autres analyses (sous peine de planter le logiciel R...) 2. Centrer-réduire les variables à l aide de l outil de gestion des variables : Données Gérer les variables dans le jeu de données actif Standardiser les variables. 3. Visualiser le nuage des cinq individus dans l espace des deux variables centrées réduites. Graphes Nuage de points Choisir Z.X1 et Z.X2. 4. Construire le jeu de données constitué des seules données centrées réduites : > datacr = data[,3:4] 5. Dans Rcmdr, la réduction des données est réalisée en utilisant la formule de l écart type suivant : s = 1 n 1 ni=1 (x i x) 2. Mais pour retrouver les résultats usuels de l ACP, il convient de réduire les données sur la base de l écart type habituel s = 1 n ni=1 (x i x) 2.
Quelle transformation doit-on appliquer aux données afin d obtenir des données standardisées selon l écart-type s? Effectuer cette transformation. On multiplie toutes les données par le rapport n n 1 > datacr = sqrt(5/4) * datacr (avec n = 5) : 6. Pour effectuer l ACP à l aide du langage matriciel, il est nécessaire de transformer le jeu de données data (qui correspond au type dataframe dans le langage de R) en une matrice X, grâce la commande : > X = as.matrix(datacr) 7. Calculer la matrice (X X) (où %*% désigne le produit matriciel dans R) : > t(x) %*% X 8. Lorsque les individus sont affectées de masses (ou poids) m i = 1 n, la matrice à diagonaliser est égale à 1 n (X X). Calculer cette nouvelle matrice, que l on notera V. Vérifier que la matrice V coïncide bien avec la matrice des corrélations du jeu de données data. > V = 1/5 * t(x) %*% X > V Z.X1 Z.X2 Z.X1 1.0000000 0.6708204 Z.X2 0.6708204 1.0000000 Puis : Statistique Résumé Matrice des corrélations (choisir X1 et X2) On obtient bien : > cor(data[,c("z.x1","z.x2")], use="complete.obs") Z.X1 Z.X2 Z.X1 1.0000000 0.6708204 Z.X2 0.6708204 1.0000000 9. Déterminer les axes factoriels de l ACP en calculant les vecteurs propres de la matrice V : > vecp = eigen(v)$vectors > vecp [,2] [1,] -0.7071068 0.7071068 [2,] -0.7071068-0.7071068 10. Vérifier que la norme de chaque vecteur propre est bien égale à un et que les deux vecteurs propres sont bien orthogonaux. > v1 = vecp > sqrt(v1%*%v1) [1,] 1 > v2 = vecp[,2] > sqrt(v2%*%v2) [1,] 1
> v1%*%v2 [1,] -1.013729e-17 11. Calculer l inertie de chacun des axes factoriels en déterminant les valeurs propres de V : > valp = eigen(v)$values > valp [1] 1.6708204 0.3291796 12. Calculer la somme des inerties des deux axes. Que constate-t-on? > sum(valp) [1] 2 On retrouve le résultat suivant : en ACP normée, l inertie totale (la somme des valeurs propres) est égale au nombre de variables actives. 13. Représenter le nuage de points des données centrées réduites, puis utiliser la commande abline(a,b) (qui trace une droite d ordonnée à l origine a et de pente b) afin d ajouter au graphique les deux premiers axes factoriels. Graphes Nuage de points Choisir Z.X1 et Z.X2. Les coordonnées des deux premiers vecteurs propres étant de la forme (a, a) et ( a, a), les deux premières directions factorielles sont déterminées respectivement par la première et la deuxième bissectrice du plan : > abline(0,1) > abline(0,-1) 14. Calculer (à l aide d un produit scalaire) la coordonnée de l individu 1 le long du premier axe ; puis le long du deuxième axe. Faire de même pour l individu 3. > X[1,]%*%v1 [1,] 2.118034 > X[1,]%*%v2 [1,] 0.118034 > X[3,]%*%v1 [1,] 0 > X[3,]%*%v2 [1,] 0 15. Refaire l ACP du jeu de données initial (data) à l aide du menu déroulant de Rcmdr : Statistique Analyse multivariée Analyse en composantes principales (Choisir : analyser la matrice des corrélations et ajouter les composantes principales au jeu de données) Identifier, parmi les résultats proposés, ceux obtenus dans les questions précédentes : vecteurs et valeurs propres, composantes principales (à savoir les vecteurs renfermant les coordonnées des individus le long des axes factoriels).
> unclass(loadings(.pc)) # component loadings X1 0.7071068-0.7071068 X2 0.7071068 0.7071068 >.PC$sd^2 # component variances 1.6708204 0.3291796 > summary(.pc) # proportions of variance Importance of components: Standard deviation 1.2926022 0.5737418 Proportion of Variance 0.8354102 0.1645898 Cumulative Proportion 0.8354102 1.0000000 On retrouve au signe près (mais l orientation des axes est arbitraire) les mêmes vecteurs propres ainsi que les mêmes valeurs propres. En visualisant le jeu de données, il est possible de vérifier également que les composantes principales renferment bien les coordonnées des individus obtenues dans la question 14 (là encore, au signe près compte tenu de l orientation différente des axes). Complément à propos de l ACP à deux variables. Lorsqu une ACP normée est réalisée sur un tableau de données ne comportant que deux variables quantitatives x 1 et x 2, des propriétés intéressantes sont observées pour les valeurs propres et vecteurs propres obtenus : Les composantes des vecteurs propres sont toutes égales à ± 1 2 Les valeurs propres sont égales à 1 ± r(x 1, x 2 ), où r(x 1, x 2 ) est le coefficient de corrélation linéaire entre les variables x 1 et x 2. 1. Vérifier que les résultats obtenus satisfont ces deux propriétés. On a déjà vu que les coordonnées des vecteurs propres étaient données par : > unclass(loadings(.pc)) # component loadings X1 0.7071068-0.7071068 X2 0.7071068 0.7071068 De plus, comme r(x 1, x 2 ) = 0.671 on retrouve bien : λ 1 = 1 + r(x 1, x 2 ) = 1.671 et λ 2 = 1 r(x 1, x 2 ) = 0.329 2. Que se passe-t-il lorsque les deux variables étudiées sont de corrélation nulle? totalement corrélées? Lorsque les deux variables sont non corrélées (r(x 1, x 2 ) = 0), l analyse produit deux axes de valeurs égales à 1. Si au contraire les variables sont totalement corrélées (r(x 1, x 2 ) = 1), alors un seul axe (d inertie égale à 2) suffit à résumer parfaitement le jeu de données λ 2 = 1 r(x 1, x 2 ) = 0.329 > unclass(loadings(.pc)) # component loadings X1 0.7071068-0.7071068 X2 0.7071068 0.7071068
2. ACP des données Taille. 1. Importer le jeu de données taille.txt. Ce jeu de données décrit la taille (en mètres) de 87 élèves (garçons) de l école supérieure d agronomie de Rennes ainsi que la taille du père et celle de la mère de l étudiant. 2. Produire les statistiques descriptives (moyenne, écart-type, coefficients de variation, quartiles) pour les 3 variables du fichier. mean sd cv % n TailleEleve 1.804943 0.06821433 0.03779307 0 87 TailleMere 1.632644 0.05765696 0.03531509 0 87 TaillePere 1.770230 0.05402362 0.03051785 0 87 3. À l aide d une matrice de nuages de points, visualiser les relations 2 à 2 entre les 3 variables. Faire apparaître les histogrammes sur la diagonale puis les graphes quantilesquantiles. Commenter. 1.50 1.55 1.60 1.65 1.70 1.75 TailleEleve 1.65 1.75 1.85 1.95 1.50 1.55 1.60 1.65 1.70 1.75 TailleMere TaillePere 1.65 1.75 1.85 1.65 1.75 1.85 1.95 1.65 1.75 1.85 80 Z.TailleEleve 2 1 0 1 2 4 12 42 46 48 56 49 76 86 83 87 2 2 1 0 1 2 3 Z.TaillePere Visuellement, l intensité de la liaison entre la taille de l élève et la taille du père est la plus importante. Les deux autres liaisons sont sans doute positives, mais peu intenses. Les graphes de la diagonales (histogrammes et QQ-plot montrent un écart à la normalité plus important pour la variable élève (même si l on sait que l hypothèse d une taille distribuée normalement est en général acceptable.) 4. Calculer les valeurs des coefficients de corrélation associés à chacune des liaisons précédentes. Ces coefficients sont-ils significativement différents de zéro? TailleEleve TailleMere TaillePere TailleEleve 1.00 0.22 0.57 TailleMere 0.22 1.00 0.19
TaillePere 0.57 0.19 1.00 P TailleEleve TailleMere TaillePere TailleEleve 0.0405 0.0000 TailleMere 0.0405 0.0736 TaillePere 0.0000 0.0736 Le premier tableau confirme les résultats de l analyse graphique. Au seuil de risque de 5%, le second tableau montre une seule liaison non significative : celle entre la taille du père et la taille de la mère. 5. Centrer-réduire (= standardiser) les variables TailleEleve et TaillePere. 6. Un petit détour du côté de la régression... Construire un nuage de points avec les consignes suivantes : en ordonnée : la taille de l élève centrée réduite en abscisse : la taille du père centrée réduite Faire figurer la droite de régression (ligne des moindres carrés) et choisir décalage aléatoire en x et en y. Ajouter dans un second temps la droite d équation y = x. Retrouver au travers de ce graphique, les résultats célèbres de la régression dus au statisticien F. Galton. Z.TailleEleve 2 1 0 1 2 2 1 0 1 2 3 Z.TaillePere On remarque que la droite de régression permettant de prédire la taille d un fils à partir de celle de son père possède une pente inférieure à 1 (la bissectrice). Par conséquent, un père dont la taille s écarte de la moyenne de deux écarts types par valeur supérieure (respectivement inférieure) doit s attendre à avoir un fils dont la taille sera également supérieure (respectivement inférieure) à la moyenne (des fils), mais de moins de deux écarts types. Schématiquement : un père de grande (respectivement petite) taille s attend à un fils de grande (respectivement petite) taille, mais moins (respectivement plus) grand qu attendu.
7. Partant du même graphique qu à la question précédente, choisir l option Identifier les points à la souris et cliquer sur les individus les plus en périphérie du nuage ainsi que les plus proches du centre de gravité. (Attention! Ne pas oublier de faire un clic droit arrêter, afin de sortir du mode identification des points ; sinon : risque important de planter R!). 80 Z.TailleEleve 2 1 0 1 2 4 1 12 42 46 48 56 76 83 87 2 2 1 0 1 2 3 Z.TaillePere 8. Tracer (commande abline) les axes factoriels 1 et 2 de ce nuage de points. On a déjà vu que pour une ACP à deux variables, les axes factoriels peuvent être tracés sur le nuage de points des données centrées-réduites à l aide des deux bissectrices (commandes abline(0,1) et abline(0,-1)) 9. En déduire les observations qui ont les contributions les plus élevées aux axes 1 et 2. Rappel : en ACP, un élément contribue d autant plus à un axe qu il possède une coordonnée élevée (en valeur absolue) le long de cet axe, et que son poids est important. D après le graphique précédent, les individus 2, 80, 86 et 87 (de coordonnées importante le long de la première bissectrice) auront de fortes contributions à l axe 1. Selon un raisonnement similaire, les individus 12, 42, 76 et 83 posséderont une contribution élevée à l axe 2. 10. À l aide de FactoMiner, effectuer une ACP avec le paramétrage suivant : Variables actives : TailleEleve et TaillePere. Scale the variables (= centrer réduire les variables = ACP normée.) Onglet Outputs : cocher valeurs propres et résultats pour les individus. On vérifie à ce niveau les contributions exactes des individus cités plus haut. On peut obtenir les contributions triées à l aide des commandes suivantes : > sort(res$ind$contrib, decreasing=t) 2 87 86 80 85 81 7.4953331678 7.0165709859 5.4275961241 5.2113256849 4.6277533616 3.7088411688... > sort(res$ind$contrib[,2], decreasing=t) 83 76 12 42 3 1
8.4608901933 8.4107654363 4.7809310689 4.7432704591 4.6616654973 4.6616654973... 11. Construire le nuage de points en 3 dimensions pour les 3 variables centrées - réduites. Quelle sera selon vous la variable la plus liée au premier axe factoriel de ce nuage de points? 12. Effectuer l ACP normée des 3 variables du fichier. Que peut-on dire des individus 74,75 et 51,52? Valider votre conclusion en consultant les valeurs de ces individus dans le tableau de données. Individuals factor map (PCA) Variables factor map (PCA) Dim 2 (29.25%) 4 2 0 2 2 15 20 16 22 431 14 23 51 41 52 11 13 2930 40 5354 17 8 18 21 2633 68 42 44 36 43 7662 32 34 35 27 49 567 1931 48 50 71 78 5859 566761 69 70 77 79 724645 8586 25 37 3865 66 64 24 8360 8180 87 9 47 12 28 6355 82 10 73 39 84 57 75 74 Dim 2 (29.25%) 1.0 0.5 0.0 0.5 1.0 TailleMere TailleEle TailleP 2 0 2 Dim 1 (56.4%) 1.0 0.5 0.0 0.5 1.0 Dim 1 (56.4%) Les trois variables sont corrélées positivement avec l axe 1. Les quatre individus étant situés du côté positif de l axe 1, ceux-ci ont tendance à être plus grand que la moyenne, de même que leurs deux parents. Toutefois, les individus 51 et 52 étant positionnés du côté positif de l axe 2, on peut affirmer que leur mère est plutôt de grande taille, contrairement aux individus 74 et 75 dont la mère est sans doute plus petite que la moyenne. Ce constat est facilement vérifiable en consultant le jeu des données centrées réduites. 13. Découper la variable TailleMère en 4 classes de même effectif avec les étendues comme nom de niveaux ; donner un nom à la nouvelle variable construite (de nature qualitative ou de type facteur selon la terminologie du logiciel R). Le découpage en une variable à quatre modalités fournissant des effectifs très différents (malgré l option même effectif ) on a opté pour un découpage en cinq classes, d effectifs plus équilibrés : Mère4classes Mère5classes [1.49,1.6] :26 [1.49,1.58]:19 (1.6,1.65] :34 (1.58,1.63]:21 (1.65,1.67]: 5 (1.63,1.65]:20 (1.67,1.75]:22 (1.65,1.68]:12 (1.68,1.75]:15
14. Réaliser à nouveau l ACP en étudiant cette dernière variable comme facteur supplémentaire. Dans les options graphiques, colorier les individus selon la variable taille de la mère en 4 classes. On obtient la représentation factorielle ci-dessous : Individuals factor map (PCA) Variables factor map (PCA) Dim 2 (29.25%) 4 2 0 2 [1.49,1.58] 15 2 20 16 22 431 14 23 51 (1.58,1.63] 41 52 (1.63,1.65] (1.65,1.68] 11 13 2930 40 5354 (1.68,1.75] 17 8 18 21 2633 68 42 44 36 43 7662 (1.68,1.75] 32 34 35 27 49 567 1931 48 50 71 78 (1.63,1.65] (1.65,1.68] 5859 566761 69 70 77 79 (1.58,1.63] 724645 8586 25 37 3865 66 64 24 8360 8180 87 [1.49,1.58] 9 47 12 28 6355 82 10 73 39 84 57 75 74 Dim 2 (29.25%) 1.0 0.5 0.0 0.5 1.0 TailleMere TailleEle TailleP 2 0 2 Dim 1 (56.4%) 1.0 0.5 0.0 0.5 1.0 Dim 1 (56.4%) On visualise sur le plan des individus cinq nuages de points bien séparés correspondant à des élèves dont la mère est de plus en plus grande au fur et à mesure que l on s éloigne dans la direction indiquée par la variable TailleMère. 3. Utilisation du package dyngraph Le package dyngraph permet de modifier de façon interactive un plan factoriel issu d une analyse factorielle (ACP, AFC, etc.) Il peut être également employé pour visualiser et analyser la liaison entre n importe quel couple de variables quantitatives du jeu de données. 1. Charger le package dyngraph. 2. Exécuter la commande : dyngraph(res) (res étant l objet dans lequel sont stockés les résultats de l ACP.) 3. Visualiser le premier plan (axes 1 et 2) des individus et des variables, puis le plan des individus et des variables engendrés par les axes 1 et 3. 4. Sur le premier plan, habiller les individus en fonction de leur qualité de représentation ; de leur contribution (essayer les options Nuage ou Bulle). Habiller les individus en fonction de la variable quantitative taille de la mère. 5. À l aide du curseur sur la gauche du plan, ne conserver sur le plan que les individus dont la qualité de représentation est supérieure à 0.8. 6. Rechercher un individu moyen (dont les valeurs sont proches de la moyenne pour les 3 variables).