Structurer et synthétiser l’information

ACP, AFC, ACM, CAH une brève introduction

Grégoire Le Campion - Ecole Doctorale Université de Bordeaux

25 juin 2026

Avant de commencer

  • Vérifions que R et RStudio sont installés
  • Et que les packages sont bien là :
    • FactoMineR (les méthodes)
    • factoextra (les graphiques)
    • dplyr (manipulation, usage minimal)
    • explor (visualisation intéractive)
# Si besoin, installer maintenant :
#install.packages(c("FactoMineR", "factoextra", "dplyr", "explor"))

Tour de table express

3 questions, pas plus de 30 secondes par personne !

  1. Votre discipline ?
  2. Avez-vous déjà manipulé des données quantitatives dans votre thèse ?
  3. Une analyse factorielle vous a-t-elle déjà été montrée (sans forcément la comprendre) ?

Au programme

3 méthodes principales, 1 prolongements et peut être un bonus… et une demi-journée ensemble…

  • Comprendre ce que fait l’analyse factorielle (sans formules)
  • Pratiquer sur trois jeux de données différents
  • Lire les graphiques sans se tromper
  • Choisir la bonne méthode selon ses données

Objectif : à la fin vous savez lire un plan factoriel publié dans un article.

Pourquoi l’analyse factorielle ?

Le problème de départ

Vous avez un tableau de données. Beaucoup de lignes, beaucoup de colonnes.

  • Une enquête : 500 individus, 30 questions
  • Des données régionales : 96 départements, 15 indicateurs
  • Des textes : 200 documents, 1000 mots-fréquence

Question : comment résumer ça visuellement ? Comment voir s’il y a des groupes, des oppositions, des régularités ?

L’idée centrale

Imaginez votre tableau comme un nuage dans le ciel.

  • Chaque ligne = un point
  • Chaque colonne = une dimension de l’espace
  • 30 colonnes = un nuage en 30 dimensions

Personne ne sait visualiser 30 dimensions.

L’analyse factorielle cherche le meilleur point de vue pour photographier ce nuage d’une forme très complexe en 2 dimensions.

L’ombre des données…

Un objet 3D projette nécessairement une ombre 2D.

  • Selon l’angle, l’ombre est plus ou moins informative
  • L’ombre d’une assiette vue de face : un trait. Vue de dessus : un cercle.

L’analyse factorielle cherche l’angle qui donne l’ombre la plus informative possible.

L’école française ou l’analyse géométrique des données (AGD)

Dans les années 1960-70, Jean-Paul Benzécri développe en France une approche spécifique des données : l’analyse géométrique des données (AGD).

Trois principes :

  • Le visuel plutôt que le test
  • Le qualitatif au cœur (et non en marge)
  • La description avant la modélisation

« Le modèle doit suivre les données, et non l’inverse. » — Benzécri

La carte des trois méthodes centrales de l’AGD

Tout dépend du type de données :

Si vos données sont… Alors…
Que des nombres (variables continues) ACP — Analyse en composantes principales
Un tableau croisé (2 variables qualitatives) AFC — Analyse factorielle des correspondances
Plusieurs variables qualitatives ACM — Analyse des correspondances multiples

Bonus en fin de journée : l’AFM quand vous avez des groupes de variables hétérogènes.

ACP - Analyse en composantes principales

Une question de recherche

Comment caractériser globalement les états américains selon leurs taux de criminalité ?

On dispose de quatre indicateurs par état (1973) :

  • Taux d’arrestations pour meurtre
  • Taux d’arrestations pour agression
  • Taux d’arrestations pour viol
  • % de population urbaine

Existe-t-il des profils d’états ? Des oppositions ? Quels indicateurs vont ensemble ?

Explorer les données

data("USArrests")
head(USArrests)
           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7
summary(USArrests)
     Murder          Assault         UrbanPop          Rape      
 Min.   : 0.800   Min.   : 45.0   Min.   :32.00   Min.   : 7.30  
 1st Qu.: 4.075   1st Qu.:109.0   1st Qu.:54.50   1st Qu.:15.07  
 Median : 7.250   Median :159.0   Median :66.00   Median :20.10  
 Mean   : 7.788   Mean   :170.8   Mean   :65.54   Mean   :21.23  
 3rd Qu.:11.250   3rd Qu.:249.0   3rd Qu.:77.75   3rd Qu.:26.18  
 Max.   :17.400   Max.   :337.0   Max.   :91.00   Max.   :46.00  

