You are on page 1of 31

L'analyse des donnes multivaries l'aide du logiciel

L'analyse factorielle des correspondances multiples (A.F.C.m.)


Montpellier

2 mars 2010
Andr Bouchier

Analyse factorielle des correspondances multiples - 02/03/2010

p.1/31

2010, Andr Bouchier (2 Mars 2010) http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ Le document L'analyse factorielle des correspondances multiples by A.Bouchier est mis disposition selon les termes de la licence Creative Commons Paternit-Pas d'Utilisation Commerciale-Partage des Conditions Initiales l'Identique 2.0 France.

Analyse factorielle des correspondances multiples - 02/03/2010

p.2/31

1.Avant propos :
l Pr-recquis On suppose connues les bases du logiciel R ainsi que quelques notions de statistiques concernant les analyses factorielles. l Les fonctions utilises : Les fonctions utilises pour cette analyse sont disponibles dans les bibliothques standard de R et dans la bibliothque ade4. Pour aider la comprhension, l'criture des programmes sera dtaille. Par la suite, vous pourrez condenser cette criture. Mais n'oubliez pas de les commenter abondamment.

Analyse factorielle des correspondances multiples - 02/03/2010

p.3/31

2.La mthode (1):


l Lorsque les variables sont quantitatives et les relations linaires, la mthode approprie est l'analyse en composantes principales. l Lorsque le tableau de donnes croise 2 variables qualitatives, c'est un tableau de contingence . La mthode d'analyse approprie est l'analyse des correspondances simples. l Mais lorsque les donnes sont un mlange de variables qualitatives et quantitatives, ou contenant des relations non linaires, il n'existe pas de mthode spcifique.

Analyse factorielle des correspondances multiples - 02/03/2010

p.4/31

3.La mthode (2):


l Dans un premier temps, les donnes quantitatives sont dcoupes en classes. L'objectif est d'obtenir un tableau de donnes qualitatives. l Puis on transforme les donnes de faon obtenir un tableau disjonctif. Ce tableau disjonctif peut-tre considr comme un tableau de frquence. On peut alors le soumettre l'analyse factorielle des correspondances. l L'analyse factorielle des correspondances multiples permet d'obtenir un rsum pertinent d'un tableau de donnes disjonctif. Ce rsum peut-tre projet sur un plan. On visualise ainsi les relations les plus marquantes du tableau de donnes.

Analyse factorielle des correspondances multiples - 02/03/2010

p.5/31

4.Exemple de prparation de donnes


Un extrait de tableau de donnes : Numro Parcelle 01 02 03 04 05 Culture Bl Bl Riz Jachre Riz Surface 5.3 8.2 2.0 1.5 3.4 Dure Prcdent 2 1 3 1 2 Anne 1987 1996 1988 1988 1988

Analyse factorielle des correspondances multiples - 02/03/2010

p.6/31

5.Codage des donnes


l L'AFC ne peut traiter que des tableaux de nombres. L'opration de codage va

permettre de transformer les donnes pour rendre le traitement par l'AFC possible. donnes brutes
Parcelle

01 02 03 04 05

Bl Bl Riz Jachre Riz


Culture

Culture

Surface

5.3 8.2 2.0 1.5 3.4

Prcdent

2 1 3 1 2

Anne

1987 1996 1988 1988 1988

donnes codes
Parcelle Surface Prcdent Anne

01 02 03 04 05

1 1 2 3 2

2 3 1 1 2

2 1 3 1 2

1 3 2 2 2
p.7/31

Analyse factorielle des correspondances multiples - 02/03/2010

6.Le tableau disjonctif


l Transformation des modalits du tableau cod en variable disjonctives.

Les donnes brutes


Parcelle Culture Surface Prcdent Anne

01 02 03 04 05

1 1 2 3 2

2 3 1 1 2

2 1 3 1 2

1 3 2 2 2 Anne 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0
p.8/31

Tableau disjonctif complet Culture Surface Prcd.


Bl Riz Jach Faible Moy Eleve

1 2 3 87 88 96

01 02 03 04 05

1 1 0 0 0

0 0 1 0 1

0 0 0 1 0

0 0 1 1 0

1 0 0 0 1

0 1 0 0 0

0 1 0 1 0

1 0 0 0 1

0 0 1 0 0

Analyse factorielle des correspondances multiples - 02/03/2010

7.Nommer les modalits


l Chaque modalit disjonctive va recevoir un nom

01 02 03 04 05

Cu1 Cu2 Cu3 Surf1 Surf2 Surf3 Pr1 Pr2 Pr3 A1 A2 A3 1 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0

