Analyse Factorielle des Correspondances sous...
Transcript of Analyse Factorielle des Correspondances sous...
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondancessous R
AFC simpleIntroduction 2Variables qualitatives 3Tableau de contingence 6Premier traitement 8Caractéristiques de l'AFC 9Les tableaux de données intermédiaires 11Principe de l’équivalence distributionnelle 13Métrique du Khi 2 17Principe barycentrique 20Analyse des résultats et calcul des contributions 22Analyses des graphiques 28Exemple 2 : tableau de dénombrements 32Exemple 3 : tableau de mesures 37Eléments supplémentaires 38
AFC multiple (AFCM)Principe 43Exemple 1 : data (ours) 44AFC du tableau de Burt 49
Tableau à variables qualitatives et quantitativesDécoupage des variables quantitatives : cut () 50AFCM exemple 2 : data (Cars93) 53Recodage des variables : recode () 57Cas des données manquantes 59Analyse des résultats 61Variables illustratives 62
25/02/2013
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Buts : - détermination des éléments structurant les données (axes de projection)- réduire les dimensions de l’espace de représentation des données
(sélection des p premiers axes)
Sur quels types de données ?
- tableaux de contingence- tableaux de variables continues (valeurs 0)- tableaux logiques (présence-absence)- autres …
2 méthodes :
AFC : Analyse factorielle des correspondances simples pour un ensemble homogènede valeurs assimilable à un tableau de contingence entre 2 variables.
AFCM : Analyse factorielle des correspondances multiples pour un tableau de modalités de q (q>2) variables qualitatives ou un ensemble non homogène de données.
Introduction aux Analyses des Correspondances(AFC, AFCM)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Une variable qualitative est une variable pour laquelle la valeur observée sur chaque individu représente une qualité (ou état) nommé modalité (ou catégorie) et non une quantité.
Analyse Factorielle des Correspondances
Rappel sur les variables qualitatives
Une variable qualitative est :
Nominale quand ses modalités sont des éléments sans relation hiérarchique.Exemples : la variable Sexe avec les modalités Masculin, Féminin la variable Couleur avec les modalités jaune, vert, rouge, bleu
Ordinale quand ses modalités admettent une relation d'ordre.Exemples : Niveau de scolarité : primaire, secondaire, universitaire Appréciation : jamais, rarement, fréquemment, toujours
Dans R :Une variable qualitative est représentée par un objet de classe "factor"Les modalités correspondants aux "levels"
Utiliser la fonction ou le paramètre "ordered" pour créer une variable ordinale
sex <- as.factor(c("M","F"))str(sex)Factor w/ 2 levels "F","M": 2 1
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
juge vin qual1 Cru_Bourgeois mediocre1 Grand_Cru_classe mediocre1 Vin_de_table boring1 Bordeaux_d_origine boring1 Vin_de_marque boring2 Cru_Bourgeois good2 Grand_Cru_classe good2 Vin_de_table boring2 Bordeaux_d_origine mediocre
...200 Cru_Bourgeois good200 Grand_Cru_classe good200 Vin_de_table boring200 Bordeaux_d_origine mediocre200 Vin_de_marque boring
Analyse Factorielle des Correspondances
Les données : 1 - Les variables qualitatives
Soit 2 variables qualitatives
L’épreuve : 200 juges 5 vins : "Cru_Bourgeois","Grand_Cru_classe","Vin_de_table","Bordeaux_d_origine","Vin_de_marque" 4 qualificatifs : "excellent","good","mediocre","boring"
test <- read.table (file.choose(), header = TRUE) Choisir le fichier testBordeaux.txt
Variable vin : variable nominale à 5 modalitésVariable qual : variable ordinale à 4 modalités
dim (test)[1] 1000 3
Tableau des modalités
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
juge vin qual1 Cru_Bourgeois mediocre1 Grand_Cru_classe mediocre1 Vin_de_table boring1 Bordeaux_d_origine boring1 Vin_de_marque boring
...200 Cru_Bourgeois good200 Grand_Cru_classe good200 Vin_de_table boring200 Bordeaux_d_origine mediocre200 Vin_de_marque boring
Analyse Factorielle des Correspondances
Données qualitatives : codage binaire disjonctif
library (ade4)bd <- acm.disjonctif (test[,2:3])bd [c(1:5,996:1000),]
Tableau des modalités
0001010001000
100000001999
000110000998
010000100997
010000010996
0001010005
0001000014
0001100003
1000001002
1000000101
qual.mediocre
qual.good
qual.excellent
qual.boring
vin.Vin_de_table
vin.Vin_de_marque
vin.Grand_Cru_classe
vin.Cru_Bourgeois
vin.Bordeaux_d_origine
Tableau binaire disjonctif
dim (test)[1] 1000 3
dim (bd)[1] 1000 9
Principe : une variable à p modalités est éclatée en p variables binairesLa valeur 1 pour nouvelle variable vn indique l’appartenance de la valeur prise par la variable d’origine v à la classe n correspondante. Dans le tableau disjonctif, chaque individu estcaractérisé par une suite de 0 ou de 1. Les valeurs marginales des lignes seront toutesidentiques et égales au nombre de variables initiales (sauf si données manquantes).
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Un tableau de contingence regroupe le nombre de co-occurrences entre les modalités de deux variables qualitatives.
n i1 j1n i1 j2
n i1 .
n i2 j1n i2 j2
n i2 .
n . j1n . j2
n I J
Sommes des i lignes=
Effectifs marginaux des lignes
Sommes des j colonnes=
Effectifs marginaux des colonnesEffectif
total
Variable I
Variable J
j1 j2
i1
i2
Analyse Factorielle des Correspondances
Rappel sur le tableau de contingence
I et J : deux variables qualitatives
j1, j2 : modalités de la variable J
i1, i2 : modalités de la variable I
n : effectif
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
excellent good mediocre boringCru_Bourgeois 45 126 24 5Grand_Cru_classe 87 93 19 1Vin_de_table 0 0 52 148Bordeaux_d_origine 36 68 74 22Vin_de_marque 0 30 111 59
Analyse Factorielle des Correspondances
Les données : 2 - Le tableau de contingence
table (test$vin, test$qual)
La fonction table() calcule le tableau de contingence entre les 2 variables (facteurs)
library(ade4)data(bordeaux)bordeaux
Pour l'utilisation du tableau de contingence issud'un objet de classe table :as.data.frame.matrix (table (test$vin, test$qual))
test[,2] <- factor(test[,2],levels=c("Cru_Bourgeois","Grand_Cru_classe","Vin_de_table","Bordeaux_d_origine","Vin_de_marque" ))test[,3] <- factor(test[,3],levels=c("excellent","good","mediocre","boring"))
bd <- as.matrix(bd)t (bd[, 1:5]) %*% bd[, 6:9]
qual.excellent qual.good qual.mediocre qual.boringvin.Cru_Bourgeois 45 126 24 5vin.Grand_Cru_classe 87 93 19 1vin.Vin_de_table 0 0 52 148vin.Bordeaux_d_origine 36 68 74 22vin.Vin_de_marque 0 30 111 59
Si les variables sont sous forme d'un tableau binaire disjonctif :le produit matriciel (T'*T) tableau de contingence
transforme en classe "matrix" puis en data frame
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
d = 0.5
Cru_Bourgeois
Grand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
excellent
good
mediocre
boring
Analyse Factorielle des CorrespondancesAvec la librairie ade4Exemple 1 : la méthode
library(ade4)# Les données
data(bordeaux)bordeaux
excellent good mediocre boringCru_Bourgeois 45 126 24 5Grand_Cru_classé 87 93 19 1Vin_de_table 0 0 52 148Bordeaux_d_origine 36 68 74 22Vin_de_marque 0 30 111 59
# Le traitementafc <-dudi.coa(bordeaux, scannf=FALSE)
# Coordonnées factorielles des points lignesafc$li# Coordonnées factorielles des points colonnesafc$co
Axe 1
Axe 2
Point colonne
Point ligne
Eboulement desvaleurs propres
Fonction ade4 de classe dudi
Données (data.frame)
# Affichage du plan factoriel 1 * 2scatter(afc)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances
Les caractéristiques de l'AFC
- tableau à n lignes et p colonnes de valeurs positives ou nulles
- mesure de l’intensité de la relation (correspondance) entre deux ensembles,l’un en lignes, l’autre en colonnes
- utilise une distance euclidienne spécifique : la distance du Khi2 sur les profils
(distance pondérée par les effectifs des lignes et des colonnes)
- fait jouer un rôle symétrique aux lignes et aux colonnes
- repose sur 2 principes :• l’équivalence distributionnelle• le principe barycentrique
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances
La démarche comparée à l'ACP
Données"brutes"
Tableau desfréquences
matricevar/covar
Diagonalisation
valeurspropres
vecteurspropres
2du métrique
profils
coordonnéesfactorielles
Données"brutes"
matricevar/covar
valeurspropres
vecteurspropres
coordonnéesfactorielles
AFC ACP
Diagonalisation
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
fréquence marginale pour un i : fi. = ni. / nIJ
fréquence marginale pour un j : f.j= n.j / nIJ
excellent good mediocre boring n i .Cru_Bourgeois 45 126 24 5 200Grand_Cru_classé 87 93 19 1 200Vin_de_table 0 0 52 148 200Bordeaux_d_origine 36 68 74 22 200Vin_de_marque 0 30 111 59 200
n . j 168 317 280 235 1000
A partir du tableau des données = tableau des effectifs
Calcul du tableau des fréquences
fi1j1 fi1j2 f i 1 .
fi2j1 fi2j2 f i 2 .
f . j 1 f . j 2 1
excellent good mediocre boring f i .Cru_Bourgeois 0,045 0,126 0,024 0,005 0,2Grand_Cru_classé 0,087 0,093 0,019 0,001 0,2Vin_de_table 0,000 0,000 0,052 0,148 0,2Bordeaux_d_origine 0,036 0,068 0,074 0,022 0,2Vin_de_marque 0,000 0,030 0,111 0,059 0,2
f . j 0,168 0,317 0,280 0,235 1
bordeaux / sum(bordeaux)
fij = nij / nIJ
ni1j1 ni1j2 n i1 .
ni2j1 ni2j2 n i2 .
n. j 1 n. j 2 n I J
bordeauxn.j <- colSums(bordeaux)ni. <- rowSums(bordeaux)nIJ <- sum(bordeaux)
Données"brutes"
Tableau desfréquences
matricevar/covar
Diagonalisation
valeurspropres
vecteurspropres
2du métrique
profils
coordonnéesfactorielles
Données"brutes"
Tableau desfréquences
matricevar/covar
Diagonalisation
valeurspropres
vecteurspropres
2du métrique 2du métrique
profils
coordonnéesfactorielles
Analyse Factorielle des CorrespondancesCalcul des tableaux intermédiaires (1/2)
1 - tableau des fréquences
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
f i1j1 f i1
j2
f i2j1 f i2
j2
1 1
excellent good mediocre boringCru_Bourgeois 0,225 0,630 0,120 0,025 1Grand_Cru_classé 0,435 0,465 0,095 0,005 1Vin_de_table 0,000 0,000 0,260 0,740 1Bordeaux_d_origine 0,180 0,340 0,370 0,110 1Vin_de_marque 0,000 0,150 0,555 0,295 1
fiJ = { fij ; jJ} avec fij = fij / fi. et fi. 0
soit fi
j = nij / ni. et ni. 0
ou tableaux des fréquences conditionnelles
• des colonnes = profils des jfjI = { fji ; iI} avec fj
i = fij / f.j et f.j 0
soit fji = nij / n.j et n.j 0
df <- bordeaux / sum(bordeaux)row.w <- rowSums( df) profil.i <- df/row.wcbind(profil.i,rowSums( profil.i))
f i1
j1f i1
j21
f i2
j1f i2
j21
df <- bordeaux / sum(bordeaux)col.w <- colSums(df)profil.j <- t(t(df)/col.w)rbind(profil.j,colSums( profil.j))
• des lignes = profils des i
Cru_Bourgeois 0,268 0,398 0,086 0,021Grand_Cru_classé 0,518 0,293 0,068 0,004Vin_de_table 0,000 0,000 0,186 0,630Bordeaux_d_origine 0,095 0,215 0,264 0,094Vin_de_marque 0,000 0,095 0,396 0,251
1 1 1 1
Données"brutes"
Tableau desfréquences
matricevar/covar
Diagonalisation
valeurspropres
vecteurspropres
2du métrique
profils
coordonnéesfactorielles
Données"brutes"
Tableau desfréquences
matricevar/covar
Diagonalisation
valeurspropres
vecteurspropres
2du métrique 2du métrique
profils
coordonnéesfactorielles
Analyse Factorielle des CorrespondancesCalcul des tableaux intermédiaires (1/2)
2 - tableaux des profils
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances
Principe de l’équivalence distributionnelle (1/3)
Le principe : si deux points i et i’ ont le même profil (confondus) et si on les regroupe un seul point i’’ dont les ni’’j = nij + ni’j, les distances entre les points i sont inchangées .
Il en est de même des points j dans l’espace des n individus.
# tableaux des données avec i et i’ # tableaux des données avec i" (regroupement de i et i’)
t2 <- rbind(bordeaux[1,]*10, bordeaux) t1 <- rbind( t2[1,] + t2[2,], t2[3:6,])
> t2excellent good mediocre boring
Cru_Bourgeois 450 1260 240 50Cru_Bourgeois1 45 126 24 5Grand_Cru_classé 87 93 19 1Vin_de_table 0 0 52 148Bordeaux_d_origine 36 68 74 22Vin_de_marque 0 30 111 59
i
i’ > t1excellent good mediocre boring
Cru_Bourgeois 495 1386 264 55Grand_Cru_classé 87 93 19 1Vin_de_table 0 0 52 148Bordeaux_d_origine 36 68 74 22Vin_de_marque 0 30 111 59
i’’
i’’i’
Les conditions du principe
i, i' i''+
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Vérification que les points lignes i, i’, i’’ ont le même profil
# Ecriture d’une fonction pour le calcul des profils lignes
profili(bordeaux)excellent good mediocre boring rowSums(p.i)
Cru_Bourgeois 0.225 0.630 0.120 0.025 1Grand_Cru_classé 0.435 0.465 0.095 0.005 1Vin_de_table 0.000 0.000 0.260 0.740 1Bordeaux_d_origine 0.180 0.340 0.370 0.110 1Vin_de_marque 0.000 0.150 0.555 0.295 1
profili(t2)excellent good mediocre boring rowSums(p.i)
Cru_Bourgeois 0.225 0.630 0.120 0.025 1Cru_Bourgeois1 0.225 0.630 0.120 0.025 1Grand_Cru_classé 0.435 0.465 0.095 0.005 1Vin_de_table 0.000 0.000 0.260 0.740 1Bordeaux_d_origine 0.180 0.340 0.370 0.110 1Vin_de_marque 0.000 0.150 0.555 0.295 1
profili(t1)excellent good mediocre boring rowSums(p.i)
Cru_Bourgeois 0.225 0.630 0.120 0.025 1Grand_Cru_classé 0.435 0.465 0.095 0.005 1Vin_de_table 0.000 0.000 0.260 0.740 1Bordeaux_d_origine 0.180 0.340 0.370 0.110 1Vin_de_marque 0.000 0.150 0.555 0.295 1
profili <- function(df) {
p.i <- df / rowSums( df)
cbind(p.i, rowSums(p.i)) }
i
i’
i’’
i
Analyse Factorielle des Correspondances
Principe de l’équivalence distributionnelle (2/3)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Vérification graphique du principe
d = 1
excellentgood
mediocreboring
Cru_BourgeoisCru_Bourgeois1
Grand_Cru_classé
Vin_de_table
Bordeaux_d_origineVin_de_marque
Rows
Columns
d = 1
excellentgood
mediocreboring
Cru_BourgeoisGrand_Cru_classé
Vin_de_table
Bordeaux_d_origineVin_de_marque
Rows
Columns
i
i’
i’’
par(mfrow=c(2,1))score (dudi.coa (t2, scannf=F))score (dudi.coa (t1, scannf=F))par(mfrow=c(1,1))
dudi.coa (t2, scannf=F)$li
Axis1 Axis2Cru_Bourgeois -0.2926881 0.04688171Cru_Bourgeois1 -0.2926881 0.04688171Grand_Cru_classé -0.3991920 0.12413410Vin_de_table 2.2147901 0.49885003Bordeaux_d_origine 0.2853378 -0.44331555Vin_de_marque 1.1186333 -0.69536740
dudi.coa (t1, scannf=F)$li
Axis1 Axis2Cru_Bourgeois -0.2926881 -0.04688171Grand_Cru_classé -0.3991920 -0.12413410Vin_de_table 2.2147901 -0.49885003Bordeaux_d_origine 0.2853378 0.44331555Vin_de_marque 1.1186333 0.69536740
Analyse Factorielle des Correspondances
Principe de l’équivalence distributionnelle (3/3)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
d = 1
Cru_Bourgeois
Grand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
excellent
good
mediocre
boring
d = 1
Cru_Bourgeois
Cru_Bourgeois1 Grand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
excellent good
mediocre
boring
d = 1
Cru_Bourgeois
Grand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque excellent
good
mediocre
boring
Traitement de t1 et t2 avec l'ACP
i
i’’
par(mfrow=c(2,2))plot.new()scatter (dudi.pca (bordeaux, scannf=F))scatter (dudi.pca (t2, scannf=F))scatter( dudi.pca (t1, scannf=F))par(mfrow=c(1,1))
i
i’
bordeaux
t2 t1
dudi.pca (t2,scannf=F)$liAxis1 Axis2
Cru_Bourgeois -3.731748 -0.085358Cru_Bourgeois1 0.847585 0.934466Grand_Cru_classé 0.772267 1.052014Vin_de_table 1.010357 -1.980904Bordeaux_d_origine 0.591455 0.463464Vin_de_marque 0.510082 -0.383682
dudi.pca (t1,scannf=F)$liAxis1 Axis2
Cru_Bourgeois -3.369709 -0.156047Grand_Cru_classé 0.848453 1.240747Vin_de_table 1.175680 -1.725019Bordeaux_d_origine 0.696214 0.719769Vin_de_marque 0.649362 -0.079449
Analyse Factorielle des CorrespondancesComparaison avec l'ACP
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances
Métrique du Khi2 (1/2)
-0.1 0.0 0.1 0.2 0.3 0.4 0.5
0.0
0.1
0.2
0.3
0.4
0.5
0.6
excellent
good
Cru_Bourgeois
Grand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
Exemple :Soit le plan formé par les variables ‘excellent’ et ‘good’’et les 5 points i de coordonnées f ij
excellent goodCru_Bourgeois 0.225 0.630Grand_Cru_classé 0.435 0.465Vin_de_table 0.000 0.000Bordeaux_d_origine 0.180 0.340Vin_de_marque 0.000 0.150plot (range(profil.i[,1])+ c(-.1,.1), range(profil.i[,2]), type="n",xlab=colnames(profil.i)[1],ylab=colnames(profil.i)[2])
text (profil.i[,1:2], labels = rownames(profil.i))
Calcul de la distance entre Vin de table et Grand cru classé
x <- profil.i[2:3,1] # abscisses des 2 vinsy <- profil.i[2:3,2] # ordonnées des 2 vinspoints (x,y,col=2, pch=19, cex=2)lines (x, y, col=2)segments (x[1], 0, x[2], 0, lty=2)segments (x[1], y[1], x[1], y[2], lty=2)
d2 <- (x[1] - x[2])^2 + (y[1] - y[2])^2
D <- sqrt(d2)
La fonction dist() permet de calculer cette distance :dist (profil.i[2:3,1:2])
Jj
jiij xxiiD 2')',(Rappel sur la distance euclidienne :
ou D2(i , i’) = (xij – xi’j)2 | jJ
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances
Métrique du Khi2 (2/2)
Soit D la distance euclidienne entre i et i’ caractérisés par leurs profils f iJ et f i’J :
D2(i , i’) = j (f ij – f i’j)2 | jJ
Le principe est réalisé si j = 1/ f.j on a ainsi :
D2(i , i’) = (f ij – f i’j)2 / f.j | jJ
Cette distance est appelée distance du Khi 2 entre lois conditionnelles de centre fJou distance distributionnelle entre i et i’
On démontrerait de même que la distance euclidienne entre deux colonnes j et j’ ayant comme profils f jI et f j’I doit satisfaire à un i = 1 / fi.
(rappel f ij = fij / fi.)
Dans l’espace des p variables, les n points i ont pour coordonnées les f ij et comme masse fi.
Et la distance au centre du nuage : ρ2(i) = (f ij – f.j)2 / f.j | jJ
C'est le choix de la métrique du Khi2 qui permet le principe de l’équivalence distributionnelle
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse du nuage I
Recherche des composantes principales du nuage de points ayant pour coordonnées : f ij / √f.j
Terme général de la matrice Y servant au calcul de la matrice var-covar T (T = Y’ Y) :
Calcul 1 yij = (fij - fi.* f.j) / (fi.* f.j)
nIJ * yij2
nIJ * trace de TComme pour l’ACP :
- diagonalisation de T - extraction des valeurs propres : variance de chacun des axes
vecteurs propres : permettent de calculer les équations des axes
Différences avec l ’ACP :
- yij symétrique en i et j rôle symétrique des lignes et des colonnes
- nombre de valeurs propres = minimum (n, p) – 1 minimum de (n-1, p-1) axesT admet au moins une valeur propre nulle (0)
Calcul 2 : simplification possible de yij = fij / (fi.* f.j) ici 1ère valeur propre 0 = 1 (premier vecteur propre v0 = (f½.1, f½.2,..)
Analyse Factorielle des Correspondances
La matrice des covariances
fréquence observée
fréquence théorique
k
i i
ii
EEO
1
22
= 2 de nij à (n-1)(p-1) ddl
Données"brutes"
Tableau desfréquences
matricevar/covar
Diagonalisation
valeurspropres
vecteurspropres
2du métrique
profils
coordonnéesfactorielles
Données"brutes"
Tableau desfréquences
matricevar/covar
Diagonalisation
valeurspropres
vecteurspropres
2du métrique 2du métrique
profils
coordonnéesfactorielles
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances
2 ème principe : Principe barycentrique (1/2)
Calcul des projections (coordonnées) des points (lignes & colonnes)sur les axes factoriels
avec f ij = fij / fi. (f iJ = profil de i) et vj= composante du ème vecteur propre
Coordonnées des points i
afc$li
Axis1 Axis2Cru_Bourgeois -0.7134347 -0.06256333
Grand_Cru_classé -0.8461787 -0.26380501
Vin_de_table 1.1821197 -0.41671099
Bordeaux_d_origine -0.1713729 0.25423507
Vin_de_marque 0.5488665 0.48884427
Le principe : tout point i se trouve au pseudo-barycentre des coordonnées des points jaffectés des masses qui sont les composantes du profil fij et inversement
Plus le poids du point i (fi.) est faible plus il est éloigné de l’origine
Rappel fij = fij / fi.
ou fij = nij / ni.
Formules de transition : passage de l’espace I à l’espace J et inversement
Fi = -1/2 j=1, p (f i
j) *Gj et Gj = -1/2 i=1, n (f j
i ) *Fi
De même, les coordonnées des points j sur les axes factoriels : Gj = i=1,n (f ji /√f.i) * ui
Données"brutes"
Tableau desfréquences
matricevar/covar
Diagonalisation
valeurspropres
vecteurspropres
2du métrique
profils
coordonnéesfactorielles
Données"brutes"
Tableau desfréquences
matricevar/covar
Diagonalisation
valeurspropres
vecteurspropres
2du métrique 2du métrique
profils
coordonnéesfactoriellesFi = j=1, p (fi
j /√f.j) * vj
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances
Principe barycentrique (2/2)
Reconstitution des données
A partir des facteurs F1, F2, F3...(respectivement G1, G2, G3...) dont les valeurs propres (variances) sont respectivement 1, 2, 3...., il est possible de reconstituer le tableau initial suivant la formule :
nij = (ni.* n.j) / nIJ (1 +1 F1 (i)*G1 (j) + 2 F2 (i)*G2(j) + ...)
se décompose en :
nij = (ni. * n.j)) / nIJ correspond à l’hypothèse d’indépendance des variables (cf. test du Khi2).(se vérifie si toutes les lignes ont le même profil).
et
1 F1 (i)*G1 (j) + 2 F2 (i)*G2(j) + ... représente donc l’écart du rapport à cette indépendance.
Ainsi l’AFC revient à l’étude de l’écart à l’indépendance
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Histogramme des valeurs propres
afc <- dudi.coa (bordeaux) # paramètre scannf = TRUE par défaut
Select the number of axes: 3
# identique à :afc <- dudi.coa (bordeaux, scannf = FALSE, nf = 3)
Analyse Factorielle des Correspondancesexemple 1 : l'analyse des résultats (1/5)
names (afc)[1] "tab" "cw" "lw" "eig" "rank" "nf" "c1" "l1" "co" "li" "call" "N"
Affiche
Nombre d’axes factoriels sélectionnés
afc$eig # valeurs propres ( variances)[1] 0.59060749 0.11015190 0.03108562
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Un objet de la classe dudi est une liste qui comprend : le triplet (X, Q, D) sur lequel repose le schéma de dualitétab : un data frame avec n lignes et p colonnes (X) considéré comme p points de Rn (vecteurs colonnes) ou n points de Rp
(vecteurs lignes)cw : les poids des colonnes, vecteur à p composantes (Q), matrice diagonale de dimension p× p utilisée comme produit
scalaire dans Rp
lw : les poids des lignes, vecteurs à n composantes (D), matrice diagonale de dimension n× n utilisée comme produit scalaire dans Rn
puis les dérivés de la diagonalisation du schémaeig : les valeurs propres dans u vecteur d'au plus min (n,p) composantesnf : le nombre d'axes conservés (imposé ou introduit après jugement sur le graphe des valeurs propres)c1 : les axes principaux placés en colonnes dans un data frame avec p lignes et nf colonnes (CS veut dire Column Score,
appelés aussi loadings ou poids des variables)l1 : les composantes principales placées en colonnes dans un data frame avec n lignes et nf colonnes (RS veut Row Score,
appelé aussi coordonnée normalisée ou coordonnée de norme 1co : les coordonnées des colonnes placées dans un data frame avec p lignes et nf colonnes (chaque ligne de ce tableau
désigne une colonne du tableau de départ, chaque colonne est une composante principale, chaque valeur est une coordonnée de la projection de la colonne du tableau de départ sur une composante principale)
li : les coordonnées des lignes placées en colonnes dans un data frame avec n lignes et nf colonnes (chaque ligne de ce tableau désigne une ligne du tableau de départ, chaque colonne est un axe principal, chaque valeur est unecoordonnée de la projection de la ligne du tableau de départ sur un axe principal) appelées aussi scores de variance lambda, ou score normé à la valeur propre, ou coordonnée de variance lambda
http://pbil.univ-lyon1.fr/R/cours/stage3.pdf
La classe d'objets dudi de la librairie ade4
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondancesexemple 1 : l'analyse des résultats (2/5)
> afc
Duality diagrammclass: coa dudi$call: dudi.coa(df = bordeaux) rappel des paramètres d’appel de la fonction
$nf: 3 axis-components saved au maximum valeur de $rank$rank: 3 minimum (n-1, p-1) soit minimum de (5-1, 4-1)eigen values: 0.5906 0.1102 0.03109 avec = 1 à minimum (n-1, p-1) vector length mode content
1 $cw 4 numeric column weights f.j , length = p2 $lw 5 numeric row weights fi. , length = n3 $eig 3 numeric eigen values avec = 1 à length, length = minimum (n-1, p-1)
data.frame nrow ncol content 1 $tab 5 4 modified array yij / (fi.* f.j) cf. calcul 1 de Y soit aussi fij / (fi.*f.j) – 1 2 $li 5 3 row coordinates coordonnées sur les axes ( = $l1 * √ )3 $l1 5 3 row normed scores composantes principales ( coordonnées normées à √ )4 $co 4 3 column coordinates coordonnées sur les axes ( = $c1 * √ )5 $c1 4 3 column normed scores composantes principales ( coordonnées normées à √ )
other elements: N somme de toutes les valeurs du tableau initial ( nIJ )
Plus concrètement
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
1 ère contribution : contribution du point à l’inertie de l'axe
Mise en évidence des points (lignes et colonnes) importants pour l'axe
Analyse Factorielle des Correspondances
exemple 1 : l'analyse des résultats (3/5)
Informations sur le rôle des variables lignes et colonnes : les contributions
(contri <- inertia.dudi(afc, col=TRUE, row =TRUE) )
Analyse des valeurs propres (inertie)$TOT
inertia cum ratio
1 0.59060749 0.5906075 0.8070117 inertia : variance de l'axe2 0.11015190 0.7007594 0.9575243 cum : variance cumulée3 0.03108562 0.7318450 1.0000000 ratio : % de la variance cumulée par rapport à la variance totale
$row.absAxis1 Axis2 Axis3
Cru_Bourgeois 1724 71 6085Grand_Cru_classé 2425 1264 3549Vin_de_table 4732 3153 38Bordeaux_d_origine 99 1174 253Vin_de_marque 1020 4339 75
Contribution dite absolue (notée aussi CTR)exprimée ici en pour 10 000 de l'inertie de l'axe
Calcul des contributions : la fonction inertia.dudi()
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
2 ème contribution : corrélation entre axes et points (cosinus carrés)dite relative (notée aussi COR) car contribution relative de l'axe à l'inertie totale du pointexprimée ici en pour 10 000
mesure la qualité de la représentation du point sur un axepour mettre en évidence les axes importants pour le point
$row.rel Axis1 Axis2 Axis3 con.tra
Cru_Bourgeois -8379 -64 -1557 1660Grand_Cru_classé -8516 -828 656 2298Vin_de_table 8891 -1105 -4 4295Bordeaux_d_origine -2999 6599 402 268Vin_de_marque 5564 4414 21 1480
$row.cumAxis1 Axis2 Axis3 remain
Cru_Bourgeois 8379 8443 10000 0Grand_Cru_classé 8516 9344 10000 0Vin_de_table 8891 9996 10000 0Bordeaux_d_origine 2999 9598 10000 0Vin_de_marque 5564 9979 10000 0
cos2 β * 10 000 signé (signe de Fi)
Inertie totale du point / inertie totaleexprimée en pour 10 000
Qualité de la représentation dans le repèredes axes demandés (nf)= (cos2 β1 + cos2 β2 +...+ cos2 βnf ) * 10000
Analyse Factorielle des Correspondances
exemple 1 : l'analyse des résultats (4/5)
représentation non exprimée par les nf axes= somme des cos2 β pour les axes nf+1 à afc$rank= 10000 - (cos2 β1 + cos2 β2 +...+ cos2 βnf ) * 10000
β
O
A
FAcos β = OFA / OA
Projection plus ou moins déformante selon l’angle des points / axe
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances
exemple 1 : l'analyse des résultats (5/5)
Utilisation des contributions pour l'interprétation des cartes factorielles
-1.0 -0.5 0.0 0.5 1.0
-0.4
-0.2
0.0
0.2
0.4
AFC bordeaux
axe 1 (80.7 %)
axe
2 (1
5.1
%) Cru_Bourgeois
Grand_Cru_classe
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
excellent
good
mediocre
boringF1 abs rel F2 abs rel
Cru_Bourgeois -0.713 1724 -8379 0.063 71 64Grand_Cru_classe -0.846 2425 -8516 0.264 1264 828Vin_de_table 1.182 4732 8891 0.417 3153 1105Bordeaux_d_origine -0.171 99 -2999 -0.254 1174 -6599Vin_de_marque 0.549 1020 5564 -0.489 4339 -4414
excellent -0.867 2136 -8083 0.298 1354 955good -0.672 2426 -9127 0.004 1 0mediocre 0.356 599 3443 -0.483 5932 -6355boring 1.103 4838 9044 0.357 2713 946
Axe 1 Axe 2
I <- cbind(round(afc$li[,1:2],3),contri$row.abs[,1:2],contri$row.rel[,1:2])[,c(1,3,5,2,4,6)]names(I) <- c("F1","F1-abs","F1-rel","F2","F2-abs","F2-rel")cI <- rep(1,nrow(I))cI[which.max(I[,2]*sign(I[,1]))]=5cI[which.max(I[,5]*sign(I[,4]))]=3cI[which.min(I[,2]*sign(I[,1]))]=4cI[which.min(I[,5]*sign(I[,4]))]=2J <- cbind(round(afc$co[,1:2],3),contri$col.abs[,1:2],contri$col.rel[,1:2])[,c(1,3,5,2,4,6)]names(J) <- c("F1","F1-abs","F1-rel","F2","F2-abs","F2-rel")cJ <- rep(1,nrow(J))cJ[which.max(J[,2]*sign(J[,1]))]=5cJ[which.max(J[,5]*sign(J[,4]))]=3cJ[which.min(J[,2]*sign(J[,1]))]=4cJ[which.min(J[,5]*sign(J[,4]))]=2contri$TOT <- cbind(contri$TOT,round(contri$TOT[,1]/sum(contri$TOT[,1])*100,1))names(contri$TOT)[4] <- "i%"ax <- paste("axe 1 (",contri$TOT[1,4]," %)",sep="")ay <- paste("axe 2 (",contri$TOT[2,4]," %)",sep="")plot(range(afc$li[,1],afc$co[,1])+c(-.2,.2),range(afc$li[,2],afc$co[,2])+c(-.03,.0),type="n", main= "AFC bordeaux", xlab=ax, ylab=ay)text(afc$li[,1:2],labels=rownames(afc$li),col=cI,pos=1,offset = 0.2)text(afc$co[,1:2],labels=rownames(afc$co),col=cJ)abline(v=0,h=0)
PrincipeNe prendre en compte que les points dont la contribution > contribution moyenne
contribution abs. moy = 10000 * 1 / nb pointssoit pour l'axe 1 :
- pour les vins : 10000 / 5 = 2000 - pour les qualificatifs : 10000 / 4 = 2500
contribution rel. moy = 10000 * 1 / nb de valeurs propres (axes)soit pour l'axe 1 : 10000 / 3 = 3333
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des CorrespondancesAnalyse graphique (1/4)
par (mfrow= c(2,2))
Utilisation : des coordonnées : li, coscatter (afc) # graphe 1
scatter (afc, xax=1, yax=3) # graphe 2
des scores pour les colonnes : li, c1scatter (afc, met=2) # graphe 3
Points lignes aux barycentres des points colonnes
des scores pour les lignes : l1, coscatter (afc, met=3) # graphe 4
Points colonnes aux barycentres des points lignes
par (mfrow= c(1,1))
Fonction : scatter (dfxy, xax=1, yax=2, xlim, ylim, met=1, grid=TRUE)
d = 0.5
Cru_Bourgeois
rand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
excellent
good
mediocre
boring
d = 0.5
Cru_Bourgeois
rand_Cru_classé
Vin_de_table Bordeaux_d_origine Vin_de_marque
excellent
good
mediocre boring
d = 0.5
excellent
good
mediocre
boring
Cru_Bourgeois
Grand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
d = 0.5
Cru_Bourgeois
nd_Cru_classé
Vin_de_tabl
Bordeaux_d_origine
Vin_de_marque
excellent
good
mediocre
boring
1 2
3 4
fonction ade4 : scatter ()
1 - Les cartes factorielles
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
d = 0.5
Bordeaux
Cru_Bourgeois
rand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
Fonction : s.label (dfxy, xax = 1, yax = 2, label = row.names(dfxy), clabel = 1, pch = 20, cpoint = if (clabel == 0) 1 else 0, …, add.plot = FALSE)
fonction ade4 : s.label ()
s.label (afc$li, sub = "Bordeaux")s.label (afc$co, clabel = 0 , pch = 20,
cpoint = 2, add.plot = TRUE)
d = 0.5
Cru_Bourgeois
Grand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
excellent
good
mediocre
boring
colnames (afc$co) <- colnames(afc$li)s.label (rbind(afc$li, afc$co), clabel = 0.8)
Analyse Factorielle des CorrespondancesAnalyse graphique (2/4)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
-1.0 -0.5 0.0 0.5 1.0 1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
AFC bordeaux
Axe 1
Axe
2
Cru_Bourgeois
rand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
excellent
good
mediocre
boring
plot (c(afc$l1[,1],afc$c1[,1]), c(afc$l1[,2],afc$c1[,2]), type="n", asp=1, main= "AFC bordeaux", xlab="Axe 1", ylab="Axe 2")
text (afc$l1[,1:2], labels=rownames(afc$l1), col=2) text (afc$c1[,1:2], labels=rownames(afc$c1), col=3)
abline (v=0, h=0)lines (afc$c1[,1:2], lty=2)
plot (c(afc$l1[,1],afc$c1[,1]),c(afc$l1[,3],afc$c1[,3]),type="n", asp=1,main= "AFC bordeaux", xlab="Axe 1", ylab="Axe 3")
text (afc$l1[,c(1,3)], labels=rownames(afc$l1), col=2)text (afc$c1[,c(1,3)], labels=rownames(afc$c1), col=3)abline (v=0, h=0)lines ( afc$c1[,c(1,3)], lty=2)
-1 0 1 2
-1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
AFC bordeaux
Axe 1
Axe
3
Cru_Bourgeois
Grand_Cru_classé
Vin_de_table
Bordeaux_d_origineVin_de_marque
excellent
good
mediocre
boring
fonction plot ()
Utilisation des scores $l1 et $c1
Analyse Factorielle des CorrespondancesAnalyse graphique (3/4)
Aussi : points ()
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
score(afc)
afc$l1RS1
Cru_Bourgeois -0.9283350Grand_Cru_classé -1.1010641Vin_de_table 1.5381971Bordeaux_d_origine -0.2229937 Vin_de_marque 0.7141957
afc$c1 CS1 excellent -1.1276880good -0.8747596mediocre 0.4626773 boring 1.4348968
- +axe 1
d = 0.5
excellent
good
mediocre
boring
Cru_Bourgeois
Grand_Cru_classé
Vin_de_table
Bordeaux_d_origine
Vin_de_marque
Rows
Columns
-1,5 +1,5
row scores
Les 17 nij ≠0
fonction ade4 : score ()
2 - Représentation sur un axe
Analyse Factorielle des CorrespondancesAnalyse graphique (4/4)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondancesexemple 2 : analyse d'un tableau de dénombrements (1/5)
library (ade4)
data (santacatalina)
santacatalina # Densité à l’hectare de 11 sp d’arbres selon un gradient d’humidité du sol
v1 v2 v3 v4 v5 v6 v7 v8 v9 v10
Pinus.ponderosa 36 646 472 212 48 4 4 0 0 0Quecus.hypoleucoides 4 450 670 820 1304 724 248 106 124 22 Pinus.cembroides 0 0 0 6 26 58 186 322 156 242Arctostaphylos.pringlei 0 0 0 12 42 268 108 308 438 68Quercus.arizonaca 0 94 18 36 218 186 74 226 50 38Quercus.rugosa 252 136 170 22 50 24 32 20 36 22Garrya.wrightii 0 0 0 8 28 0 26 232 18 20Pseudostuga.menziesii 88 156 28 0 0 0 0 0 0 0Quercus.emoryi 0 0 0 0 0 26 0 36 28 152Pinus.chihuahuana 0 2 2 6 84 86 0 0 0 0Arbutus.arizonaca 0 4 16 54 34 16 0 0 0 0
coa <- dudi.coa (santacatalina, scannf=FALSE)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondancesexemple 2 : analyse d'un tableau de dénombrements (2/5)
Nombre d'axes à retenir
Contributionsinercoa <- inertia.dudi (coa,row=TRUE, col=TRUE)
barplot (coa$eig, names.arg= 1: coa$rank, main= "Eboulement des valeurs propres")
1 2 3 4 5 6 7 8 9
Eboulement des valeurs propres
0.0
0.1
0.2
0.3
0.4
0.5
0.6
coude
coude
Méthode du coude : saut dans l'éboulement des valeurs propresRetenir les valeurs propres > moyenne les valeurs propres
mean (coa$eig) # 0.1544286utilisé dans l'AFCM
coa$eig[1] 0.6045948913 0.3440317070 0.1627327315 0.1300140906 0.0894258099
0.0342412610 0.0157494017 0.0081980480 0.0008699014
ax = 1 # choix de l'axewhich(inercoa$row.abs[,ax]> 10000/nrow(inercoa$col.abs)) # % inertie
Pinus.ponderosa Pinus.cembroides Arctostaphylos.pringleiwhich(abs(inercoa$row.rel[,ax])> 10000/coa$rank) # cos2
Pinus.ponderosa Quecus.hypoleucoides Pinus.cembroides Arctostaphylos.pringlei Quercus.arizonacaQuercus.rugosa Garrya.wrightii Pseudostuga.menziesii Quercus.emoryi Arbutus.arizonaca
which(inercoa$col.abs[,ax]> 10000/nrow(inercoa$col.abs)) # % inertiev2 v3 v8 v9 v10
which(abs(inercoa$col.rel[,ax])> 10000/coa$rank) # cos2v1 v2 v3 v4 v7 v8 v9 v10
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
d = 0.5
Pinus.ponderosa
Quecus.hypoleucoides
nus.cembroides rctostaphylos.pringlei
Quercus.arizonaca
Quercus.rugosa
Garrya.wrightii
Pseudostuga.menziesii
rcus.emoryi
Pinus.chihuahuana Arbutus.arizonaca
d = 0.5
v1
v2
v3
v4 v5 v6
v7 v8 v9
v10
Analyse Factorielle des Correspondances (exemple 2) (3/5)
d = 0.5
Pinus.ponderosa
Quecus.hypoleucoides
Pinus.cembroides
Arctostaphylos.pringlei
Quercus.arizonaca
Quercus.rugosa
Garrya.wrightii
Pseudostuga.menziesii
Quercus.emoryi
Pinus.chihuahuana
Arbutus.arizonaca
v1
v2
v3
v4 v5
v6
v7
v8 v9
v10
scatter (coa)for (i in 1:9) arrows (coa$co[i,1],coa$co[i,2],
coa$co[i+1,1],coa$co[i+1,2], col=2, length=.1)
par(mfrow = c(1,2))s.label(coa$li, lab = rownames(coa$li)) #1s.label(coa$co, lab = rownames(coa$co)) #2
1 2
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances (exemple 2) (4/5)
score (coa)
d = 1
v1v2
v3v4
v5v6
v7
v8v9
v10
Pinus.ponderosa
Quecus.hypoleucoides
Pinus.cembroides
Arctostaphylos.pringleiQuercus.arizonaca
Quercus.rugosa
Garrya.wrightii
Pseudostuga.menziesii
Quercus.emoryi
Pinus.chihuahuana
Arbutus.arizonaca
Rows
Columns
g <- t ( santacatalina[order (coa$li[,1]),] )# tri des espèces suivant F1 et transpositionpar (mfrow=c(3,4), mar=c(5,3,.5,1))palette (rainbow (ncol (g))) # choix des couleursfor (i in 1: ncol(g)) barplot (g[,i], xlab=colnames(g)[i], col=i)palette ("default")
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances (exemple 2) (5/5)
Pinus.ponderosa
Quecus.hypoleucoides
Pinus.cembroides
Arctostaphylos.pringlei
Quercus.arizonaca
Quercus.rugosa
Garrya.wrightii
Pseudostuga.menziesii
Quercus.emoryi
Pinus.chihuahuana
Arbutus.arizonaca
v1 v2 v3 v4 v5 v6 v7 v8 v9 v10
250 750 1250
Quercus.emoryi
Pinus.cembroides
Garrya.wrightii
Arctostaphylos.pringlei
Quercus.arizonaca
Pinus.chihuahuana
Quecus.hypoleucoides
Arbutus.arizonaca
Quercus.rugosa
Pinus.ponderosa
Pseudostuga.menziesii
v10
v8 v9 v7 v6 v5 v4 v3 v2 v1
250 750 1250
par(mfrow=c(1,2))table.value (santacatalina, grid=TRUE) # 1 Tableau des donnéestable.value (santacatalina[order(coa$li[,1]), order(coa$co[,1])], grid=TRUE) # 2par(mfrow=c(1,1))
1 2
Tableau "diagonalisé"
Tri suivant F1 Tri suivant F1
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondancesexemple 3 : tableau de mesures (variables quantitatives)
names(afcrab$co) <- names(afcrab$li)plot (rbind(afcrab$li[,1:2], afcrab$co[,1:2]), type="n")abline (v=0, h=0)text (afcrab$co[,1:2], labels=rownames(afcrab$co), cex=1.2)text (afcrab$li[,1:2],cex=.6, labels=gr, col=as.numeric(gr))
library (ade4)library (MASS)data (crabs)gr <- as.factor (paste(crabs[,1], crabs[,2], sep=""))
-0.06 -0.04 -0.02 0.00 0.02 0.04 0.06 0.08
-0.0
4-0
.02
0.00
0.02
0.04
Axis1
Axi
s2
FL
RW
CL
CW
BD
BM
BM
BM
BM
BMBM BM
BM BM
BM
BM
BM
BM
BM
BM
BM
BMBM
BM
BM
BM
BMBM
BMBM
BM
BM
BM
BMBM
BM
BMBMBM
BM
BMBMBM
BM
BMBM
BM
BM
BM
BMBM
BM
BM
BM
BM
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BFBF
BF
BF
BFBF
BFBF
BF
BF
BF
BFBF
BFBF
BF
BFBF
BFBF
BFBF
BF
BF
BF
BFBFBF
OM
OM
OM
OM
OM
OM
OM
OM
OMOM
OM
OM
OMOMOM
OM
OM
OM
OMOM
OMOM
OMOM
OM
OMOM
OMOM
OM
OM
OM
OM
OMOM
OMOM
OM
OM
OMOM
OMOM
OMOM
OM
OM
OMOM
OM
OF
OF
OFOF
OFOF
OF
OF
OF
OF
OF
OF
OF
OF
OF
OFOF
OF
OFOF
OF
OF OFOF OF
OF
OFOF
OF
OF
OF
OF
OF
OFOF
OFOF
OF
OF
OF
OF
OF
OFOF
OF
OFOFOF
OF
OF
afcrab <- dudi.coa (crabs[, 4:8], scannf=FALSE)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des CorrespondancesEléments supplémentaires (1/5)
Eléments supplémentaires = illustratifs
Éléments qui peuvent être ajoutés aux données initiales sans intervenirdans le calcul des axes factoriels (leur contribution est nulle)
(rappel : Fi = -1/2 j=1,p (f ij) Gj )
Principales utilisations : ajouter de nouvelles lignes (ou colonnes) à l’analyse :
• introduire des variables pour aider à l ’interprétation des axes• traiter des données manquantes (individus et/ou variables)• permet de comparer des résultats d’origine différente
éliminer des lignes (ou colonnes) qui par leur forte contribution sur un axe « masquent » plus ou moins les correspondances entre les autres éléments de l’analyse (étirement excessif des axes)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des CorrespondancesEléments supplémentaires (2/5)
Exemple : ajout à crabs [,4:8] des points moyens des couples espèce-sexe en lignes supplémentaires des variables "sp" et "sex" en colonnes supplémentaires
mgr <- aggregate (crabs[,4:8], by=list(gr), mean)rownames(mgr)<- mgr[,1]mgr[,2:6]
tableau binaire disjonctif desfacteurs sp et sex
vdis <- acm.disjonctif (crabs[,1:2])
FL RW CL CW BD1 8.1 6.7 16.1 19.0 7.02 8.8 7.7 18.1 20.8 7.43 9.2 7.8 19.0 22.4 7.74 9.6 7.9 20.1 23.1 8.25 9.8 8.0 20.3 23.0 8.2. . .195 21.3 18.4 43.8 48.4 20.0196 21.4 18.0 41.2 46.2 18.7197 21.7 17.1 41.7 47.2 19.6198 21.9 17.2 42.6 47.4 19.5199 22.5 17.2 43.0 48.7 19.8200 23.1 20.2 46.2 52.5 21.1
crabs [,4:8] sp.B sp.O sex.F sex.M1 1 0 0 12 1 0 0 13 1 0 0 14 1 0 0 15 1 0 0 1. . .195 0 1 1 0196 0 1 1 0197 0 1 1 0198 0 1 1 0199 0 1 1 0200 0 1 1 0
FL RW CL CW BDBF 13.3 12.1 28.1 32.6 11.8BM 14.8 11.7 32.0 36.8 13.3OF 17.6 14.8 34.6 39.0 15.6OM 16.6 12.3 33.7 37.2 15.3
points moyensEspèce*Sexe
colonnes supplémentaires
lignessupplémentaires
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
plot (rbind (afcrab$li[,1:2], afcrab$co[,1:2]), type="n")abline (v=0, h=0)text (afcrab$co[,1:2], labels=rownames(afcrab$co), cex=1)points (afcrab$li[,1:2], cex=.8, pch=20, col=as.numeric(gr))
# affichage des points supplémentairestext (smgr$lisup, cex=2, labels=mgr[,1], col=1:nrow(mgr))
Analyse Factorielle des CorrespondancesEléments supplémentaires : Points lignes (3/5)
Fonction suprow ()# calcul des coordonnées des points # lignes supplémentairessmgr <- suprow (afcrab, mgr[,-1])
names(casup)[1] "tabsup" "lisup"
# coordonnées des points supplémentairessmgr$lisup
Axis1 Axis2BF 0.03121187 -0.01649751BM -0.01838406 -0.02680493OF 0.01958921 0.02134331OM -0.02991233 0.01679338
# points moyens Espèce*Sexemgr <- aggregate(crabs[,4:8], by=list(gr),mean)rownames(mgr)<- mgr[,1]
-0.06 -0.04 -0.02 0.00 0.02 0.04 0.06 0.08
-0.0
4-0
.02
0.00
0.02
0.04
Axis1
Axi
s2
FL
RW
CL
CW
BD
BF
BM
OFOM
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
plot (rbind (afcrab$li, afcrab$co, csup$cosup), type="n")abline (v=0, h=0)points (afcrab$li, cex=.5, pch=20, col=as.numeric(gr))text (afcrab$co, labels=rownames(afcrab$co), cex=.6)
# affichage des points supplémentairestext (csup$cosup, labels=rownames(csup$cosup))
Analyse Factorielle des CorrespondancesEléments supplémentaires : Points colonnes (4/5)
Fonction supcol ()# calcul des coordonnées des points # colonnes supplémentairescsup <- supcol (afcrab, vdis)
names(csup)[1] "tabsup" "cosup"
# coordonnées des points supplémentairescsup$cosup
Axis1 Axis2sp.B 0.2997822 -0.9723478sp.O -0.1045915 0.8863265sex.F 0.8904758 0.1020459sex.M -0.6952851 -0.1880672
# tableau binaire disjonctif des facteurs sp & sexvdis <- acm.disjonctif(crabs[,1:2])
colnames de co
rappel : Gj= -1/2 i=1,n (f ji) Fi
avec : -1/2 *Fi = RS ou Row Score (l1)
et f ji = tableau des profils des colonnes supplémentaires
-0.5 0.0 0.5
-1.0
-0.5
0.0
0.5
Axis1
Axi
s2
FLRWCLCW
BD
sp.B
sp.O
sex.F
sex.M
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
head (sweep(crabs[,4:8], 2, colSums(crabs[,4:8]), "/"))FL RW CL CW BD
1 0.002598986 0.002629823 0.002507359 0.002608851 0.002494565
2 0.002823590 0.003022334 0.002818832 0.002856005 0.002637112
3 0.002951935 0.003061585 0.002958995 0.003075698 0.002744022
4 0.003080280 0.003100836 0.003130305 0.003171813 0.002922205
5 0.003144452 0.003140087 0.003161452 0.003158083 0.002922205
6 0.003465315 0.003532598 0.003581941 0.003638660 0.003492392
colSums (sweep(crabs[,4:8], 2, colSums(crabs[,4:8]), "/"))FL RW CL CW BD
1 1 1 1 1
head (csup$tabsup)sp.B sp.O sex.F sex.M
1 0.01 0 0 0.01
2 0.01 0 0 0.01
3 0.01 0 0 0.01
4 0.01 0 0 0.01
5 0.01 0 0 0.01
6 0.01 0 0 0.01
colSums (csup$tabsup)sp.B sp.O sex.F sex.M
1 1 1 1
Comparaison des profils colonnes
variable sp variable sex
names(afcrab$c1) <- names(afcrab$l1) <- names(afcrab$li)plot (rbind (afcrab$l1[,1:2], afcrab$c1[,1:2], csup$cosup[,1:2]), type="n")abline (v=0, h=0)text (afcrab$l1[,1:2], cex=.5, labels=gr, col=as.numeric(gr))text (afcrab$c1[,1:2], labels=rownames(afcrab$co), cex=.6)text (csup$cosup[,1:2], labels=rownames(csup$cosup), font=2, col=6)
-2 -1 0 1 2
-2-1
01
Axis1
Axi
s2
BM
BM
BM
BM
BMBM BM
BM BM
BM
BM
BM
BM
BM
BM
BM
BM
BM
BM
BM
BM
BMBM
BMBM
BM
BM
BM
BMBM
BM
BMBMBM
BM
BMBM
BM
BM
BMBM
BM
BM
BM
BMBM
BM
BM
BM
BM
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BF
BFBF
BF
BF
BFBF
BFBF
BF
BF
BF
BFBF
BFBF
BF
BFBF
BFBF
BFBF
BF
BF
BF
BFBFBF
OM
OM
OM
OM
OM
OM
OM
OM
OMOM
OM
OM
OMOMOM
OM
OM
OM
OM
OM
OMOM
OMOM
OM
OMOM
OMOM
OM
OM
OM
OM
OMOM
OMOM
OM
OM
OMOM
OMOM
OMOM
OM
OM
OMOM
OM
OF
OF
OFOF
OFOF
OF
OF
OF
OF
OF
OF
OF
OF
OF
OFOF
OF
OFOF
OF
OF OFOF OF
OF
OFOF
OF
OF
OF
OF
OF
OFOF
OFOF
OF
OF
OF
OF
OF
OFOF
OF
OFOFOF
OF
OF
FL
RW
CL
CW
BD
sp.B
sp.O
sex.Fsex.M
aggregate(afcrab$l1[,1:2],by=list(crabs[,1]),mean)Group.1 Axis1 Axis2
1 B 0.2997822 -0.97234782 O -0.1045915 0.8863265
aggregate(afcrab$l1[,1:2],by=list(crabs[,2]),mean)Group.1 Axis1 Axis2
1 F 0.8904758 0.10204592 M -0.6952851 -0.1880672
csup$cosupAxis1 Axis2
sp.B 0.2997822 -0.9723478
sp.O -0.1045915 0.8863265
sex.F 0.8904758 0.1020459
sex.M -0.6952851 -0.1880672
Placer ces modalités aux barycentres des points lignespar projection des scores des points lignes et coordonnées des colonnes supplémentaires
Vérification : calcul des scores moyens
Eléments supplémentairesRemarque sur l'utilisation de variables binaires disjonctivessupplémentaires dans une AFC simple (5/5)
fonction : supcol.coa ()
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
data (ours)ur <- ours [, 1:8]
Analyse Factorielle des Correspondances MultiplesPrincipe
AFCMPour l’analyse d’un tableau dont les q variables (q>2) sont exprimées en modalités
Sous R : data.frame de facteurs
Exemple :data.frame': 38 obs. of 8 variables:$ altit : Factor w/ 3 levels "1","2","3": 2 1 3 3 3 3 2 1 2 2 ...$ deniv : Factor w/ 3 levels "1","2","3": 3 2 3 3 3 3 2 1 3 2 ...$ cloiso: Factor w/ 3 levels "1","2","3": 3 1 3 3 1 3 3 2 1 3 ...$ domain: Factor w/ 3 levels "1","2","3": 2 2 2 1 2 1 2 2 2 1 ...$ boise : Factor w/ 3 levels "1","2","3": 2 1 2 3 2 3 2 1 3 3 ...$ hetra : Factor w/ 3 levels "1","2","3": 3 1 2 3 3 3 1 1 2 3 ...$ favor : Factor w/ 3 levels "1","2","3": 3 2 3 3 2 3 2 3 3 2 ...$ inexp : Factor w/ 3 levels "1","2","3": 2 2 3 2 3 3 3 2 3 3 ...
Principe : faire une AFC simple du tableau binaire disjonctif
altit deniv cloiso domain boise hetra favor inexp1 2 3 3 2 2 3 3 22 1 2 1 2 1 1 2 23 3 3 3 2 2 2 3 34 3 3 3 1 3 3 3 25 3 3 1 2 2 3 2 36 3 3 3 1 3 3 3 3head (ur)
str (ur)
Numéro de la modalité"more than 70%"de la variable altit
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances Multiples(exemple) (1/4)
dim(ur)[1] 38 8
acm <- dudi.acm (ur)Select the number of axes: 3
scatter.dudi (acm)
dim(acm$li)[1] 38 3dim(acm$co)[1] 24 3
rownames(acm$co)[1] "altit.1" "altit.2" "altit.3" "deniv.1"[5] "deniv.2" "deniv.3" "cloiso.1" "cloiso.2"[9] "cloiso.3" "domain.1" "domain.2" "domain.3"[13] "boise.1" "boise.2" "boise.3" "hetra.1"[17] "hetra.2" "hetra.3" "favor.1" "favor.2"[21] "favor.3" "inexp.1" "inexp.2" "inexp.3"
acm$eig[1][1] 0.4283099acm$rank[1] 16
d = 0.5
1
2
3
4
5
6
7
8
9
10 11 12
13
14
15
16
17
18
19
20 21
22
23
24
25
26
27
28
29
30
31 32 33
34 35
36
37
38
altit.1
altit.2
altit.3
deniv.1
deniv.2
deniv.3 cloiso.1
cloiso.2
cloiso.3
domain.1
domain.2
domain.3
boise.1
boise.2
boise.3 hetra.1
hetra.2
hetra.3
favor.1
favor.2
favor.3
inexp.1
inexp.2
inexp.3
Eigenvalues
inférieur à 23 attendu
8 variables
24 modalitésaprès la transformation binaire disjonctive des 8 variables
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances Multiples(exemple) (2/4)
Interprétation des résultats en terme de variablesineracm <- inertia.dudi (acm, col=TRUE)
ax <- 1 # choix de l'axe 1cbind( CTRabsF1=ineracm$col.abs[, ax] )
CTRabsF1altit.1 836altit.2 2altit.3 583deniv.1 220deniv.2 28deniv.3 489cloiso.1 115cloiso.2 380cloiso.3 263domain.1 320domain.2 204domain.3 0boise.1 1006boise.2 25boise.3 1105hetra.1 896hetra.2 0hetra.3 1215favor.1 703favor.2 3favor.3 856inexp.1 334inexp.2 97inexp.3 319
modalités de la variable cloiso
i= which (ineracm$col.abs[, ax] > 10000/nrow(ineracm$col.abs))# sélection des valeurs > moyennesort (ineracm$col.abs[i, ax], dec=TRUE)
hetra.3 boise.3 boise.1 hetra.1 favor.3 altit.1 favor.1 altit.3 deniv.3 1215 1105 1006 896 856 836 703 583 489
Modalités contribuant le plus à l'axe 1
Contribution des variables à l'axe 1Group.1 x
1 altit 14212 boise 21363 cloiso 7584 deniv 7375 domain 5246 favor 15627 hetra 21118 inexp 750
gvar <- rep (colnames(ur), sapply(ur, nlevels))aggregate (ineracm$col.abs[, ax], by=list(factor(gvar)), FUN=sum)
Somme des contributions des modalités de chacune des variables
Utilisation des rapports de corrélationsCTR par variables ramenés entre 0 et 1acm$cr
RS1 RS2 RS3altit 0.4867906 0.1893131 0.3876253deniv 0.2528392 0.2325247 0.1260940cloiso 0.2598395 0.2724303 0.2356382domain 0.1796741 0.6002266 0.1483924boise 0.7317972 0.1429825 0.5564289hetra 0.7233694 0.4699515 0.1274654favor 0.5352790 0.0682467 0.1534055inexp 0.2568897 0.2505504 0.2658320
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
altit
1
2
3
deniv
1 2
3
cloiso
1 2
3
domain
1
2
3
boise
1
2
3
hetra
1
2
3
favor
1 2
3
inexp
1 2
3
Analyse Factorielle des Correspondances Multiples(exemple) (3/4)
scatter (acm)boxplot.acm (acm, xax=1)
Représentations graphiques décrivant les variables
d = 1
altit
1
2
3
deniv
1
2
3
cloiso
1
2
3
domain
1
2
3
d = 1
boise
1
2
3
hetra
1
2
3
favor
1
2
3
inexp
1
2
3
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
v = 6colnames (ur)[v] # "hetra"
names(acm$co) <- names(acm$li)plot (rbind(acm$li, acm$co)[,1:2], type="n", asp=1, main=colnames(ur)[v])abline (v=0, h=0)text (acm$co, labels=rownames(acm$co), cex=.8)text (acm$li, labels=rownames(acm$li), cex=.6, col=3)
s.chull (acm$li, fac=ur[,v], op=1, clabel=0, col=1:3, add.plot=TRUE)
Analyse Factorielle des Correspondances Multiples(exemple) (4/4)
d = 0.5
hetra
1
2
3
alt
altit.2
altit.3
deniv.1
deniv.2
deniv.3
cloiso.1cloiso
cloiso.3
domain.1
domain.2
bois
boise.2
boise.3hetra.1
hetra.3
favor.1
favor.2
favor.3
inexp.1
inexp.2
inexp.3
Représentations graphiquescaractérisant les points lignes (sites) par les modalités d'une variable initiale
s.class (acm$li, fac=ur[,v], clabel=1, col=1:3, sub=colnames(ur)[v])text (acm$co, labels=rownames(acm$co), cex=.8)
-1.0 -0.5 0.0 0.5 1.0
-0.5
0.0
0.5
1.0
1.5
hetra
Axis1
Axi
s2
altit.1
altit.2
altit.3
deniv.1
deniv.2
deniv.3
cloiso.1cloiso.2
cloiso.3domain.1
domain.2
domain.3
boise.1
boise.2
boise.3hetra.1
hetra.2
hetra.3
favor.1
favor.2
favor.3
inexp.1
inexp.2
inexp.3
1
2
3
4
5
6
7
8
9
10
1112
13
14
15
16
17
18
19
2021
22
23
24
25
26
27
28
29
30
31 3233
3435
36
37
38
variable affichée
choix de la variable
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances Multiples
barplot (acm$eig, names.arg= 1:acm$rank, xlab="Axes", ylab="Inertie", main= "Eboulement des valeurs propres")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Eboulement des valeurs propres
Axes
Iner
tie
0.0
0.1
0.2
0.3
0.4
inertia cum ratio1 0.428309854 0.4283099 0.21415492 0.278278207 0.7065881 0.35329403 0.250110212 0.9566983 0.47834914 0.188768008 1.1454663 0.5727331. . .13 0.028391037 1.9500283 0.975014114 0.026236575 1.9762649 0.988132415 0.016874373 1.9931392 0.996569616 0.006860761 2.0000000 1.0000000
Somme des valeurs propres= (nombre de modalités - nombre de variables) / nombre de variables
(nrow (acm$co) - ncol (ur)) / ncol(ur)[1] 2
ineracm$TOT [c(1:4, 13:16),]
Valeurs propres moyenne = 1/ nombre de variables 1/ncol(ur) # mean (ineracm$TOT [,1])[1] 0.125
Cas particulier de l'inertie dans l'AFCM
L'inertie totale ne dépend que du nombre de variables et de modalités.
L'inertie moyenne ne dépend que du nombre de variables.
Eviter :des nombres de modalités très dissemblables des modalités faiblement représentées (<5%)
Remède :Tenter des regroupements
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Tableau de Burt = tableau de contingence multipleCalcul des tableaux de contingence entre les couples de variables qualitatives (facteurs)
urb <- acm.burt (ur, ur)
Analyse Factorielle des Correspondances MultiplesComparaison avec l'AFC du tableau de Burt
altit.1 altit.2 altit.3 deniv.1 deniv.2 deniv.3 cloiso.1 cloiso.2 cloiso.3altit.1 8 0 0 5 2 1 3 2 3altit.2 0 17 0 4 8 5 7 2 8altit.3 0 0 13 4 4 5 2 0 11deniv.1 5 4 4 13 0 0 6 1 6deniv.2 2 8 4 0 14 0 4 1 9deniv.3 1 5 5 0 0 11 2 2 7cloiso.1 3 7 2 6 4 2 12 0 0cloiso.2 2 2 0 1 1 2 0 4 0cloiso.3 3 8 11 6 9 7 0 0 22
dim(urb) # 24 24urb [1:9,1:9]
AFC simple du tableau de Burtacmb <- dudi.coa (urb, scannf=FALSE)
acmb$eig[1] # 0.1834493acm$eig[1]^2 # 0.1834493
Conclusions :L’AFC du tableau de Burt est équivalente à l’AFCM des variables qualitatives :– Les valeurs propres de l’AFCM sont égales à la racine carrée des valeurs propres trouvées par l’AFC du tableau
de Burt ;– La représentation des variables est la même (à un facteur multiplicatif près) ;– La représentation des individus de l’AFC est la même en les mettant en individus supplémentaires.
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Principe : n’avoir qu’un tableau de variables qualitatives
Stratégie : découper en classes les variables quantitatives
Soit V l’ensemble des variables quantitatives. Chaque variable v est transformée en n variables qualitatives par découpage en n classes et chacune étant repérée par le numéro de la classe.
Deux choix à réaliser : 1. le nombre de classes 2. les bornes des classes
Deux stratégies : 1. avoir globalement le même nombre de classes par variable2. définir plutôt des classes d’effectifs égaux à des classes d’amplitude égale.
Deux fonctions : 1. cut () pour découper une variable continue en classes2. recode() pour regrouper des classes [librairie car]
Remarque : si variable avec NA, créer une classe NA regroupant les données manquantes
Traitement des tableaux ayant desvariables quantitatives et qualitatives (1/11)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Découpage en classes des variables quantitatives (continues) 1/2
fonction : cut ()
# Avec indication du nombre de classes : breaks = nombre de classesr1 <- cut (x, breaks = 4)table (r1)(2.68,3.76] (3.76,4.83] (4.83,5.9] (5.9,6.98]
8 36 43 13Paramètrelabels = NULL -> bornes (défaut)labels = FALSE -> n° des classes
x <- rnorm(100,5)range(x) # 2.689071 6.973328r <- hist (x)r$breaks # 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0r$counts # 1 5 13 16 20 19 17 4 5$equidist # TRUE
Exemple
( r1 <- cut (x, breaks = 4, labels = FALSE) )[1] 3 1 2 3 3 4 2 3 2 2 2 3 4 3 2 3 3 4 4 3 4 3 3 2 3 2 4 3 3 2 3 2 2 2 3 3 3 2 1 4 3 2 2 3 2 2 2 3 4 3 1 3
[53] 2 1 3 3 3 4 1 3 3 3 2 3 2 2 2 3 2 2 2 2 4 1 3 3 3 4 3 3 2 3 4 2 3 2 2 1 2 2 3 2 2 3 1 3 3 2 4 3
table (r1)1 2 3 4 8 36 43 13
Traitement des tableaux ayant desvariables quantitatives et qualitatives (2/11)
Histogram of x
x
Freq
uenc
y
3 4 5 6 7
05
1015
20
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
# Avec des classes d’effectifs égaux : breaks = quantile ()
r3 <- cut (x, breaks = quantile(x), include.lowest = TRUE) table (r3)[2.69,4.13] (4.13,4.91] (4.91,5.51] (5.51,6.97]
25 25 25 25
summary(x)Min. 1st Qu. Median Mean 3rd Qu. Max. 2.689 4.134 4.911 4.895 5.513 6.973
# Avec indication des limites des classes : breaks = bornes
r2 <- cut (x, breaks = c(min(x), 4, mean(x), 6, max(x)), include.lowest = TRUE) table (r2)[2.69,4] (4,4.89] (4.89,6] (6,6.97]
19 28 44 9
Découpage en classes des variables quantitatives : cut () 2/2
Refaire avec include.lowest = FALSE
Fonction quantile ()quantile (x, probs = seq (0, 1, 1 / n), na.rm = FALSE) # donne par défaut les quartilesn étant le nombre souhaité de classes # par défaut n = 4
Traitement des tableaux ayant desvariables quantitatives et qualitatives (3/11)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
names(Cars93); ?(Cars93)car <- Cars93 [,c(5,13,17,19,24,18,3,9,10)] dim (car)[1] 93 9
summary(car)Price Horsepower Fuel.tank.capacity Length Luggage.room
Min. : 7.40 Min. : 55.0 Min. : 9.20 Min. :141.0 Min. : 6.00 1st Qu.:12.20 1st Qu.:103.0 1st Qu.:14.50 1st Qu.:174.0 1st Qu.:12.00 Median :17.70 Median :140.0 Median :16.40 Median :183.0 Median :14.00 Mean :19.51 Mean :143.8 Mean :16.66 Mean :183.2 Mean :13.89 3rd Qu.:23.30 3rd Qu.:170.0 3rd Qu.:18.80 3rd Qu.:192.0 3rd Qu.:15.00 Max. :61.90 Max. :300.0 Max. :27.00 Max. :219.0 Max. :22.00
NA's :11.00Passengers Type AirBags DriveTrain
Min. :2.000 Compact:16 Driver & Passenger:16 4WD :101st Qu.:4.000 Large :11 Driver only :43 Front:67Median :5.000 Midsize:22 None :34 Rear :16Mean :5.086 Small :213rd Qu.:6.000 Sporty :14Max. :8.000 Van : 9 5 quantitatives
1 discrète3 qualitatives
Traitement des tableaux ayant desvariables quantitatives et qualitatives (4/11)
Exemple : library (MASS)data (Cars93)
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
# Changement d’identificateur des colonnesnames (car) <- c("prix","PU","tank","L","coffr","pers","type","Rbag","trac")
par (mfrow=c(3,3))for (i in 1:6) hist (car[,i], main = colnames(car)[i], xlab="", col=i)par (mfrow=c(1,1))
# Histogrammes
Traitement des tableaux ayant desvariables quantitatives et qualitatives (5/11)
prixFr
eque
ncy
10 20 30 40 50 60
05
1020
30
PU
Freq
uenc
y
50 100 150 200 250 300
05
1525
tank
Freq
uenc
y
10 15 20 25
05
1015
20
L
Freq
uenc
y
140 160 180 200 220
05
1020
coffrFr
eque
ncy
10 15 20
05
1020
pers
Freq
uenc
y
2 3 4 5 6 7 8
010
2030
40
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Découpage en classes des variables quantitatives (continues)
Recodage avec indication des limites des classes (br=bornes)# variable "PU" (Horsepower)x <- car$PUcar$PU <- as.factor ( cut (x, br = c(min(x),100,150,200,max(x)), inc = TRUE, lab = NULL))
Recodage avec indication du nombre de classes (br=nombre de classes)# variables : "tank" , "L" , "coffr" numv <- 3:5 # numéro des variables à recodercl <- c(4,5,6) # nombre de classes par variablefor ( i in 1:length(numv) ) {car[,numv[i]] <- as.factor (cut (car[,numv[i]], br = cl[i], inc = TRUE, lab = NULL)) }
Traitement des tableaux ayant desvariables quantitatives et qualitatives (6/11)
Recodage avec des classes d’effectifs égaux (br=quantile)x <- car$prix
# découpage en n classes équiprobablesn <- 4 # nombre de classes souhaité (ici n=4 soit effectif/classe de 25%)car[,1] <- as.factor (cut (x, br=quantile(x, probs=c(seq(0,1,1/n))), inc = TRUE, lab = FALSE))
Préparation des données
Fonction cut ()
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Transformation des variables discrètes (quantitatives)
# pers (Passengers)
is.vector (car[,6])[1] TRUE
summary (car[,6])Min. 1st Qu. Median Mean 3rd Qu. Max. 2.000 4.000 5.000 5.086 6.000 8.000
car[,6] <- as.factor (car[,6])
summary (car[,6])
2 4 5 6 7 8 2 23 41 18 8 1
Traitement des tableaux ayant desvariables quantitatives et qualitatives (7/11)
Fonction as.factor ()
Préparation des données
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Recodage des variables 1/3
x <- car[,6] # variable "pers" table (x)2 4 5 6 7 8 2 23 41 18 8 1
library (car)
# regroupement des 2 premières et des 2 dernières classes
car[,6] <- recode (x,"c(2,4) = '2-4'; c(7,8) = '7-8' ")
table (car[,6])2-4 5 6 7-8 25 41 18 9
Fonction recode () dans library (car)
nouvelles valeurs
Traitement des tableaux ayant desvariables quantitatives et qualitatives (8/11)
Préparation des données
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Recodage des variables 2/3
x <- car[,5] # variable "coffr" table (x)[5.98,8.66] (8.66,11.3] (11.3,14] (14,16.7] (16.7,19.3] (19.3,22]
3 14 35 16 10 4( n <- levels(x) )[1] "[5.98,8.66]" "(8.66,11.3]" "(11.3,14]" "(14,16.7]" "(16.7,19.3]" "(19.3,22]"
car[,5] <- recode (x,"c(n[1], n[2])=1 ; n[3]=3 ; n[4]=4 ; c(n[5], n[6])=6")
table (car[,5] )1 3 4 6 17 35 16 14
Autre syntaxe de recodage : y <- recode (car[,5], "1:4='A'; else ='B'")table(y)A B 68 25
sum(table(y))[1] 93sum(table(car[,5]))[1] 82
Pourquoi cette différence ?
Traitement des tableaux ayant desvariables quantitatives et qualitatives (9/11)
Préparation des données
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Recodage des variables 3/3
cas des données manquantes
# utilisation de la fonction recode()car[,5] <- recode (car[,5], "NA = 0")table (car[,5]) 0 1 3 4 6 11 17 35 16 14
car[,5] # variable "coffr" [1] 1 4 4 6 3 4 6 6 4 6 4
[12] 3 4 3 4 <NA> <NA> 6 <NA> 4 4 6 [23] 1 3 4 <NA> 4 1 1 4 3 3 3 [34] 3 6 <NA> 6 6 1 1 1 3 4 1 [45] 3 1 4 4 4 1 6 6 4 3 4 [56] <NA> <NA> 3 4 1 4 1 4 3 4 <NA>[67] 4 4 4 <NA> 6 1 6 3 3 4 6 [78] 4 3 1 4 4 1 1 3 4 <NA> 1 [89] <NA> 4 4 4 4 Levels: 1 3 4 6
table (car[5])1 3 4 6
17 35 16 14
# recherche données manquanteswhich (is.na(car), arr.ind=TRUE)
row col16 16 517 17 519 19 526 26 536 36 556 56 557 57 566 66 570 70 587 87 589 89 5
Traitement des tableaux ayant desvariables quantitatives et qualitatives (10/11)
Préparation des données
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Traitement des tableaux ayant desvariables quantitatives et qualitatives (11/11)
Résumé du tableau soumis à l’analyse
prix PU tank L coffr pers 1:24 [55,100] :22 [9.18,13.6]:20 [141,157]: 3 0:11 2-4:25 2:23 (100,150]:32 (13.6,18.1]:42 (157,172]:16 1:17 5 :41 3:23 (150,200]:28 (18.1,22.6]:28 (172,188]:38 3:35 6 :18 4:23 (200,300]:11 (22.6,27] : 3 (188,203]:29 4:16 7-8: 9
(203,219]: 7 6:14
type Rbag tracCompact:16 Driver & Passenger:16 4WD :10 Large :11 Driver only :43 Front:67 Midsize:22 None :34 Rear :16 Small :21 Sporty :14 Van : 9
summary(car)
Fin de la préparation des données
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
carm <- dudi.acm(car[,-1],scannf=FALSE)
ctrs <- inertia.dudi (carm, r=F, c=T)
ctrs$TOT[1:5,]inertia cum ratio
1 0.5522426 0.5522426 0.16992082 0.4456002 0.9978428 0.30702853 0.3679968 1.3658395 0.42025834 0.2795575 1.6453970 0.50627605 0.2497128 1.8951098 0.5831107
s.label (carm$co[,1:2], clab = 0.6)
barplot (ctrs$TOT[,1])
Analyse Factorielle des Correspondances Multiples(exemple 2) (1/3)
AFCM sans la variable Prix
0.0
0.1
0.2
0.3
0.4
0.5
d = 1
PU..55.100.
PU..100.150. PU..150.200.
PU..200.300. tank..9.18.13.6.
tank..13.6.18.1.
tank..18.1.22.6.
tank..22.6.27.
L..141.157.
L..157.172.
L..172.188.
L..188.203.
L..203.219.
cof f r.0
cof f r.1
cof f r.3
cof f r.4
cof f r.6
pers.2.4
pers.5
pers.6
pers.7.8
ty pe.Compact
ty pe.Large
ty pe.Midsize
ty pe.Small
ty pe.Sporty
ty pe.Van
Rbag.Driv er...Passenger
Rbag.Driv er.only
Rbag.None
trac.4WD
trac.Front
trac.Rear
Elimination de Prix
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
# Transformation de la variable Prixcsup <- acm.disjonctif (car[1])
# Introduction dans l’analysecarmsup <- supcol (carm, csup)
carmsup$cosup
Introduction de la variable Prixen variable illustrative
Analyse Factorielle des Correspondances Multiples(exemple 2) (2/3)
RemarqueRemarque :Dans ce cas, supcol utilise supcol.default() faisant intervenir
carm$l1 et carm$lw (ici constant) et non supcol.coa().Pour avoir des coordonnées identiques à l’AFC simple du
tableau disjonctif, il convient de pondérer ces valeurs par le poids de ces points.
Comp1 Comp2prix.1 0.32748085 -0.05184403prix.2 0.00445254 -0.01211915prix.3 -0.14824019 0.14308666prix.4 -0.18369320 -0.07912348
(coosup <- carmsup$cosup / colMeans(csup) )Comp1 Comp2
prix.1 1.26898830 -0.20089561
prix.2 0.01800375 -0.04900353
prix.3 -0.59940600 0.57856782
prix.4 -0.74275945 -0.31993409
x <- paste("(",round(100*carm$eig[1:2]/sum(carm$eig),1),"%)",sep="")plot (c(carm$li[,1],carm$co[,1]), c(carm$li[,2],carm$co[,2]), type="n", asp=1,
main="car93", xlab=paste("Axe 1",x[1]), ylab=paste("Axe 2",x[2]))abline (v=0, h=0)points (carm$li[,1:2], pch=19, cex=.5, col=3) # Véhiculess.label (coosup[,1:2], clab=.8, add.plot = TRUE ) # Prixsel <- grep ("cof", rownames(carm$co), fixed=TRUE) # Choix colonnetext (carm$co[sel,1:2], labels=rownames(carm$co)[sel], cex=.8, col=2)
-1 0 1 2-1
01
23 car93
Axe 1 (17%)
Axe
2 (1
3.7%
)
prix.1
prix.2
prix.3
prix.4
coffr.0
coffr.1
coffr.3coffr.4
coffr.6
MNHN Ecole doctorale - Module Analyse des données sous R (niveau 1)
Analyse Factorielle des Correspondances Multiples(exemple 2) (3/3)
Autres représentations d'une variable qualitative sur une carte factorielle
Les points prix sont placés à la moyenne des scores des points lignes
qu'ils caractérisent
opar <- par()par (mfrow = c(2, 2), mgp = c(1.5, .6, 0), mar = c(3, 2.5, 1, 1))plot.new()
plot (carm$l1[,1:2], type="n") abline (v=0, h=0)points (carm$l1[,1:2], pch=19, cex=.6, col=as.numeric(car[,1])) # scorestext (coosup[,1:2], labels=rownames(coosup), col=1: nrow(coosup), font=2) # coordonnées
s.class (carm$l1[,1:2], fac=car[,1], col=1:4, label=names(csup))
s.chull (carm$l1[,1:2], fac=car[,1], col=1:4, optchull=1, cpoint=1, label=names(csup), clabel=1)
par(opar)
-2 -1 0 1 2
-10
12
3
RS1
RS
2
prix.1prix.2
prix.3
prix.4
d = 1
prix.1 prix.2
prix.3
prix.4
d = 1
prix.1 prix.2
prix.3
prix.4