Pourquoi standardiser ?

Problème : vos variables sont dans des unités différentes.

Comparer un taux pour 100 000 habitants à un pourcentage, c’est comme comparer des pommes en kilos à des distances en kilomètres.

Solution : mettre toutes les variables sur la même échelle.

  • On centre (moyenne = 0)
  • On réduit (écart-type = 1)

En R, c’est l’option scale.unit = TRUE de la fonction PCA().

Astuce

Règle simple : standardisez toujours votre ACP, sauf si vos variables sont déjà dans la même unité (par exemple : toutes en pourcentages).

Lancer l’ACP

res_acp <- PCA(USArrests, scale.unit = TRUE, graph = FALSE)

Ce que R fait pour nous :

  • Standardiser les variables
  • Trouver les axes qui résument le mieux le nuage
  • Calculer la position de chaque état et de chaque variable sur ces axes

Combien d’axes garder ?

fviz_eig(res_acp, addlabels = TRUE, ylim = c(0, 70),
         main = "Part d'information portée par chaque axe")

La carte des variables

fviz_pca_var(res_acp,
             col.var = "cos2",
             gradient.cols = c("grey70", "blue", "red"),
             repel = TRUE,
             title = "Cercle des corrélations")

La carte des individus (les états)

fviz_pca_ind(res_acp,
             col.ind = "cos2",
             gradient.cols = c("grey70", "blue", "red"),
             repel = TRUE,
             title = "Position des états américains")

Tout sur la même carte : le biplot

fviz_pca_biplot(res_acp,
                repel = TRUE,
                col.var = "red",
                col.ind = "grey40",
                title = "Carte combinée individus + variables")

Avertissement

Lecture du biplot en ACP On peut interpréter la position d’un individu par rapport aux flèches des variables : un état proche d’une flèche est associé à des valeurs élevées de cette variable. Cette lecture n’est valable QU’EN ACP — pas en AFC ou ACM (on y reviendra).

Deux concepts pour ne pas se tromper

cos² — Qualité de représentation

À quel point un point est-il “bien vu” sur cet axe ?

  • Élevé (proche de 1) = la position lue sur l’axe est fiable
  • Faible (proche de 0) = la position lue est trompeuse, ne pas interpréter

ctr — Contribution

À quel point un point “tire” l’axe vers lui ?

  • Élevée = ce point a fortement construit l’axe
  • Sert à interpréter ce que représente l’axe

Important

Règle d’or : un point mal représenté (cos² faible) ne doit jamais être interprété, peu importe sa position sur la carte.

Lecture des contributions et qualités

# Coordonnées, cos² et contributions des individus
head(res_acp$ind$coord, 3)   # coordonnées
            Dim.1      Dim.2       Dim.3      Dim.4
Alabama 0.9855659 -1.1333924  0.44426879  0.1562671
Alaska  1.9501378 -1.0732133 -2.04000333 -0.4385834
Arizona 1.7631635  0.7459568 -0.05478082 -0.8346529
head(res_acp$ind$cos2, 3)    # qualité de représentation
            Dim.1     Dim.2        Dim.3       Dim.4
Alabama 0.3920310 0.5184533 0.0796600695 0.009855631
Alaska  0.4085425 0.1237310 0.4470626440 0.020663843
Arizona 0.7122238 0.1274849 0.0006875249 0.159603771
head(res_acp$ind$contrib, 3) # contribution
            Dim.1    Dim.2       Dim.3     Dim.4
Alabama 0.7832625 2.595723  1.10709555 0.2816054
Alaska  3.0666668 2.327394 23.34292392 2.2182476
Arizona 2.5068088 1.124411  0.01683258 8.0337329

TP : votre tour

# Étape 1 : explorer les données
data("USArrests")
View(USArrests)
summary(USArrests)

# Étape 2 : lancer l'ACP
res_acp <- PCA(USArrests, scale.unit = TRUE, graph = FALSE)

# Étape 3 : visualisations
fviz_eig(res_acp, addlabels = TRUE)
fviz_pca_var(res_acp, col.var = "cos2", repel = TRUE)
fviz_pca_ind(res_acp, col.ind = "cos2", repel = TRUE)
fviz_pca_biplot(res_acp, repel = TRUE)