l Le nom des modalits doit tre choisi afin de rester lisible une fois projet sur le

plan factoriel

Analyse factorielle des correspondances multiples - 02/03/2010

p.9/31

8.La prparation des donnes


l 1
re

tape : les donnes sont codes

Les donnes quantitatives sont dcoupes en classes Les donnes qualitatives sont conserve sans modification. Pour viter des effectifs de classe trop faibles, on peut aussi regrouper des modalits Dans cette tape, les logiciels demande souvent de nommer les diffrentes modalits
l 2
me

tape : le tableau cod est transform en tableau disjonctif

Cette tape est souvent effectue par les logiciels sans intervention de l'utilisateur
l 3

tape : une analyse des correspondances est effectue sur le tableau disjonctif
me

Analyse factorielle des correspondances multiples - 02/03/2010

p.10/31

9.Codage des donnes, en rsum :

Tableau des donnes Brutes

Tableau des donnes codes

Tableau disjonctif complet

AFC multiple
Analyse factorielle des correspondances multiples - 02/03/2010 p.11/31

10.Les donnes d'exemple :


l Le tableau des donnes bledur.txt contient 50 observations et 11 variables. Il contient les rsultats d'un suivi agronomique sur 50 parcelles de bl dur.
RDT PLM ZON ARG LIM SAB VRT PGM MST AZP VRTC Rendement en grains Nb de plantes par m Zone gographique Taux d'argile de la parcelle Taux de limon de la parcelle Taux de sable de la parcelle Varit cultive Poids de 1000 grains Matire sche totale la rcolte Azote dans la plante la rcolte Varit cultive (code en 3 classes)
p.12/31

Analyse factorielle des correspondances multiples - 02/03/2010

11.Lecture des donnes :


don<-read.table(file.choose(), sep=" ", header=T, dec=",")

1 2 3 4 5 6 7 8 9

Numero RDT PLM ZON ARG LIM SAB VRT PGM MST AZP VRTC 1 6.490 84 1 21.5 60.6 17.9 3 43.10 34.49 3.82 2 2 15.580 112 1 21.0 58.3 20.7 3 38.30 39.18 3.78 2 3 7.290 68 1 26.2 47.6 26.2 3 45.30 26.89 2.61 2 4 1.090 88 1 29.7 54.5 15.8 3 29.09 23.09 3.78 2 5 5.100 174 1 22.8 59.0 18.2 3 42.80 18.10 3.41 2 6 2.030 63 1 19.6 68.0 12.4 3 41.26 20.43 3.04 2 7 6.330 92 1 26.7 53.7 19.6 3 38.57 20.93 2.26 2 8 17.300 117 1 34.0 44.9 21.1 1 31.80 40.70 3.85 1 9 6.970 58 1 16.7 57.6 25.7 4 42.40 29.97 2.69 3 .../...

Analyse factorielle des correspondances multiples - 02/03/2010

p.13/31

12.Codage des donnes (1):


l Ce tableau de donnes contient des valeurs quantitatives et qualitatives. Il faut, dans un premier temps, le transformer en donnes uniquement qualitatives. l Chaque variable quantitative sera dcoupe en 3 classes d'effectifs gaux. Pour cela, nous utiliserons la fonction codage() - (voir annexe) source("K:/R/r/Rwindows/data/FonctionsR/codage.R") RDT<-codage(don$RDT) PLM<-codage(don$PLM) ARG<-codage(don$ARG) LIM<-codage(don$LIM) SAB<-codage(don$SAB) PGM<-codage(don$PGM) MST<-codage(don$MST) AZP<-codage(don$AZP)
Analyse factorielle des correspondances multiples - 02/03/2010 p.14/31

13.Codage des donnes (1):


l Les variables qualitatives seront transformes en facteurs ZON<-as.factor(don$ZON) VRTC<-as.factor(don$VRTC)

Analyse factorielle des correspondances multiples - 02/03/2010

p.15/31

14.Mise en forme des donnes codes :


l Le tableau des donnes codes : doncd<-data.frame(RDT,PLM,ARG,LIM,SAB,PGM,MST,AZP,ZON,VRTC) row.names(doncd)<-don$Numero doncd
RDT PLM ARG LIM SAB PGM MST AZP ZON VRTC 1 1 1 2 3 1 3 2 3 1 2 2 3 2 2 3 1 2 3 3 1 2 3 1 1 2 3 1 3 1 1 1 2 4 1 1 3 3 1 1 1 3 1 2 5 1 3 2 3 1 3 1 2 1 2 6 1 1 2 3 1 2 1 2 1 2 7 1 1 2 3 1 2 1 1 1 2 8 3 2 3 3 1 1 3 3 1 1 9 1 1 1 3 1 3 2 1 1 3 10 3 2 3 3 1 3 3 3 1 3 .../...
Analyse factorielle des correspondances multiples - 02/03/2010 p.16/31

