Analyse en Composantes Principales (ACP) et Exploration graphique interactive dans R

Dunod
Page 1 sur 20Lecteur de document UniversityLib

Analyse en Composantes Principales (ACP) et Exploration graphique interactive dans R

Data Analysis and Statistics · notes

Voir tous les documents en biologie et santé

Références : 1.

G. Saporta, « Probabilités, Analyse de données et Statistique », Dunod, 2006 ; partie théorique, pages 155 à 177 ; partie pratique, pages 177 à 181. Tutoriels Tanagra, « ACP – Description de véhicules », http://tutoriels-data- mining.blogspot.com/2008/03/acp-description-de-vhicules.html ; description des mêmes calculs sous le logiciel Tanagra. F. Husson, J. Josse, S. Le, J. Pages, Le package FactoMineR pour R ; http://factominer.free.fr/ S. Le, J. Durand, Le package dynGraph pour R ; http://dyngraph.free.fr/

2.

3.

4.

1

Objectif de l’étude Description d’une série de véhicules

Objectifs de l’étude Ce document reproduit une étude décrite dans un précédent tutoriel, basée sur la procédure princomp() de R (http://tutoriels-data-mining.blogspot.com/2009/05/analyse-en-composantes-principales-avec.html). Nous utilisons la procédure PCA du package FactoMineR cette fois-ci. Nous complétons l’analyse avec une exploration graphique interactive à l’aide de dynGraph. Les résultats sont absolument cohérents (heureusement !!!). On se rendra compte surtout que beaucoup choses ont été mis en place pour nous faciliter la tâche (ex. calcul des coordonnées, des valeurs tests, etc. pour les variables supplémentaires).

Nous reprenons une analyse décrite dans l’ouvrage de Saporta, pages 177 à 181. Le traitement des variables illustratives quantitatives a été rajoutée. Les justifications théoriques et les formules sont disponibles dans le même ouvrage, pages 155 à 177.

D’autres références ont été utilisées (Lebart et al., Dunod, 200 ; Tenenhaus, Dunod, 2006).

Traitements réalisés • • • • • • •

Réaliser une ACP sur un fichier de données. Afficher les valeurs propres. Construire le graphiques éboulis des valeurs propres. Construire le cercle de corrélations. Projeter les observations dans le premier plan factoriel. Positionner des variables illustratives quantitatives dans le cercle des corrélations. Positionner les modalités d’une variable illustrative catégorielle. Exploration graphique interactive à l’aide de dynGraph

Données disponibles

Label des observations

Variables actives

Variables illustratives qualitatives (FINITION) et quantitatives (PRIX et R-POIDS.PUIS)

2

ModeleCYLPUISSLONGLARGPOIDSV-MAXFINITIONPRIXR-POID.PUISAlfasud TI1350793931618701652_B3057011.01Audi 10015888546817711101603_TB3999013.06Simca 130012946842416810501521_M2960015.44Citroen GS Club1222594121619301511_M2825015.76Fiat 13215859843916411051652_B3490011.28Lancia Beta12978242916910801603_TB3548013.17Peugeot 50417967944916911601542_B3230014.68Renault 16 TL15655542416310101402_B3200018.36Renault 30266412845217313201803_TB4770010.31Toyota Corolla1166553991578151401_M2654014.82Alfetta-1.66157010942816210601753_TB423959.72Princess-180017988244517211601582_B3399014.15Datsun-200L199811546916913701603_TB4398011.91Taunus-200019939843817010801672_B3501011.02Rancho14428043116611291443_TB3945014.11Mazda-929517698344016510951651_M2790013.19Opel-Rekord197910045917311201732_B3270011.20Lada-13001294684041619551401_M2210014.04Fichier de données Importation, statistiques descriptives et graphiques

#librairie lecture fichier excel library(xlsx) #changement de répertoire setwd("c:/mon répertoire/...") #chargement des données dans la première feuille de calcul #les données sont dans la première feuille autos.data <- read.xlsx(file="autos_acp_factominer_dyngraph.xls",header=T,sheetIndex=1) #première colonne = label (étiquette) des observations rownames(autos.data) <- autos.data[,1] autos.data <- autos.data[,-1] #qqs vérifications - affichage print(autos.data) #statistiques descriptives summary(autos.data) #nuages de points pairs(autos.data)

FINITION est une variable qualitative. En général, son introduction dans ce type de graphique n’est pas très indiquée. Néanmoins, on remarquera qu’on peut parfois en tirer des informations utiles : par exemple, ici, selon la finition, les prix sont différents.

3

CYL6012016017514017025000150060120PUISSLONG400460160175LARGPOIDS8001300140170V.MAXFINITION1.02.525000PRIX150040046080013001.02.510161016R.POID.PUISAnalyse en composantes principales Utiliser la procédure « PCA » de FactoMineR - Résultats immédiats

#centrage et réduction des données --> scale.unit = T #quanti.sup -> numéro des colonnes des var. quanti. supp. #quali.sup -> numéro des colonnes des var. quali. supp. #pas de graphiques pour l'instant -> graph = F autos.acp <- PCA(autos.data,scale.unit = T,quanti.sup=8:9,quali.sup=7,graph=F) #obtenir les propriétés de l'objet autos.acp print(autos.acp)

L’objet PCA fournit des informations très complètes sur les résultats de l’ACP, entres autres : (1) les valeurs propres ; (4) les corrélations des variables avec les axes factoriels ; (5) les cos2 des variables (carré des corrélations) avec les axes ; (6) les contributions des variables aux axes ; (8) les coordonnées des individus ; (9) les cosinus carrés des individus ; (10) les contributions des individus ; (11 à 16) les résultats pour les individus et / ou variables supplémentaires…

4

Valeurs propres associés aux axes Calcul, intervalles de confiance et Scree Plot

#obtenir les variances associées aux axes c.-à-d. les valeurs propres val.propres <- autos.acp$eig[,1] #scree plot (graphique des éboulis des valeurs propres) plot(1:6,val.propres,type="b",ylab="Valeurs propres",xlab="Composante",main="Scree plot") #intervalle de confiance des val.propres à 95% (Saporta, page 172) n <- nrow(autos.data) val.basse <- val.propres * exp(-1.96 * sqrt(2.0/(n-1))) val.haute <- val.propres * exp(+1.96 * sqrt(2.0/(n-1))) #tableau tableau <- cbind(val.basse,val.propres,val.haute) colnames(tableau) <- c("B.Inf.","Val.","B.Sup") print(tableau,digits=3)

Les deux premiers axes traduisent 88% de l’information disponible. On se rend compte ici qu’on pouvait s’en tenir uniquement au premier facteur.

Publicité

Mais c’est moins pratique pour les graphiques ; on suspecte aussi un « effet taille » dans les données. On va donc conserver les deux premiers facteurs.

Les intervalles de confiance d’Anderson ne sont licites que si le nuage de points est gaussien. On ne l’affiche donc qu’à tire indicatif (cf. formules page 172 de Saporta).

5

12345601234Scree plotComposanteValeurs propresCercle des corrélations Variables actives

#**** corrélation variables-facteurs **** print(autos.acp$var$cor[,1:2],digits=2)

#carrés de la corrélation = cos2 print(autos.acp$var$cos2[,1:2],digits=2)

#cumul carrés de la corrélation print(t(apply(autos.acp$var$cos2[,1:2],1,cumsum)),digits=2)

#*** cercle des corrélations - variables actives *** plot(autos.acp,choix="var",title="Cercle des corrélations", invisible="quanti.sup")

Corrélation variables – facteurs.

Carré de la corrélation.

Carré cumulé. Au sixième axe, toutes les valeurs sont égales à 1.

6

-1.0-0.50.00.51.0-1.0-0.50.00.51.0Cercle des corrélationsDim 1 (73.68%)Dim 2 (14.27%)CYLPUISSLONGLARGPOIDSV.MAXCarte des individus sur les 2 premiers axes Individus actifs

invisible = "quali" -> ne pas afficher les variables quali supplémentaires plot(autos.acp,choix="ind",title="Individus - 1er plan",invisible="quali")

7

-4-2024-2-1012Individus - 1er planDim 1 (73.68%)Dim 2 (14.27%)Alfasud TIAudi 100Simca 1300Citroen GS ClubFiat 132Lancia BetaPeugeot 504Renault 16 TLRenault 30Toyota CorollaAlfetta-1.66Princess-1800Datsun-200LTaunus-2000RanchoMazda-9295Opel-RekordLada-1300Description automatique des axes Identifier les variables qui influent le plus dans la définition des axes

#**************************************************************************** #*** Caractérisation automatique des axes - Husson, Le, Pages, pages 23 à 25 #**************************************************************************** dimdesc(autos.acp, axes = 1:2, proba = 0.05)

Objectif : Identifier les variables qui pèsent le plus dans la définition des axes. Via un test de significativité de corrélation pour les variables quantitatives ; et une ANOVA à un facteur pour les variables qualitatives (couplée avec un test de Student pour chaque modalité).

Attention, le « test » est biaisé pour les variables actives qui ont participé à la construction des axes. Les résultats sont donnés pour guider l’interprétation.

Voir F. Husson, S. Le, J. Pages, « Analyse de données avec R », PUR, 2009 ; pages 23 à 25.

8

COSINUS² des individus avec les composantes Qualité de représentation des individus sur les composantes

#directement fournis par l'objet PCA #ici pour les 2 premiers axes autos.acp$ind$cos2[,1:2]

La somme pour chaque ligne (individu) vaut 1 si l’on prend l’ensemble des composantes (les 6 composantes).

Cf. formules dans Tenenhaus, 2006 ; page 162.

9

CONTRIBUTION des individus aux composantes Déterminer les individus qui pèsent le plus dans la définition d’une composante

#directement fournis par l'objet PCA #ici pour les 2 premiers axes autos.acp$ind$contrib[,1:2]

Publicité

La somme pour chaque colonne (composante) vaut 100.

cf. Saporta, page 175.

Remarque : toutes les observations ont le même poids dans notre exemple.

10

Variables quantitatives illustratives Positionnement dans le cercle des corrélations

#*** cercle des corrélations - variables actives ET illustratives *** plot(autos.acp,choix="var",title="Cercle des corrélations") #corrélation et cosinus carré avec les deux premiers axes print(cbind(autos.acp$quanti.sup$cor[,1:2],autos.acp$quanti.sup$cos2[,1:2]))

La représentation simultanée est autrement plus instructive.

La forte corrélation entre une variable illustrative et un axe est d’autant plus intéressante que la variable n’a pas participé à la construction de l’axe.

11

-1.0-0.50.00.51.0-1.0-0.50.00.51.0Cercle des corrélationsDim 1 (73.68%)Dim 2 (14.27%)CYLPUISSLONGLARGPOIDSV.MAXPRIXR.POID.PUISVariables qualitatives illustratives Positionner les groupes associés aux modalités de la variable illustrative

#position dans le plan factoriel - barycentre pour chaque moda. de la var.quali plot(autos.acp,choix="ind",title="Individus - 1er plan") #coloriage différent des individus pour chaque moda. de la var.quali n°7 plot(autos.acp,choix="ind",title="Individus - 1er plan",habillage=7)

12

-4-2024-2-10123Individus - 1er planDim 1 (73.68%)Dim 2 (14.27%)Alfasud TIAudi 100Simca 1300Citroen GS ClubFiat 132Lancia BetaPeugeot 504Renault 16 TLRenault 30Toyota CorollaAlfetta-1.66Princess-1800Datsun-200LTaunus-2000RanchoMazda-9295Opel-RekordLada-13001_M2_B3_TB-4-2024-3-2-10123Individus - 1er planDim 1 (73.68%)Dim 2 (14.27%)Alfasud TIAudi 100Simca 1300Citroen GS ClubFiat 132Lancia BetaPeugeot 504Renault 16 TLRenault 30Toyota CorollaAlfetta-1.66Princess-1800Datsun-200LTaunus-2000RanchoMazda-9295Opel-RekordLada-13001_M2_B3_TB1_M2_B3_TBVariables qualitatives illustratives Moyennes conditionnelles et valeurs test – Ellipses de confiance

#moyennes conditionnelles et valeur test carac.quali <- cbind(autos.acp$quali.sup$coord[,1:2],autos.acp$quali.sup$v.test[,1:2]) print(carac.quali) #ellipse de confiance des modalités dans le plan factoriel #créer un nouveau data.frame pour calculer les ellipse new.autos <- cbind(as.data.frame(autos.data$FINITION),as.data.frame(autos.acp$ind$coord[,1:2])) #calculer les ellipse de dispsersion autour des barycentres dans le plan finition.ellipse <- coord.ellipse(new.autos,bary=T) #représentation graphique plot(autos.acp,ellipse=finition.ellipse,habillage=7)

Moyennes conditionnelles

Valeurs test

La valeur test essaie de caractériser la « significativité » de l’écart par rapport à la moyenne globale.

Cf. Saporta, page 177. On considère qu’il y a un écartement significatif lorsqu’elle est supérieure, en valeur absolue, à 2 voire 3.

Dans notre exemple, les véhicules se différencient véritablement par la FINITION sur le premier axe factoriel.

Ellipse de confiance des barycentres des modalités de la variable illustrative FINITION

13

-4-2024-3-2-10123Individuals factor map (PCA)Dim 1 (73.68%)Dim 2 (14.27%)Alfasud TIAudi 100Simca 1300Citroen GS ClubFiat 132Lancia BetaPeugeot 504Renault 16 TLRenault 30Toyota CorollaAlfetta-1.66Princess-1800Datsun-200LTaunus-2000RanchoMazda-9295Opel-RekordLada-13001_M2_B3_TB1_M2_B3_TBExploration graphique interactive dynGraph – Démarrage et interface – Onglet « Carte des individus »

#************************************************ # exploration graphique interactive avec dynGraph #************************************************

#lancer l'outil d'exploration interactive dynGraph(autos.acp)

Onglet : Carte des individus

Onglet : Carte des variables

Onglet : Plan formé par les variables originelles

Les barycentres des modalités des variables illustratives sont positionnées automatiquement

Publicité

14

Exploration graphique interactive dynGraph – Le menu « Fichier »

Essentiellement : (1) Charger / Sauver la configuration courante

dans un format propriétaire

(2) Exporter les cartes dans un format graphique (PNG, EMF, PDF, …)

Exemple : Exportation au format PNG, ouvert

dans MS Office Picture Manager

15

Exploration graphique interactive dynGraph – Filtrer les individus selon le COS²

Idée : N’afficher que les individus bien représentés sur les deux premiers axes. On filtre les individus par le cos². Attention, il s’agit du cumul des cos² sur les axes choisis (les deux premiers ici, seuil fixé à 0.9).

16

Exploration graphique interactive dynGraph – Habillage des individus selon…

Mettre en évidence les individus selon leur contribution aux axes

Mettre en évidence les individus selon la valeur prise par une variable. Par ex. le prix. La Renault 30 est une voiture lourde, puissante, … et chère. L’Alfetta-1.66, malgré sa position sur le premier axe, est aussi une voiture chère ! Elle l’est par sa sportivité, rapport poids puissance faible, et par sa finition. – Université

17

Exploration graphique interactive dynGraph – Habillage des individus selon…

Habillage des individus selon les modalités d’une variable qualitative.

Bien entendu, nous avons la possibilité de choisir les axes factoriels.

18

Exploration graphique interactive dynGraph – Carte des variables

Cercle des corrélations…

Que l’on peut filtrer aussi avec le cos²

19

20