Vos questions à explorer :

  1. Quelle est la part d’inertie cumulée des deux premiers axes ?
  2. Quelles variables construisent l’axe 1 ?
  3. Quel état est le mieux représenté sur le premier plan ?

Les pièges de ACP

Avertissement

Variables très corrélées Si deux variables mesurent presque la même chose, elles vont peser double dans la construction des axes. À identifier et éventuellement retirer une des deux.

Avertissement

Outliers (points aberrants) Un point très loin des autres peut tirer un axe à lui tout seul. Toujours inspecter avant interprétation.

Avertissement

Sur-interprétation des axes lointains L’axe 5 portant 3 % d’inertie est généralement du bruit. Restez sur les axes 1-2, parfois 3.

Pause café ?

Reprise dans 15 minutes.

Au retour : l’AFC, pour les tableaux croisés !!!

AFC — Analyse factorielle des correspondances

La question de recherche

Comment se répartit la charge des tâches ménagères dans le couple ?

Données : 13 tâches × 4 modalités (qui les fait)

  • Femme
  • Homme
  • Les deux ensemble
  • Alternativement

Quelles tâches sont typiquement féminines ? Lesquelles sont partagées ? Y a-t-il des tâches alternées ?

Le tableau de contingence

data("housetasks")
housetasks
           Wife Alternating Husband Jointly
Laundry     156          14       2       4
Main_meal   124          20       5       4
Dinner       77          11       7      13
Breakfeast   82          36      15       7
Tidying      53          11       1      57
Dishes       32          24       4      53
Shopping     33          23       9      55
Official     12          46      23      15
Driving      10          51      75       3
Finances     13          13      21      66
Insurance     8           1      53      77
Repairs       0           3     160       2
Holidays      0           1       6     153

L’AFC, c’est le χ² qui se voit

Vous connaissez le test du χ² : il dit si deux variables qualitatives sont indépendantes ou pas.

Mais il ne dit pas COMMENT elles sont liées.

L’AFC prend la même information et la transforme en graphique visuelle.

  • Les lignes deviennent des points
  • Les colonnes deviennent des points
  • Les proximités racontent les associations

Lancer l’AFC

res_afc <- CA(housetasks, graph = FALSE)
fviz_eig(res_afc, addlabels = TRUE,
         main = "Part d'information portée par chaque axe")

Le graphique de l’ AFC

fviz_ca_biplot(res_afc, repel = TRUE,
               title = "Tâches ménagères × profils de partage")

Le piège central de la lecture

Lecture des proximités en AFC

Entre points de même type (ligne-ligne ou colonne-colonne) : la proximité indique des profils similaires.

Entre points de types différents (ligne-colonne) : la proximité n’a pas la même signification. Elle indique des associations au sens d’attractions/répulsions par rapport à l’indépendance, mais pas une distance directe.

Règle pratique : quand vous voyez un point-tâche proche d’un point-modalité (par ex. Laundry proche de Wife), interprétez-le comme « cette tâche est particulièrement associée à cette modalité », pas comme une distance euclidienne.

Vérifier la qualité de représentation

fviz_ca_row(res_afc, col.row = "cos2",
            gradient.cols = c("grey70", "blue", "red"),
            repel = TRUE, title = "Tâches : qualité de représentation")

fviz_ca_col(res_afc, col.col = "cos2",
            gradient.cols = c("grey70", "blue", "red"),
            repel = TRUE, title = "Modalités : qualité de représentation")

TP AFC : votre tour

data("housetasks")
housetasks

res_afc <- CA(housetasks, graph = FALSE)

fviz_eig(res_afc, addlabels = TRUE)
fviz_ca_biplot(res_afc, repel = TRUE)
fviz_ca_row(res_afc, col.row = "cos2", repel = TRUE)
fviz_ca_col(res_afc, col.col = "cos2", repel = TRUE)

À explorer :

  1. Quelles tâches sont opposées sur l’axe 1 ?
  2. Quelle modalité est la mieux représentée sur le premier plan ?
  3. Une tâche vous semble-t-elle mal placée intuitivement ? Vérifiez son cos².

Pièges classiques en AFC

Avertissement

Confondre proximité et association Un point-ligne près d’un point-colonne ≠ “ces deux entités sont identiques”. Cela signifie qu’elles sont plus associées qu’attendu sous indépendance.

Avertissement