15.Vrification du codage des donnes :


summary(doncd)
RDT 1:17 2:16 3:17 PLM 1:17 2:16 3:17 ARG 1:17 2:16 3:17 LIM 1:17 2:16 3:17 SAB 1:17 2:16 3:17 PGM 1:17 2:16 3:17 MST 1:17 2:16 3:17 AZP 1:17 2:16 3:17 ZON 1:17 2:15 3:18 VRTC 1:24 2:21 3: 5

l Pour tre pertinent, un dcoupage en classes doit respecter 3 principes : 1) Pas d'effectifs de classes trop dsquilibrs 2) Des nombres de classes semblables pour toutes les variables 3) Des dcoupages ayant une signification pour le chercheur

Analyse factorielle des correspondances multiples - 02/03/2010

p.17/31

16.Transformation des donnes en tableau disjonctif :


l Utilisation de la library ade4 : library(ade4) l Cration du tableau disjonctif : disj<-acm.disjonctif(doncd) l Un extrait du tableau disjonctif :
RDT.1 RDT.2 RDT.3 PLM.1 PLM.2 PLM.3 ARG.1 ARG.2 ARG.3 LIM.1 LIM.2 LIM.3 SAB.1 SAB.2 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 2 0 0 1 0 1 0 0 1 0 0 0 1 1 0 3 1 0 0 1 0 0 0 1 0 0 0 1 1 0 4 1 0 0 1 0 0 0 0 1 0 0 1 1 0 5 1 0 0 0 0 1 0 1 0 0 0 1 1 0 6 1 0 0 1 0 0 0 1 0 0 0 1 1 0 7 1 0 0 1 0 0 0 1 0 0 0 1 1 0 8 0 0 1 0 1 0 0 0 1 0 0 1 1 0 9 1 0 0 1 0 0 1 0 0 0 0 1 1 0 10 0 0 1 0 1 0 0 0 1 0 0 1 1 0 11 1 0 0 1 0 0 0 0 1 0 0 1 1 0 12 0 1 0 1 0 0 0 0 1 0 0 1 0 1 .../...
Analyse factorielle des correspondances multiples - 02/03/2010 p.18/31

17.L'A.F.C.m. - fonction dudi.coa() de la bibliothque ade4 :


l Les rsultats de l'AFC sont stocks dans la variable z z<-dudi.coa(df = disj, scannf = FALSE, nf = 3) l L'boulis des valeurs propres 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 %

l Les valeurs propres round(z$eig,3)


% d'inertie

[1] 0.369 0.277 0.204 0.185 0.159 l Les valeurs propres en % round(z$eig/sum(z$eig)*100,2) [1] 18.45 13.86 10.18 9.26 7.96

0 18.45

10

15

9.26

7.29

5.05

3.65

2.39

1.64

1.06

0.65

0.19

Analyse factorielle des correspondances multiples - 02/03/2010

p.19/31

18.Une reprsentation graphique du plan factoriel :


scatter.coa(z, method = 1, sub = "Bl dur", posieig = "none")
d = 0.5

7 6

RDT.1 PLM.1 MST.1

3 4 11 9 5 1

ZON.1 LIM.3 SAB.1

20 19 44

33 36 18

ARG.1 LIM.1 SAB.3 43

46 37

AZP.1
30 34 35 50 39

AZP.2
28

PGM.2 VRTC.2 12 ARG.2


14 17 8

2 15 10

ZON.3 RDT.245

MST.2 PGM.1 VRTC.1 26


40 38 49 42 21 23

PGM.3
13 PLM.2 22 PLM.3 47 29 48 24

VRTC.3 41 16 ARG.3 AZP.3

27

ZON.2

RDT.3 MST.3
25 31 32

SAB.2 LIM.2

Bl dur
Analyse factorielle des correspondances multiples - 02/03/2010 p.20/31

19.Une autre reprsentation du plan factoriel, les variables :


plot(z$co[,1],z$co[,2],type="n",xlab="Axe 1",ylab="Axe 2", xlim=c(-1.4,1.4)) text(z$co[,1], z$co[,2], label= colnames(disj)) title("Bl dur - plan des variables") Bl dur - plan des variables abline(h=0,v=0)
1.0 RDT.1 PLM.1 MST.1 ZON.1 LIM.3 SAB.1

