Analyse de Données
Comprendre l'ACP, l'AFC, l'ACM et la Classification sans prérequis. L'accent est sur l'interprétation des résultats.
Stats Descriptives
Moyenne, variance, corrélation, Chi-Deux
ACP
Cercle des corrélations, inertie, cos²
AFC & ACM
Variables qualitatives, barycentres
Classification
K-Means, CAH, dendrogramme
Les 4 étapes d'une bonne interprétation
L'Inertie
% de variance capté par les axes. Les axes résument-ils bien les données ?
La Contribution (CTR)
Qui fabrique l'axe ? Quelles variables tirent le graphique ?
La Qualité ($Cos^2$)
Le point est-il vraiment sur ce plan 2D ou illusion d'optique ?
Conclusion Métier
Traduire la proximité géométrique en phrase claire.
Piège fréquent
Ne dites jamais : "La variable est sur l'axe 1". Dites : "La variable X contribue fortement à l'axe 1 (CTR = 32%) et est très bien représentée (Cos² = 0.89), donc l'axe 1 oppose les individus ayant de fortes valeurs de X à ceux ayant de faibles valeurs."
Chapitre 0 : Premiers pas avec R
Avant d'analyser, il faut savoir charger des données et les manipuler.
Charger un fichier de données
data <- read.table("Jussac.txt", header = TRUE)
data <- read.table("Menages.txt", header = TRUE, row.names = 1)
# Vérifier ce qu'on a chargé head(data) # 6 premières lignes
dim(data) # Dimensions n x p
str(data) # Structure : num ? factor ?
summary(data) # Résumé rapide
str() est indispensable : vérifiez que vos variables quantitatives sont bien num et vos qualitatives Factor.
data$sexe <- as.factor(data$sexe)
Les 4 objets de base en R
1. Le vecteur
Suite de valeurs de même type.
v[2] # 5
2. La matrice
Tableau 2D, même type partout.
m[1,2]
3. La liste
Sac qui contient n'importe quoi.
L$a
4. Le data.frame
L'objet roi ! Types différents par colonne.
df$age
Manipulations indispensables
sd(data$revenu) # Écart-type
median(data$revenu) # Médiane
# Sélectionner data[1:10, ] # 10 premières lignes
data[data$age > 50, ] # Filtre
# Statistiques par groupe tapply(data$revenu, data$region, mean)
summary(), str() et head() sont vos trois premières commandes obligatoires après avoir chargé un fichier.
Pièges fréquents en R
Le piège attach()
attach(data) semble pratique mais crée des conflits si vous modifiez le data.frame. Préférez la syntaxe data$variable ou with(data, ...). Si vous utilisez attach, pensez systématiquement à detach(data).
Variables qualitatives mal codées
Après chaque read.table(), faites str(data). Si une variable qualitative apparaît en chr ou int au lieu de Factor, corrigez avec data$var <- as.factor(data$var).
Valeurs manquantes silencieuses
mean(x) renvoie NA si une seule valeur manque. Utilisez mean(x, na.rm = TRUE) ou repérez-les avec any(is.na(data)) et which(is.na(data$var), arr.ind = TRUE).
Bonne pratique
Trois commandes obligatoires après chaque import : head(data), str(data), summary(data). Cela détecte 90% des problèmes avant même de commencer l'analyse.
Chapitre 1 : Statistiques Descriptives
Le socle de tout le cours : décrire ses données avant d'analyser.
Le vocabulaire à maîtriser
Population
L'ensemble étudié. On note n le nombre d'individus.
Individu
Chaque "ligne" du tableau. Une unité statistique.
Variable
Chaque "colonne". Une information recueillie.
Qualitative (Catégorielle)
Valeur = catégorie. Pas de moyenne !
- Nominale : pas d'ordre (Sexe, Région)
- Ordinale : avec ordre (Petit/Moyen/Grand)
Quantitative (Numérique)
Valeur = nombre calculable.
- Discrète : entières (Nb enfants)
- Continue : réelles (Taille, Poids)
Piège : Un code postal est un nombre (49000) mais c'est une variable qualitative ! On ne calcule pas la moyenne des codes postaux.
Variables Qualitatives
Table de fréquences
| Modalité | Effectif | Fréquence |
|---|---|---|
| Féminin | 7 | 41.2% |
| Masculin | 10 | 58.8% |
| Total | 17 | 100% |
Barplot
Variables Quantitatives
Moyenne $\bar{X}$
Centre de gravité. Sensible aux extrêmes. mean(x)
Médiane
Coupe en deux parties égales. median(x)
Variance $\sigma^2$
Dispersion autour de la moyenne. var(x)
Écart-type $\sigma$
Racine carrée de la variance. sd(x)
reg <- lm(y ~ x, data=data)
summary(reg) # R² dans la sortie
Croisement & Test du Chi-Deux
Tableau brut
| Fumeur | Non-Fumeur | Total | |
|---|---|---|---|
| Sportif | 10 | 40 | 50 |
| Non-Sportif | 30 | 20 | 50 |
| Total | 40 | 60 | 100 |
Profils-Lignes
| Fumeur | Non-Fumeur | Total | |
|---|---|---|---|
| Sportif | 20% | 80% | 100% |
| Non-Sportif | 60% | 40% | 100% |
prop.table(tab, 1) # Profils-lignes
chisq.test(tab) # Test du Chi-Deux
Visualisations indispensables
Histogramme
Montre la forme de la distribution et permet de détecter visuellement les valeurs extrêmes.
hist(data$Criminalite, freq = FALSE) # densité
hist(data$Criminalite, breaks = c(0, 2, 4, 6, 8, 10, 15)) # classes manuelles
Boxplot
Médiane, quartiles, et outliers en un coup d'œil. Essentiel pour comparer des sous-populations.
boxplot(Criminalite ~ Region, data = data) # par groupe
boxplot(data, notch = TRUE, varwidth = TRUE) # toutes
Nuage de points (Scatterplot)
Pour croiser deux variables quantitatives et visualiser une éventuelle relation linéaire.
plot(data$Analphabetisme, data$Criminalite, col = as.numeric(data$Region)) # couleur par région
text(data$Analphabetisme, data$Criminalite, labels = row.names(data), pos = 3) # labels
Boucle graphique : Pour inspecter toutes les variables quantitatives d'un coup : par(mfrow = c(2, 3)) puis une boucle for(i in 1:6) hist(data[,i], main = names(data)[i]).
Matrice des corrélations
Quand on a p variables quantitatives, il faut une vision globale des liens linéaires deux-à-deux avant de se lancer dans une ACP.
round(M, 2) # arrondi pour lisibilité
# Corrélations avec une variable cible M[, "Criminalite"] # quelles variables expliquent la criminalité ?
r > 0.7
Corrélation forte. Risque de redondance. Ces variables vont probablement s'aligner sur le même axe en ACP.
r < 0
Corrélation négative. Les variables seront opposées sur le cercle des corrélations (angle ~180°).
Attention : cor() calcule les corrélations de Pearson (linéaire) par défaut. Si la relation est courbe, la corrélation peut être proche de 0 malgré un lien fort. D'où l'intérêt de toujours visualiser avant de calculer.
Interpréter les graphiques
Lire un histogramme
Classe la plus haute (pic central).
Moyenne tirée vers la queue. Médiane plus robuste.
Barres isolées aux extrémités à vérifier.
Classe vide = sous-populations mélangées ?
Lire un boxplot
Vers Q1 = asymétrie à droite. Vers Q3 = asymétrie à gauche.
Boîte large = forte dispersion. Boîte étroite = concentré.
Au-delà des moustilles (> 1.5×IQR).
Comparez d'abord les médianes, puis les dispersions.
Lire un scatterplot
↗ = positive. ↘ = négative. → = nulle.
Deux nuages séparés = 3ème variable qualitative cache.
Point isolé qui influencerait fortement r.
Corrélation ≠ causalité. Ne pas conclure trop vite.
mean(x), sd(x), var(x) # Stats de base
hist(x), boxplot(x) # Graphiques
cor(x, y); lm(y ~ x, data=data) # Régression
table(x, y); chisq.test(tab) # Chi-Deux
tapply(x, facteur, mean) # Moyenne par groupe
Chapitre 2 : L'ACP
La méthode phare pour résumer un tableau de chiffres en graphique 2D. C'est l'examen !
Pourquoi l'ACP ?
Imaginez un fichier avec 500 voitures et 10 caractéristiques. L'ACP trouve les 2 directions les plus importantes et projette tout sur ces 2 axes.
Analogie : La photo
L'ACP choisit le meilleur angle pour voir le maximum de détails.
Analogie : L'ombre
L'ACP oriente la lumière pour que l'ombre soit la plus ressemblante.
Données exemple : StateFacts
| État | Pop | Revenu | Analphab | Meurtre | Diplôme |
|---|---|---|---|---|---|
| AL | 3615 | 3624 | 2.1 | 15.1 | 41.3 |
| AK | 365 | 6315 | 1.5 | 11.3 | 66.7 |
| AZ | 2212 | 4530 | 1.8 | 7.8 | 58.1 |
n=50 états, p=5 variables. But : résumer en 2 axes.
Condition : L'ACP ne s'applique qu'aux variables quantitatives. Les qualitatives vont en variables supplémentaires.
Métrique et Inertie
Le problème
Écart-type de Pop = 4464, de Analphab = 0.61. La population domine totalement !
| Variable | Écart-type |
|---|---|
| Pop | 4464 |
| Revenu | 614 |
| Analphab | 0.61 |
La solution
Centrer-réduire : même importance pour toutes (moyenne=0, écart-type=1).
En R : scale.unit = TRUE
Règle : ACP non normée = même unité + écarts comparables. ACP normée (par défaut) = unités différentes. Cas le plus fréquent.
Éboulis des Valeurs Propres
Valeurs propres
| Axe | Val. propre | % Inertie | % Cumulé |
|---|---|---|---|
| 1 | 2.48 | 49.6% | 49.6% |
| 2 | 1.43 | 28.5% | 78.1% |
| 3 | 0.52 | 10.4% | 88.5% |
| 4 | 0.33 | 6.6% | 95.1% |
| 5 | 0.24 | 4.9% | 100% |
Éboulis
Règle de Kaiser : On conserve les axes de valeur propre > 1. Un axe < 1 apporte moins qu'une variable seule.
Le Cercle des Corrélations
Données brutes
| Voiture | Cylindrée | Poids | Vit. Max |
|---|---|---|---|
| Ferrari | 5000 | 1200 | 320 |
| Twingo | 1200 | 900 | 150 |
| Camion | 6000 | 5000 | 110 |
1. Longueur = Cos²
Plus la flèche touche le cercle, mieux la variable est représentée.
2. Angle = Corrélation
0° = positive. 90° = indépendante. 180° = négative.
3. Position = Signe
Droite = valeur positive sur l'axe. Gauche = négative.
Comment rédiger :
"Les flèches Poids et Vitesse Max touchent le bord du cercle (Cos² proche de 1). Elles sont presque opposées (angle ~180°), donc fortement anti-corrélées. L'Axe 1 oppose les véhicules lourds et puissants (à droite) aux véhicules rapides et légers (à gauche)."
Le Nuage des Individus
Le Lien Brut → Graphique
Le nuage se lit en surimpression du cercle des variables. Mêmes axes !
- "Poids" tirait vers la droite → "Camion" est à droite (logique).
- "Vitesse Max" tirait vers la gauche → "Ferrari" est à gauche.
- "Twingo" au centre = valeurs moyennes.
Proximité = Ressemblance : deux individus proches ont des profils similaires.
$Cos^2$ (Qualité)
Proche de 1 = l'individu est fidèlement représenté sur le plan.
CTR (Contribution)
Au-delà de $1/n$ = l'individu participe fortement à la construction de l'axe.
Méthode d'Interprétation en 5 Étapes
Valeurs propres
Combien d'axes ? Règle de Kaiser + coude. Citer le % cumulé.
Qualité (Cos²)
Quelles flèches touchent le bord ? On n'interprète que celles bien représentées.
Corrélations (Angles)
Groupes de variables corrélées positivement, négativement, ou indépendantes.
Nommer les axes
Utiliser les CTR. Ex: "Axe 1 = niveau d'instruction (Diplôme + vs Analphab -)".
Individus
Positionner les extrêmes. Vérifier leur Cos². Relier aux variables.
Synthèse type examen
"L'ACP normée retient les deux premiers axes (78% d'inertie). L'axe 1 oppose Diplôme (+) à Analphabétisme et Meurtre (-). C'est l'axe du niveau d'instruction. Les États du Sud (LA, MS, AL) sont à gauche : faible diplomation, forte criminalité. Les États de la côte Ouest (CA, NY) sont à droite."
Fiche de lecture rapide — Cercle des corrélations
Ce que je vois
- Une flèche proche du cercle → bien représentée (Cos² élevé).
- Deux flèches proches l'une de l'autre → variables corrélées positivement.
- Deux flèches opposées → corrélées négativement.
- Deux flèches à 90° → indépendantes.
- Une flèche au centre → mal représentée, ne pas interpréter.
Ce que je dis
- "La variable X est très bien représentée sur ce plan (Cos² = 0.92)."
- "Les variables X et Y sont fortement corrélées positivement (angle faible)."
- "L'axe 1 oppose X (à droite) à Y (à gauche), c'est l'axe du..."
- "La variable Z est proche du centre, elle n'interprète pas ce plan."
Fiche de lecture rapide — Nuage des individus
Ce que je vois
- Deux individus proches → profils similaires.
- Un individu extrême → fortement contributeur (vérifier CTR).
- Un individu isolé → outlier, vérifier son Cos².
- Individus proches d'une flèche → forte valeur pour cette variable.
- Individus opposés à une flèche → faible valeur pour cette variable.
Ce que je dis
- "L'individu A est proche de l'individu B, ils partagent un profil similaire."
- "L'individu C est extrême sur l'axe 1 (CTR = 8%), il participe fortement à sa construction."
- "L'individu D est mal représenté (Cos² = 0.3), sa position sur ce plan est peu fiable."
Variables supplémentaires
Les variables supplémentaires sont projetées sur les axes sans participer à leur construction. C'est l'outil idéal pour interpréter l'ACP sans fausser le calcul.
Quantitatives supplémentaires
Corrélation avec les composantes principales. Se lit comme une flèche sur le cercle, mais calculée a posteriori.
Qualitatives supplémentaires
On calcule les barycentres des individus par modalité. La fonction s.class du package ade4 superpose ces barycentres sur le plan des individus.
Quand les utiliser ? Si vous avez une variable qualitative qui structure vos données (ex: Région, Sexe, CSP) mais qui n'est pas quantitative, ne la mettez jamais dans l'ACP active. Faites-en une variable supplémentaire.
Cas pratiques détaillés
Étude des habitudes de consommation (12 ménages)
7 postes de dépenses alimentaires pour 12 ménages caractérisés par CSP et nombre d'enfants. Toutes les variables sont exprimées dans la même unité (francs).
- Métrique : comme les unités sont identiques, on peut envisager une ACP non normée (
scale = FALSE). Les variables avec les plus grandes variances (Viandes, Vin) pèseront plus lourd. - Interprétation : l'axe 1 oppose souvent les ménages à gros budget alimentaire (nombreux enfants, cadres) aux ménages plus modestes.
- Variables supplémentaires : CSP et nombre d'enfants projetés en supplémentaires pour comprendre la structuration sans influencer les axes.
acp <- dudi.pca(data[, 3:9], scale = FALSE, scannf = FALSE, nf = 3)
Le Canidé de Jussac (individu supplémentaire)
6 mesures sur des crânes de chiens et de loups. Un crâne inconnu (Jussac) doit être classé. Les variables ont des unités différentes (longueurs vs largeurs).
- Métrique : unités différentes → ACP normée obligatoire (
scale = TRUE). - Jussac en supplémentaire : on calcule ses coordonnées à partir des axes construits sur chiens+loups uniquement. S'il tombe dans le nuage des chiens, c'est un chien (et vice-versa).
- Règle d'affectation : calculer les distances de Jussac aux barycentres Chiens et Loups sur le plan factoriel. La classe la plus proche l'emporte.
acp <- dudi.pca(chiens.loups, scale = TRUE, scannf = FALSE, nf = 5)
# Coordonnées de Jussac sur les axes
jussac.scale <- scale(jussac, center = acp$cent, scale = acp$norm)
coord.jussac <- as.matrix(jussac.scale) %*% as.matrix(acp$c1)
# Calcul acp <- dudi.pca(data, scale = TRUE, scannf = FALSE, nf = 3)
# Valeurs propres acp$eig
barplot(acp$eig)
# Inertie, cos² et contributions Imen <- inertia.dudi(acp, col.inertia = TRUE, row.inertia = TRUE)
Imen$tot.inertia
Imen$row.rel # cos² individus
Imen$col.abs # contributions variables
# Cercle et plans s.corcircle(acp$co, clabel = 0.8)
s.class(acp$li, fac = quali, cstar = 0, cpoint = 0, add.plot = TRUE)
Chapitre 3 : L'AFC et l'ACM
Pour les variables qualitatives : l'AFC (2 variables) et l'ACM (plusieurs variables).
Analyse Factorielle des Correspondances
L'AFC s'applique à une table de contingence croisant deux variables qualitatives. Elle généralise le test du $\chi^2$ en fournissant une représentation graphique.
Table de contingence
| Yeux \ Cheveux | Blonds | Bruns | Noirs |
|---|---|---|---|
| Bleus | 94 | 46 | 26 |
| Verts | 47 | 76 | 41 |
| Marrons | 31 | 119 | 84 |
Profils-Lignes
| Yeux \ Cheveux | Blonds | Bruns | Noirs |
|---|---|---|---|
| Bleus | 55.3% | 27.1% | 15.3% |
| Verts | 27.8% | 44.9% | 24.3% |
| Marrons | 12.4% | 47.6% | 33.6% |
Lien : Inertie totale = $\frac{\chi^2_{obs}}{n}$. Plus l'inertie est grande, plus les variables sont liées.
Intuition : Si X et Y sont indépendantes, tous les profils sont identiques au profil moyen. Le nuage est réduit à un point, l'inertie est nulle.
Le Principe Barycentrique
En AFC, on trace les Lignes et Colonnes sur le même graphique. Un point-ligne se place au barycentre des points-colonnes qu'il a le plus choisis.
| Paris | Lyon | Marseille | |
|---|---|---|---|
| Cadre | 80 | 10 | 10 |
| Ouvrier | 10 | 20 | 70 |
Cadres à Paris, Ouvriers à Marseille.
Règles sur la carte simultanée
- Proximité Ligne-Colonne = Attraction : effectif supérieur à l'indépendance.
- Proximité Ligne-Ligne = Profils similaires : même répartition sur les colonnes.
- Éloignement = Répulsion : points opposés sur un axe se repoussent.
Analyse des Correspondances Multiples
L'ACM s'applique à plusieurs variables qualitatives. R transforme silencieusement le tableau en Tableau Disjonctif Complet (TDC) binaire.
Tableau fourni
| Ind | Sexe | Taille |
|---|---|---|
| Id_1 | H | Grand |
| Id_2 | F | Petit |
TDC généré
| Ind | S_H | S_F | T_G | T_P |
|---|---|---|---|---|
| Id_1 | 1 | 0 | 1 | 0 |
| Id_2 | 0 | 1 | 0 | 1 |
Important : Chaque ligne contient autant de "1" que de variables. Cette structure creuse fait que l'inertie des premiers axes est toujours très faible.
Inertie faible en ACM
Ne paniquez pas : Si vous voyez "12% sur l'axe 1" en ACM, ce n'est pas une erreur. C'est normal à cause de la structure du TDC.
Correction de Benzécri
Modifie le calcul des % d'inertie pour ne garder que les axes "informatifs" (dont la valeur propre dépasse 1/s, où s = nombre de variables).
Proximité modalités
Deux modalités de variables différentes proches = coexistent fréquemment.
Proximité individus
Deux individus proches = ont répondu de la même manière.
Exemples détaillés
AFC : Structure d'âge des cadres de l'agriculture
Tableau croisant 10 secteurs d'activité et 5 tranches d'âge (76 155 cadres). Les questions typiques sont : y a-t-il des secteurs "jeunes" ? Des secteurs "vieux" ? Où les départs à la retraite seront-ils massifs ?
- Profils-lignes : la distribution d'âge au sein de chaque secteur. On compare chaque secteur au profil moyen global.
- Interprétation : les secteurs proches sur la carte ont des structures d'âge similaires. Les secteurs éloignés du centre ont une structure très différente de la moyenne.
- Lien Chi-Deux : l'inertie totale du nuage est égale à χ²/n. Plus l'inertie est élevée, plus les deux variables sont liées.
afc <- dudi.coa(data, scan = FALSE, nf = 3)
scatter(afc, method = 1, posieig = "none")
ACM : Données "Ours" (38 individus, 10 variables)
Réponses de 38 individus sur 10 questions qualitatives concernant l'ours brun dans les Alpes. C'est le cas-type pour apprendre l'ACM.
- TDC : 10 questions, 35 modalités au total. Chaque ligne contient exactement 10 "1".
- Inertie faible : le plan principal ne conserve que ~31% de l'inertie. C'est normal en ACM.
- Cos² cumulés : avec
inertia.dudi, on obtient les cos² cumulés sur le plan. Les modalités mal représentées (cos² faible) ne doivent pas être interprétées. - Tailles des points : sur le graphique, la taille des labels doit être proportionnelle aux cos² pour ne pas sur-interpréter des modalités mal projetées.
ACM : Données bancaires (810 individus, 21 variables)
21 variables qualitatives sur 810 clients bancaires. Beaucoup de variables = beaucoup de modalités = graphiques denses.
- Sélection de variables : quand il y a trop de modalités, on restreint l'analyse aux variables les plus pertinentes. Ex: CSP, opposition, âge, sexe, interdit bancaire, solde...
- Sélection d'individus : on peut restreindre à une sous-population (ex: 35-55 ans) pour une analyse ciblée avant de faire la CAH.
- Dimension du nuage : p - s = 35 - 10 = 25 axes non triviaux pour "Ours". Pour la banque, c'est encore plus élevé.
summary(acm) et screeplot(acm) pour voir l'allure de l'éboulis. Si les premières valeurs propres sont très proches de 1/s, elles n'apportent aucune information.
Lecture des plans factoriels
Carte AFC simultanée
En AFC, lignes et colonnes sont sur le même graphique. Chaque point se lit par rapport au centre et aux autres points.
Proche = profil moyen. Éloigné = atypique.
Proches = attraction (effectif > attendu).
Proches = profils similaires.
De part et d'autre = profils inversés.
Plan factoriel ACM
En ACM, on peut lire trois cartes : individus, modalités, et les deux superposées. Chaque carte a ses propres règles.
Proches = coexistent fréquemment chez les mêmes individus.
Proches = ont répondu de manière identique.
Point petit ou gris = mal représenté, ne pas interpréter.
De part et d'autre = comportements opposés.
Piège fréquent : Ne dites jamais "La modalité A est sur l'axe 1". Dites : "La modalité A est bien représentée sur le plan 1-2 (cos² = 0.85) et contribue fortement à l'axe 1 (CTR = 18%). Elle s'oppose à la modalité B sur cet axe."
# AFC (2 var quali) tYC <- as.table(as.matrix(df))
afc <- dudi.coa(df, scan = FALSE)
# ACM (>2 var quali) acm <- dudi.acm(data, scan = FALSE, nf = 3)
# Sorties acm$eig
i <- inertia.dudi(acm, col.inertia = TRUE, row.inertia = FALSE)
i$col.cum # cos² cumulés modalités
# Plans factoriels scatter(afc, method = 1, posieig = "none")
plot(acm$c1$CS1, acm$c1$CS2, type = "n"); text(acm$c1$CS1, acm$c1$CS2, row.names(acm$c1))
Chapitre 4 : La Classification
Regrouper automatiquement les individus qui se ressemblent.
Supervisé vs Non Supervisé
Supervisé
On connaît les groupes. On veut prédire de nouveaux individus.
Non Supervisé
On ne sait rien à l'avance. L'algorithme découvre les groupes.
Ce cours se concentre sur le non supervisé : K-Means et CAH. Souvent utilisé après une ACP ou ACM.
K-Means (Centres Mobiles)
On fixe le nombre de classes $k$. L'algorithme itère : affectation au centre le plus proche, recalcul des centres, jusqu'à convergence.
Points faibles : Il faut choisir $k$ à l'avance. Initialisation aléatoire (résultats différents). Sensible aux outliers. Formes sphériques uniquement.
Quand l'utiliser ? Rapide et efficace quand on a une idée du nombre de classes et que les groupes sont compacts.
Classification Ascendante Hiérarchique
Part de $n$ classes et fusionne progressivement les plus proches jusqu'à n'en former qu'une. Le résultat = le dendrogramme.
Single
Distance min. Chaînes allongées.
Complete
Distance max. Classes compactes.
Average
Moyenne. Compromis.
Ward (Reco)
Minimise la perte d'inertie inter-classe. Classes homogènes.
Lire le dendrogramme
L'axe vertical = perte d'inertie inter-classe lors de la fusion.
- Barre verticale longue = l'algorithme a dû "forcer".
- C'est le "saut d'inertie".
- On coupe là où se trouve la branche la plus longue.
Ici, le plus grand saut est avant la fusion en 1 classe. On retient 2 classes.
Fiche de lecture rapide — Dendrogramme
Ce que je vois
- Deux branches fusionnent très haut → elles sont très différentes.
- Deux branches fusionnent très bas → elles se ressemblent beaucoup.
- Une branche verticale très longue = saut d'inertie = bon candidat pour la coupure.
- Un individu isolé qui fusionne tard = outlier.
Ce que je dis
- "Le saut d'inertie avant la fusion des deux derniers groupes est le plus important, ce qui justifie une coupure en 2 classes."
- "La hauteur de fusion des classes 1 et 2 est faible, ce qui indique une forte homogénéité interne."
- "L'individu X fusionne très tard, c'est un cas atypique."
Faire parler les classes
Parangon
Individu le plus proche du centre de sa classe. L'exemple type.
Variables caractéristiques
Variables qui prennent des valeurs significativement différentes.
"La classe 1 regroupe 12 États du Sud. Elle se caractérise par un taux d'analphabétisme élevé (2.5% vs 1.2%) et une faible proportion de diplômés (42% vs 54%). Le parangon est la Louisiane (LA). C'est la classe des 'États défavorisés sur le plan éducatif'."
Fiche de lecture rapide — Interpréter une classe
Taille et composition
Commencez par indiquer combien d'individus contient la classe et s'il y a une dominante géographique, temporelle, ou catégorielle évidente.
Variables caractéristiques
Pour chaque variable, comparez la moyenne (ou fréquence) de la classe à celle de la population totale. Soulignez les écarts significatifs avec des chiffres.
Parangon et outliers
Nommez le parangon : c'est l'individu le plus représentatif. Mentionnez aussi les individus atypiques au sein de la classe.
Nommer la classe
Donnez un nom explicite en français, pas en jargon statistique. Ex: "États défavorisés sur le plan éducatif" plutôt que "Classe 1".
Enchaînement ACM → CAH
Quand on a des variables qualitatives, on fait d'abord une ACM pour obtenir des coordonnées quantitatives, puis une CAH sur ces coordonnées. C'est la méthodologie standard en Data Mining.
1. ACM
On part de n individus et s variables qualitatives. Le TDC a p modalités et (p - s) dimensions non triviales.
2. Sélection de q axes
On conserve assez de composantes principales pour atteindre ~90% d'inertie. Cela réduit le bruit et la dimension.
3. CAH
On applique la CAH sur les coordonnées des individus dans l'espace des q axes retenus. Distance euclidienne + Ward recommandés.
4. Interprétation
On caractérise chaque classe par les modalités sur-représentées. On peut utiliser les parangons et les variables caractéristiques.
Exemple : ACM "Ours" → CAH
38 individus, 10 questions, 35 modalités. p - s = 25 axes. Le plan principal ne conserve que 31% d'inertie, ce n'est pas assez pour une classification fiable sur 2 axes seulement.
- On conserve q axes pour atteindre ~90% d'inertie cumulée.
- La CAH sur ces q axes regroupe les individus ayant des profils de réponse similaires.
- On analyse la proximité des modalités de la variable à expliquer (ex: citat) avec les autres facteurs pour comprendre la structuration.
acm <- dudi.acm(data, scan = FALSE, nf = 25)
# Sélection des axes pour 90% d'inertie
inertie <- inertia.dudi(acm, col.inertia = FALSE, row.inertia = TRUE)
cum <- cumsum(acm$eig) / sum(acm$eig)
q <- which(cum >= 0.90)[1]
# CAH sur les q premières composantes
ca <- agnes(acm$li[, 1:q], metric = "euclidean", method = "ward")
plot(ca, which = 2)
Pourquoi ne pas faire K-Means directement sur le TDC ? Le TDC est extrêmement creux (beaucoup de 0). La distance euclidienne n'est pas adaptée. L'ACM résout ce problème en projetant sur un espace de plus faible dimension où les distances sont pertinentes.
# K-Means cl <- kmeans(data, centers = 3, nstart = 100)
cl$cluster # Classes
cl$centers # Centres
# CAH (agnes) ca1 <- agnes(data, metric = "euclidean", stand = TRUE, method = "ward")
hc <- as.hclust(ca1)
ctr <- cutree(hc, k = 3)
# Visualisation plot(ca1, which = 2) # Dendrogramme
table(ctr, cl$cluster) # Concordance
# Enchaînement ACM→CAH acm <- dudi.acm(data, scan = FALSE, nf = 5)
ca2 <- agnes(acm$co, metric = "euclidean", method = "ward")
plot(ca2, which = 2)
Console R Interactive
Testez votre code R directement dans le navigateur grâce à WebR.
WebR — R dans votre navigateur
Premier chargement : ~30-60s. Les packages ade4 et cluster s'installent à la volée (syntaxe du cours).
Astuce 1
Utilisez head(), summary() et str() après chaque import de données.
Limitation
Graphiques R supportés (plot, barplot, mosaicplot...). Les fichiers du cours (StateFacts, Jussac, Menages...) sont préchargés.
Performance
WebR est plus lent que RStudio. Les packages ade4 et cluster s'installent automatiquement au premier lancement.
Examen & Pipeline R
Votre trame algorithmique complète pour le jour J.
Le script "Copier-Coller"
summary(data); str(data)
# Étape 2 : ACP library(ade4)
acp <- dudi.pca(data, scale = TRUE, scannf = FALSE, nf = 5)
barplot(acp$eig) # Kaiser
Imen <- inertia.dudi(acp, col.inertia = TRUE, row.inertia = TRUE)
# Étape 3 : Graphes & Métriques s.corcircle(acp$co, clabel = 0.8) # Cercle
plot(acp$li$Axis1, acp$li$Axis2, type = "n"); text(acp$li$Axis1, acp$li$Axis2, row.names(data)) # Individus
Imen$col.rel; Imen$col.abs
# Étape 4 : Classification library(cluster)
ca1 <- agnes(acp$li, metric = "euclidean", method = "ward")
hc <- as.hclust(ca1)
ctr <- cutree(hc, k = 3)
plot(ca1, which = 2) # Dendrogramme
# Étape 5 : Interprétation res.classif$desc.var # Caractéristiques
res.classif$desc.ind # Parangons
Notation
La machine fait le calcul. Vous faites l'analyse. Regardez les proximités, vérifiez le Cos², et concluez concrètement avec les noms des variables.
Checklist
- Valeurs manquantes vérifiées ?
- Nombre d'axes justifié (Kaiser) ?
- % d'inertie cumulé cité ?
- Cos² vérifiés avant interprétation ?
- Axes nommés avec du vocabulaire métier ?
- Nombre de classes justifié (saut d'inertie) ?
Erreurs à éviter
- "La variable est sur l'axe 1" → Non, c'est sa projection.
- Interpréter un point avec Cos² < 0.5 → Illusion.
- Oublier
scale.unit=TRUEavec unités différentes. - Mettre des qualitatives dans l'ACP active.
- Confondre corrélation et causalité.