Tableaux trop vide Si beaucoup de cases sont à 0 ou très faibles, l’AFC sera dominée par ces “creux” artificiels. Regrouper des modalités si possible.

Avertissement

Effectifs très inégaux Une ligne avec 10 000 individus et une autre avec 50 ne pèsent pas pareil. C’est normal, mais à garder en tête lors de l’interprétation !

ACM — Analyse des correspondances multiples

La question de recherche

Comment caractériser les profils de consommation de thé ?

Une enquête : 300 personnes répondent à 18 questions sur leurs habitudes :

  • Type de thé (noir, vert, parfumé)
  • Comment (en sachet, en vrac, les deux)
  • Avec quoi (citron, lait, sucre…)
  • Où (à la maison, au bureau, au restaurant…)
  • Quand (matin, après-midi, soir, après le déjeuner…)

Y a-t-il des profils types de consommateurs ? Le profil dépend-il de l’âge, du sexe, du statut ?

L’ACM, en une phrase

L’ACM, c’est l’AFC quand on a plusieurs variables qualitatives à la fois.

Toutes vos variables qualitatives sont mises ensemble. L’ACM construit une représentation qui montre :

  • Les profils types d’individus
  • Les modalités qui vont ensemble
  • Les oppositions structurantes

C’est la méthode reine pour les enquêtes par questionnaire.

Découverte des données tea

data("tea")
dim(tea)
[1] 300  36
str(tea[, 1:6])
'data.frame':   300 obs. of  6 variables:
 $ breakfast: Factor w/ 2 levels "breakfast","Not.breakfast": 1 1 2 2 1 2 1 2 1 1 ...
 $ tea.time : Factor w/ 2 levels "Not.tea time",..: 1 1 2 1 1 1 2 2 2 1 ...
 $ evening  : Factor w/ 2 levels "evening","Not.evening": 2 2 1 2 1 2 2 1 2 1 ...
 $ lunch    : Factor w/ 2 levels "lunch","Not.lunch": 2 2 2 2 2 2 2 2 2 2 ...
 $ dinner   : Factor w/ 2 levels "dinner","Not.dinner": 2 2 1 1 2 1 2 2 2 2 ...
 $ always   : Factor w/ 2 levels "always","Not.always": 2 2 2 2 1 2 2 2 2 2 ...

Variables actives vs supplémentaires

Variables actives : celles qui construisent les axes.

Variables supplémentaires : celles qui sont projetées sur la carte construite, pour interpréter, sans participer à sa construction.

Pourquoi cette distinction ?

  • Garder cohérent ce qui construit les axes (par ex. les variables sur le thé)
  • Comprendre qui est dans tel ou tel profil (par ex. l’âge, le sexe, la CSP)

Astuce

Pratique courante en SHS : variables d’opinion ou pratique en actives, variables socio-démographiques en supplémentaires. C’est ce qu’a fait Bourdieu dans La Distinction.

Lancer l’ACM

# Variables 1 à 18 = variables actives sur le thé
# Variable 19 = age (quantitative supplémentaire)
# Variables 20 à 36 = variables qualitatives supplémentaires
res_acm <- MCA(tea,
               quanti.sup = 19,
               quali.sup = 20:36,
               graph = FALSE)
fviz_eig(res_acm, addlabels = TRUE, ylim = c(0, 15),
         main = "Part d'information par axe")

Important

Pourquoi l’inertie est-elle si faible ? En ACM, il est normal d’avoir 8-12 % d’inertie sur l’axe 1. C’est mathématique (lié au tableau disjonctif). Ne tirez pas de conclusion négative sur la qualité de l’analyse à partir de ce chiffre seul.

Graphique des modalités

fviz_mca_var(res_acm,
             col.var = "cos2",
             gradient.cols = c("grey70", "blue", "red"),
             repel = TRUE,
             ggtheme = theme_minimal(),
             title = "Modalités sur le premier plan")

Graphique des individus

fviz_mca_ind(res_acm,
             label = "none",
             habillage = "Tea",
             addEllipses = TRUE,
             ggtheme = theme_minimal(),
             title = "Individus colorés selon le type de thé")

Tout ensemble : modalités + individus

fviz_mca_biplot(res_acm,
                label = "var",
                col.var = "red",
                col.ind = "grey60",
                repel = TRUE,
                ggtheme = theme_minimal(),
                title = "Modalités (rouge) et individus (gris)")