0.5

Axe 2

0.0

ARG.1 LIM.1 SAB.3

AZP.1 AZP.2 MST.2 PGM.1 VRTC.1

PGM.2 VRTC.2 ARG.2

PGM.3 VRTC.3 ARG.3 AZP.3 PLM.2 PLM.3 RDT.3 MST.3 SAB.2 LIM.2

ZON.3 RDT.2 -0.5

ZON.2

-1.5

-1.0

-0.5

0.0 Axe 1

0.5

1.0

1.5

Analyse factorielle des correspondances multiples - 02/03/2010

p.21/31

20.Une autre reprsentation du plan factoriel, les individus :


plot(z$li[,1],z$li[,2],type="n",xlab="Axe 1",ylab="Axe 2", xlim=c(-1.4,1.4)) text(z$li[,1], z$li[,2], label=row.names(disj)) title("Bl dur - Plan des individus") Bl dur - Plan des individus abline(h=0,v=0)
1.0 76 3 4 11 5 1 9 0.5

Axe 2

0.0

20 19 33 44 36 18 37 46 43 34

12 39 28 30 50 35 26 45 38 49 42 21 40 23 13 22 29 47 48 24 14 27 17

2 15 8 10

4116

-0.5

-1.0

25 31 32 -1.5 -1.0 -0.5 0.0 Axe 1 0.5 1.0 1.5

Analyse factorielle des correspondances multiples - 02/03/2010

p.22/31

21.Interprtation des facteurs : contributions des variables :


l Contributions des variables la construction des axes :

inertia.dudi(z,col.inertia = T)$col.abs Comp1 Comp2 Comp3 RDT.1 52 1178 122 RDT.2 265 128 125 RDT.3 528 544 0 PLM.1 76 966 305 PLM.2 29 188 80 PLM.3 12 317 683 .../... ZON.1 803 783 1 ZON.2 25 367 1101 ZON.3 528 94 873 VRTC.1 123 52 3 VRTC.2 30 96 270 VRTC.3 169 19 882 -----------------------Somme 10000 10000 10000
Analyse factorielle des correspondances multiples - 02/03/2010 p.23/31

22.Interprtation des facteurs : contributions des individus : l Contributions des lignes la construction des axes : inertia.dudi(z,row.inertia = T)$row.abs Axis1 Axis2 Axis3 1 151 444 159 2 511 25 67 3 51 774 136 4 173 555 76 5 98 434 9 6 72 900 0 7 53 891 3 8 476 2 88 9 31 413 832 10 770 3 55 11 174 546 66 .../... --------------------Somme 10000 10000 10000
Analyse factorielle des correspondances multiples - 02/03/2010 p.24/31

23.Une aides l'interprtation - axe 1 :


modal<-as.data.frame(z$co) modal<-modal[sort.list(modal$Comp1),] dotchart(modal[,1],labels = row.names(modal),cex=0.8) title(sub="Rpartition des modalits sur l'axe 1") abline(v=0)
SAB.1 LIM.3 ZON.1 ARG.3 MST.3 VRTC.3 RDT.3 AZP.3 PLM.2 PGM.2 VRTC.2 PGM.3 ARG.2 PLM.3 SAB.2 LIM.2 ZON.2 AZP.2 RDT.1 PLM.1 PGM.1 VRTC.1 MST.2 MST.1 AZP.1 RDT.2 ZON.3 ARG.1 LIM.1 SAB.3

-1.0

-0.5

0.0

0.5

1.0

Rpartition des modalits sur l'axe 1

Analyse factorielle des correspondances multiples - 02/03/2010

p.25/31

24.Une aides l'interprtation - axe 2 :


modal<-as.data.frame(z$co) modal<-modal[sort.list(modal$Comp2),] dotchart(modal[,2],labels = row.names(modal),cex=0.8) title(sub="Rpartition des modalits sur l'axe 2") abline(v=0)
RDT.1 PLM.1 MST.1 ZON.1 LIM.3 SAB.1 PGM.2 VRTC.2 ARG.2 AZP.2 AZP.1 ARG.1 LIM.1 SAB.3 MST.2 PGM.1 PGM.3 VRTC.1 VRTC.3 ZON.3 ARG.3 AZP.3 RDT.2 PLM.2 PLM.3 ZON.2 RDT.3 MST.3 SAB.2 LIM.2

-0.5

0.0

0.5

1.0

Rpartition des modalits sur l'axe 2

Analyse factorielle des correspondances multiples - 02/03/2010