Avertissement

Comme en AFC : la lecture modalité ↔︎ individu signifie association, pas distance directe. Pour interpréter, regarder où sont les individus, et près de quelles modalités.

Décrire automatiquement les axes

# Quelles modalités caractérisent l'axe 1 ?
dimdesc(res_acm, axes = 1)$`Dim 1`$category[1:8, ]
                            Estimate      p.value
where=chain store+tea shop 0.3385378 1.344557e-35
tearoom=tearoom            0.2973107 6.082138e-32
how=tea bag+unpackaged     0.2345703 1.361423e-21
friends=friends            0.1995083 8.616289e-20
resto=resto                0.2080260 2.319804e-18
tea.time=tea time          0.1701136 1.652462e-15
pub=pub                    0.1813713 5.846592e-12
price=p_variable           0.2759507 5.956230e-12

TP ACM : votre tour

data("tea")

res_acm <- MCA(tea,
               quanti.sup = 19,
               quali.sup = 20:36,
               graph = FALSE)

fviz_eig(res_acm, addlabels = TRUE, ylim = c(0, 15))
fviz_mca_var(res_acm, col.var = "cos2", repel = TRUE)
fviz_mca_ind(res_acm, label = "none",
             habillage = "Tea", addEllipses = TRUE)

# Description automatique des axes
dimdesc(res_acm, axes = 1:2)

À explorer :

  1. Quelles modalités structurent l’axe 1 ?
  2. La variable supplémentaire age est-elle liée aux axes ?
  3. Y a-t-il un profil identifiable dans un coin de la carte ?

Pièges classiques en ACM

Avertissement

Modalités rares Une modalité avec très peu d’individus (< 5 % de l’échantillon) peut être tirée loin du nuage et le déformer. Regrouper ou exclure.

Avertissement

Inertie « faible » mal interprétée Voir slide précédente : 9 % sur l’axe 1, c’est normal en ACM. Pas un défaut.

Avertissement

Confusion actives / supplémentaires Mettre toutes les variables en actives revient à laisser le socio-démographique construire les axes. Ce n’est pas toujours ce qu’on veut. Réfléchir à la question de recherche d’abord.

Quand chaque méthode est-elle applicable ?

Conditions d’usage : un récapitulatif

Important

Ce sont des méthodes descriptives. Pas de test, donc aucune hypothèse (normalité, etc.) à vérifier. Les « conditions » portent sur la nature des données et la pertinence de l’analyse.

Méthode Données requises Pertinente si… Vigilance
ACP Variables quantitatives Les variables sont corrélées entre elles Outliers ; standardiser si unités différentes
AFC Un tableau croisé (2 variables qualitatives, comptages) Les deux variables sont associées (≈ χ² significatif) Cases rares / tableau trop creux biaisent l’analyse
ACM Plusieurs variables qualitatives Les variables partagent de la structure Modalités rares (< 5 %) ; chaque individu = 1 modalité par variable

CAH - Regrouper après avoir projeté

Projeter, puis classer

Jusqu’ici, on a aplati un nuage pour en voir la forme (ACP, AFC, ACM).

Mais une carte ne dit pas où sont les groupes. L’œil en devine — la CAH les découpe pour de bon.

CAH = Classification Ascendante Hiérarchique. Elle range les individus en classes homogènes.

  • L’analyse factorielle montre la structure
  • La CAH la découpe en groupes nommables

L’idée : un arbre de regroupements

On part de la situation extrême : chaque individu est seul dans sa classe.

À chaque étape, on marie les deux groupes les plus ressemblants. Puis on recommence, jusqu’à ce qu’il ne reste qu’un seul grand groupe.

Ces fusions successives se dessine en arbre : le dendrogramme.

Astuce

Métaphore : un arbre généalogique à l’envers. En bas, les individus isolés ; en remontant, les familles fusionnent ; tout en haut, une seule lignée.

Sur quoi regroupe-t-on, exactement ?

La fonction HCPC ne regroupe pas sur les données brutes, mais sur les coordonnées factorielles calculées juste avant.

Pourquoi ? L’analyse factorielle a déjà nettoyé le bruit : on classe sur le signal, pas sur les détails parasites.

Le critère de fusion (dit de Ward) choisit, à chaque étape, le mariage qui garde les classes les plus homogènes possible.

L’arbre des états (CAH après l’ACP)

# On repart de l'ACP des états, déjà calculée plus haut (res_acp).
# HCPC classe les individus sur leurs coordonnées factorielles.
# nb.clust = 3 : on demande 3 classes (mettre -1 pour laisser R proposer).
res_cah <- HCPC(res_acp, nb.clust = 3, graph = FALSE)

# Le dendrogramme : l'arbre des regroupements successifs
fviz_dend(res_cah,
          cex = 0.6,                 # taille des étiquettes (noms d'états)
          palette = "jco",
          rect = TRUE, rect_fill = TRUE, rect_border = "jco",
          main = "Arbre de regroupement des états")

Où couper l’arbre ?

Important

La hauteur d’une fusion = son coût. On coupe l’arbre juste sous le plus grand saut : l’endroit où regrouper davantage coûterait soudain beaucoup. C’est là que les classes sont les plus nettes.

R propose une coupure automatiquement (nb.clust = -1). Mais le dernier mot est au chercheur : 3 classes interprétables valent mieux que 7 illisibles.

Les groupes sur la carte

# Les mêmes classes, projetées sur le plan factoriel de l'ACP
fviz_cluster(res_cah,
             repel = TRUE,
             show.clust.cent = TRUE,    # marque le centre de chaque classe
             palette = "jco",
             ggtheme = theme_minimal(),
             main = "Les groupes d'états sur le plan factoriel")

Qui est dans chaque groupe ?

# Quelles variables caractérisent chaque classe ?
# (variables dont la moyenne dans la classe diffère le plus de la moyenne générale)
res_cah$desc.var$quanti
$`1`
            v.test Mean in category Overall mean sd in category Overall sd
UrbanPop -3.898420         52.07692       65.540       9.691087  14.329285
Murder   -4.030171          3.60000        7.788       2.269870   4.311735
Rape     -4.052061         12.17692       21.232       3.130779   9.272248
Assault  -4.638172         78.53846      170.760      24.700095  82.500075
              p.value  n
UrbanPop 9.682222e-05 13
Murder   5.573624e-05 13
Rape     5.076842e-05 13
Assault  3.515038e-06 13

$`2`
            v.test Mean in category Overall mean sd in category Overall sd
UrbanPop  2.430027        72.470588       65.540      10.100190  14.329285
Murder   -2.268507         5.841176        7.788       1.715006   4.311735
            p.value  n
UrbanPop 0.01509769 17
Murder   0.02329833 17

$`3`
          v.test Mean in category Overall mean sd in category Overall sd
Assault 5.853335          255.250      170.760      42.999855  82.500075
Murder  5.801989           12.165        7.788       2.616921   4.311735
Rape    4.889955           29.165       21.232       8.174122   9.272248
             p.value  n
Assault 4.818124e-09 20
Murder  6.553272e-09 20
Rape    1.008591e-06 20

La CAH ne fait pas que dessiner des groupes : elle dit ce qui les caractérise. C’est ce qui transforme un simple graphique en nuage de point en typologie interprétable.

Et sur une enquête ? (CAH après l’ACM)

# Même logique, appliquée à l'ACM du thé (res_acm, déjà calculée).
# 300 individus : on ne met pas d'étiquettes.
res_cah_the <- HCPC(res_acm, nb.clust = 3, graph = FALSE)

fviz_cluster(res_cah_the,
             geom = "point",
             palette = "jco",
             ggtheme = theme_minimal(),
             main = "Profils types de buveurs de thé")

On obtient des profils types de consommateurs.

Pièges classiques en CAH

Avertissement

Croire qu’il existe LE bon nombre de classes Il n’existe pas. R en suggère un ; vous tranchez selon l’interprétabilité.

Avertissement

Oublier que la CAH dépend de la factorielle d’avant Si l’analyse factorielle est mal cadrée (mauvaises variables actives), les classes le seront aussi. La CAH ne rattrape pas une factorielle bancale.

Avertissement

Nommer les classes trop vite Une classe se nomme à partir de desc.var, pas à l’œil sur la carte. Vérifiez ce qui la caractérise avant de lui coller une étiquette.

TP CAH : votre tour

# Après N'IMPORTE QUELLE analyse factorielle (ACP, AFC ou ACM) :
res_cah <- HCPC(res_acp, nb.clust = -1, graph = FALSE)  # -1 : R propose la coupure