p.26/31

25.Le programme complet :


#lecture des donnes don<-read.table(file.choose(),sep=" ",header=T,dec=",") #bledur.txt #codage des donnes quantitatives source("K:/R/r/Rwindows/data/FonctionsR/codage.R") RDT<-codage(don$RDT) PLM<-codage(don$PLM) ARG<-codage(don$ARG) LIM<-codage(don$LIM) SAB<-codage(don$SAB) PGM<-codage(don$PGM) MST<-codage(don$MST) AZP<-codage(don$AZP) #transformation des donnes qualitatives en facteur ZON<-as.factor(don$ZON) VRTC<-as.factor(don$VRTC) #cration du tableau cod doncd<-data.frame(RDT,PLM,ARG,LIM,SAB,PGM,MST,AZP,ZON,VRTC) row.names(doncd)<-don$Numero summary(doncd) #appel de la bibliothque de fonction ade4 library(ade4)
Analyse factorielle des correspondances multiples - 02/03/2010 p.27/31

#cration du tableau disjonctif disj<-acm.disjonctif (doncd) #l'analyse factorielle z<-dudi.coa(df = disj, scannf = FALSE, nf = 3) #l'boulis des valeurs propres inertie<-z$eig/sum(z$eig)*100 barplot(inertie,ylab="% d'inertie",names.arg=round(inertie,2)) title("Eboulis des valeurs propres en %") #les valeurs propres round(z$eig,3) #les valeurs propres en % round(z$eig/sum(z$eig)*100,2) #plan factoriels scatter.coa(z, method = 1, sub = "Bl dur", posieig = "none") #une autre reprsentation : les variables plot(z$co[,1],z$co[,2],type="n",xlab="Axe 1",ylab="Axe 2", xlim=c(-1.4,1.4)) text(z$co[,1], z$co[,2], label= colnames(disj)) title("Bl dur - plan des variables") abline(h=0,v=0) #une autre reprsentation : les individus plot(z$li[,1],z$li[,2],type="n",xlab="Axe 1",ylab="Axe 2", xlim=c(-1.4,1.4)) text(z$li[,1], z$li[,2], label=row.names(disj)) title("Bl dur - Plan des individus") abline(h=0,v=0)
Analyse factorielle des correspondances multiples - 02/03/2010 p.28/31

#contribution des variables la construction de l'axe inertia.dudi(z,col.inertia = T)$col.abs #contribution des individus la construction de l'axe inertia.dudi(z,row.inertia = T)$row.abs #aide l'interprtation : axe 1 modal<-as.data.frame(z$co) modal<-modal[sort.list(modal$Comp1),] dotchart(modal[,1],labels = row.names(modal),cex=0.8) title(sub="Rpartition des modalits sur l'axe 1") abline(v=0) #aide l'interprtation : axe 2 modal<-as.data.frame(z$co) modal<-modal[sort.list(modal$Comp2),] dotchart(modal[,2],labels = row.names(modal),cex=0.8) title(sub="Rpartition des modalits sur l'axe 2") abline(v=0)

Analyse factorielle des correspondances multiples - 02/03/2010

p.29/31

26.Quelques rfrences :
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 Bibliothque 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

Analyse factorielle des correspondances multiples - 02/03/2010

p.30/31

27.Annexes : la fonction codage()


codage<-function(nom) #dcoupage en 3 classes d'effectifs gaux { #calcul des bornes bornes<-quantile(nom, probs = c(0, 1/3,2/3,1), na.rm = TRUE,names = TRUE) #description des bornes et effectifs Amax<-aggregate(nom,list(Nom=cut(nom,bornes,include.lowest=T,label=F)),max) Amin<-aggregate(nom,list(Nom=cut(nom,bornes,include.lowest=T,label=F)),min) Afreq<-as.matrix(summary(as.factor(cut(na.omit(nom),bornes, include.lowest=T, label=F)))) limites<-as.data.frame(cbind(Amin[,1],Amin[,2],Amax[,2],Afreq)) names(limites)<-c("Classe","Mini","Maxi","Effectif") #calcul du nombre de valeurs manquantes manques<-length(nom)-length(na.omit(nom)) #impression des bornes cat(paste("Dcoupage de la variable ",deparse(substitute(nom))," - Nb de valeurs manquantes : ", manques, "\n")) print(limites) #dcoupage de la variable varfac<-cut(nom,bornes,include.lowest=T,label=F) #transformation en facteur as.factor(varfac) }
Analyse factorielle des correspondances multiples - 02/03/2010 p.31/31

You might also like