fviz_dend(res_cah, rect = TRUE)        # l'arbre des regroupements
fviz_cluster(res_cah, repel = TRUE)    # les groupes sur la carte

res_cah$desc.var                       # ce qui caractérise chaque classe
res_cah$desc.ind$para                  # les individus les plus typiques (parangons)

À explorer :

  1. Combien de classes R propose-t-il avec nb.clust = -1 ?
  2. Quelles variables caractérisent la première classe ?
  3. Un état (ou individu) vous surprend-il dans sa classe ?

BONUS AFM

L’AFM en deux mots

AFM = Analyse Factorielle Multiple.

Quand vous avez plusieurs groupes de variables hétérogènes que vous voulez analyser ensemble.

Exemple typique : un questionnaire avec

  • Bloc 1 : variables socio-démographiques (qualitatives)
  • Bloc 2 : pratiques culturelles (qualitatives)
  • Bloc 3 : opinions politiques (notes sur 10, quantitatives)

L’AFM analyse les trois blocs ensemble en évitant qu’un seul bloc domine parce qu’il aurait plus de variables.

Quand utiliser quoi ? L’arbre de décision

flowchart TB
    A[Mes données] --> B{Quelles variables ?}
    B -->|Toutes quantitatives| C[ACP]
    B -->|2 variables qualitatives <br/> tableau croisé| D[AFC]
    B -->|Plusieurs qualitatives| E[ACM]
    B -->|Groupes hétérogènes <br/> qualitatif + quantitatif| F[AFM]
    C --> G[CAH pour regrouper]
    D --> G
    E --> G

flowchart TB
    A[Mes données] --> B{Quelles variables ?}
    B -->|Toutes quantitatives| C[ACP]
    B -->|2 variables qualitatives <br/> tableau croisé| D[AFC]
    B -->|Plusieurs qualitatives| E[ACM]
    B -->|Groupes hétérogènes <br/> qualitatif + quantitatif| F[AFM]
    C --> G[CAH pour regrouper]
    D --> G
    E --> G

Après n’importe quelle analyse factorielle, on peut enchaîner une CAH (HCPC) pour en tirer une typologie de groupes.

Pour aller plus loin

Côté méthode :

  • F. Husson, S. Lê, J. PagèsAnalyse de données avec R (PUR, 2009)
  • B. Le Roux, H. RouanetMultiple Correspondence Analysis (Sage, 2010)
  • J. PagèsAnalyse factorielle multiple avec R (EDP Sciences, 2014)

Côté outil :

# Pour une exploration interactive après une analyse :
library(explor)
explor(res_acm)

Glossaire

Terme Définition courte
ACP Méthode pour résumer un tableau de variables quantitatives par projection.
AFC Méthode pour cartographier un tableau croisé de deux variables qualitatives.
ACM Méthode pour cartographier plusieurs variables qualitatives ensemble.
AFM Méthode pour analyser plusieurs groupes hétérogènes de variables.
Axe / dimension Une direction privilégiée trouvée dans le nuage de points.
Inertie Quantité d’information totale du nuage. Chaque axe en porte une part.
Cos² Qualité de représentation d’un point sur un axe. Élevé = position fiable.
Contribution Poids d’un point dans la construction d’un axe.
Variable active Variable qui participe à la construction des axes.
Variable supplémentaire Variable projetée a posteriori, n’influence pas les axes.
Profil-ligne Distribution en pourcentage d’une ligne d’un tableau croisé.
Standardisation Mise à l’échelle des variables (moyenne 0, écart-type 1).
Disjonctif complet Transformation préalable à l’ACM : chaque modalité devient une colonne 0/1.
CAH Classification ascendante hiérarchique : regroupe les individus en classes par fusions successives.
Dendrogramme Arbre représentant l’ordre des regroupements de la CAH.
Critère de Ward Règle de fusion qui garde les classes les plus homogènes possible.
Parangon Individu le plus représentatif d’une classe (son « visage type »).

Merci

Questions, remarques, retours bienvenus.

Slides et code disponibles :

  • slides : https://lecampiong.github.io/reduc_dim_clust_ED_ub/

  • code : https://github.com/LeCampionG/reduc_dim_clust_ED_ub

  • le site de l’ensemble de la formation : https://gitlab.huma-num.fr/ckersuzan/vf_ed_stat_2026