Analyse factorielle de données mixtes (AFDM) dans R

Analysez une table mêlant variables numériques et catégorielles dans une même carte factorielle

Un guide pratique de l’analyse factorielle de données mixtes (AFDM) dans R : exécutez FAMD() de FactoMineR sur des données wine mixtes, lisez les valeurs propres et le graphique des éboulis, et visualisez toutes les variables, le cercle des corrélations des variables quantitatives, les catégories qualitatives et les individus avec factoextra — puis interprétez les contributions et le cos2 en langage clair.

Date de publication

24 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • L’analyse factorielle de données mixtes (AFDM) est une méthode en composantes principales pour une table qui contient à la fois des variables quantitatives et qualitatives — elle vous permet d’étudier la similarité entre individus tout en respectant les deux types de variables.
  • Voyez-la comme une méthode hybride : elle se comporte comme une ACP sur les colonnes numériques et comme une ACM sur les colonnes catégorielles. Les deux ensembles sont normalisés pour qu’aucun ne domine par accident.
  • Exécutez-la avec FAMD() de FactoMineR ; les colonnes catégorielles doivent être des facteurs, les colonnes numériques restent numériques — l’AFDM détecte chaque type automatiquement.
  • Choisissez combien de dimensions lire à partir des valeurs propres / du graphique des éboulis (fviz_eig()) ; sur les données wine, les deux premiers axes captent environ 61 % de la variance.
  • Visualisez le résultat avec factoextra : toutes les variables (fviz_famd_var()), le cercle des corrélations des variables quantitatives (choice = "quanti.var"), les catégories qualitatives (choice = "quali.var") et la carte des individus (fviz_famd_ind()) — colorés par cos2 (qualité) ou contrib (importance).
Obtenez le livre — Principal Component Methods in R (PDF)

Introduction

L’analyse factorielle de données mixtes (AFDM) est une méthode en composantes principales dédiée aux jeux de données qui contiennent à la fois des variables quantitatives et qualitatives (Pagès, 2004). Elle permet d’analyser la similarité entre individus tout en prenant en compte un ensemble mixte de types de variables, et d’explorer l’association entre toutes les variables à la fois — numériques et catégorielles ensemble.

Grossièrement, l’algorithme de l’AFDM est un mélange d’ analyse en composantes principales (ACP) et d’ analyse des correspondances multiples (ACM) : il agit comme une ACP pour les variables quantitatives et comme une ACM pour les variables qualitatives. Pour mettre les deux ensembles sur un pied d’égalité, les variables quantitatives et qualitatives sont normalisées pendant l’analyse, de sorte qu’ aucun type ne pilote les dimensions simplement parce qu’il a plus de colonnes ou une plus grande échelle.

Quand l’utiliser. Tournez-vous vers l’AFDM dès que votre table mêle des types dans la même analyse — des vins décrits par des scores de dégustation et un label de région ; des patients décrits par des valeurs de laboratoire et une catégorie de diagnostic ; des produits décrits par des mesures et une marque. Si toutes les variables sont numériques, utilisez l’ACP ; si toutes les variables sont catégorielles, utilisez l’ACM ; l’AFDM est la méthode pour le cas intermédiaire.

Cette leçon fait partie de la série Réduction de dimension dans R. Nous calculerons l’analyse avec FactoMineR et la visualiserons avec factoextra, puis lirons chaque graphique en langage clair.

NoteL’AFDM se lit comme une combinaison d’ACP et d’ACM

Beaucoup des graphiques ci-dessous sont ceux que vous connaissez déjà de l’ACP et de l’ACM : un cercle des corrélations pour les variables numériques, une carte des catégories pour les facteurs, une carte des individus pour les lignes. Si ces méthodes vous sont nouvelles, parcourez d’abord l’ACP et l’ACM — chaque règle d’interprétation (proximité = similarité, cos2 = qualité, contrib = importance) se reporte directement.

Packages R requis

Nous utilisons FactoMineR pour l’analyse et factoextra pour une visualisation élégante basée sur ggplot2.

install.packages(c("FactoMineR", "factoextra"))
library("FactoMineR")
library("factoextra")

Les données

Nous utiliserons un sous-ensemble du jeu de données wine fourni avec FactoMineR. Il décrit 21 vins de la vallée de la Loire, notés par un panel de dégustation et étiquetés par origine. Nous conservons un mélange de colonnes à dessein — deux catégorielles et six numériques :

library("FactoMineR")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
head(df[, 1:7], 4)
          Label Soil Plante Acidity Harmony Intensity Overall.quality
2EL      Saumur Env1  2.000   2.107   3.143     2.857           3.393
1CHA     Saumur Env1  2.000   2.107   2.964     2.893           3.214
1FON Bourgueuil Env1  1.750   2.179   3.143     3.074           3.536
1VAU     Chinon Env2  2.304   3.179   2.038     2.462           2.464

Le sous-ensemble compte 21 lignes (les vins, les individus) et 8 colonnes (les variables) :

  • Les deux premières colonnes sont des facteurs (variables catégorielles) : Label (Saumur, Bourgueuil ou Chinon) et Soil (Reference, Env1, Env2 ou Env4).
  • Les six colonnes restantes sont numériques (variables continues) : Plante, Acidity, Harmony, Intensity, Overall.quality et Typical.

Vérifiez les types de colonnes avant de lancer quoi que ce soit — l’AFDM décide ce qui est quantitatif et ce qui est qualitatif à partir de la classe de la colonne, donc les facteurs doivent être des facteurs :

library("FactoMineR")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
str(df)
'data.frame':   21 obs. of  8 variables:
 $ Label          : Factor w/ 3 levels "Saumur","Bourgueuil",..: 1 1 2 3 1 2 2 1 3 1 ...
 $ Soil           : Factor w/ 4 levels "Reference","Env1",..: 2 2 2 3 1 1 1 2 2 3 ...
 $ Plante         : num  2 2 1.75 2.3 1.76 ...
 $ Acidity        : num  2.11 2.11 2.18 3.18 2.57 ...
 $ Harmony        : num  3.14 2.96 3.14 2.04 3.64 ...
 $ Intensity      : num  2.86 2.89 3.07 2.46 3.64 ...
 $ Overall.quality: num  3.39 3.21 3.54 2.46 3.74 ...
 $ Typical        : num  3.25 3.04 3.18 2.25 3.44 ...

Le but de l’étude est de caractériser les vins : quelles qualités numériques et quels labels de région vont ensemble, et comment les vins se répartissent une fois les deux pris en compte.

Exécuter l’AFDM

La fonction FAMD() fait le travail. Un appel simplifié est FAMD(base, ncp = 5, sup.var = NULL, ind.sup = NULL, graph = TRUE) :

  • base — un data frame de n individus (lignes) par p variables (colonnes), certaines numériques, certaines facteurs.
  • ncp — combien de dimensions conserver dans le résultat (5 par défaut).
  • sup.var / ind.sup — les indices des variables / individus supplémentaires (projetés sur la carte mais non utilisés pour la construire).
  • graph — mettez FALSE ici ; nous traçons les graphiques nous-mêmes avec factoextra pour un contrôle total.

Exécutez-la sur le data frame mixte :

library("FactoMineR")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]

res.famd <- FAMD(df, graph = FALSE)

L’objet renvoyé est une liste contenant les valeurs propres ainsi que les coordonnées, le cos2 et les contributions pour les individus, les variables et (séparément) les variables quantitatives et qualitatives. Affichez-le pour en voir les pièces :

library("FactoMineR")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

print(res.famd)
*The results are available in the following objects:

  name          description                             
1 "$eig"        "eigenvalues and inertia"               
2 "$var"        "Results for the variables"             
3 "$ind"        "results for the individuals"           
4 "$quali.var"  "Results for the qualitative variables" 
5 "$quanti.var" "Results for the quantitative variables"

Les fonctions auxiliaires de factoextra ci-dessous extraient exactement ce dont vous avez besoin :

  • get_eigenvalue(res.famd) / fviz_eig(res.famd) — la variance retenue par chaque axe.
  • get_famd_var(res.famd) / fviz_famd_var(res.famd) — les résultats pour les variables (toutes, ou réparties en quanti.var / quali.var).
  • get_famd_ind(res.famd) / fviz_famd_ind(res.famd) — les résultats pour les individus.

Valeurs propres et graphique des éboulis

La première question après toute analyse factorielle est combien de dimensions vaut-il la peine de lire ? Chaque dimension explique une part de la variance totale. Extrayez la décomposition avec get_eigenvalue() :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

eig.val <- get_eigenvalue(res.famd)
head(eig.val)
      eigenvalue variance.percent cumulative.variance.percent
Dim.1  4.8315174        43.922886                    43.92289
Dim.2  1.8568797        16.880724                    60.80361
Dim.3  1.5824794        14.386176                    75.18979
Dim.4  1.1491200        10.446546                    85.63633
Dim.5  0.6518053         5.925503                    91.56183

La dimension 1 capte à elle seule 43.9 % de la variance et la dimension 2 16.9 % de plus, de sorte que les deux premiers axes retiennent ensemble environ 61 % — assez pour rendre les cartes 2-D ci-dessous parlantes, le reste de la structure étant réparti de façon ténue sur les dimensions supérieures.

fviz_eig() (un alias de fviz_screeplot()) montre les mêmes chiffres sous forme de diagramme en barres, ce qui rend la décroissance facile à lire :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

fviz_screeplot(res.famd, addlabels = TRUE, ylim = c(0, 50),
               barfill = "#3a86d4", barcolor = "#3a86d4")

Scree plot of the percentage of variance explained by each FAMD dimension of the wine data, with the first dimension at about 44 percent and the second at about 17 percent, dropping off sharply afterward.

Graphe des variables

Toutes les variables

get_famd_var() extrait les résultats pour les variables — par défaut une liste avec les coordonnées, le cos2 (qualité de représentation) et les contributions de toutes les variables, numériques et catégorielles ensemble :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

var <- get_famd_var(res.famd)

# Contribution (%) of each variable to the first two dimensions
round(var$contrib[, 1:2], 2)
                Dim.1 Dim.2
Plante          15.20  3.26
Acidity          3.59 26.45
Harmony         18.51  1.27
Intensity       14.47  7.25
Overall.quality 18.87  0.28
Typical         16.16  1.46
Label            2.07 17.01
Soil            11.13 43.02

Tracez toutes les variables sur une même carte avec fviz_famd_var(). Les coordonnées au carré d’un point mesurent à quel point la variable est liée à chaque axe, donc une variable proche du coin supérieur droit est liée aux deux dimensions :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

fviz_famd_var(res.famd, repel = TRUE,
              ggtheme = theme_minimal())

FAMD map of all variables, with the numeric tasting scores grouped near dimension 1 and the categorical Soil and Label variables higher on dimension 2.

Utilisez fviz_contrib() pour classer les contributeurs une dimension à la fois. La ligne rouge en pointillés marque la contribution que vous attendriez si chaque variable comptait également — les barres au-dessus sont les variables qui construisent cet axe :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

# Contribution to dimension 1
fviz_contrib(res.famd, "var", axes = 1,
             fill = "#3a86d4", color = "#3a86d4")

Bar plot of variable contributions to FAMD dimension 1, with Overall.quality, Harmony, Typical, Plante and Intensity above the expected-average reference line.

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

# Contribution to dimension 2
fviz_contrib(res.famd, "var", axes = 2,
             fill = "#3a86d4", color = "#3a86d4")

Bar plot of variable contributions to FAMD dimension 2, with Soil and Acidity well above the expected-average reference line.

Lisez les deux diagrammes en barres ensemble :

  • Les variables qui contribuent le plus à la dimension 1 sont Overall.quality et Harmony (avec Typical, Intensity et Plante juste derrière) — la dimension 1 est essentiellement un axe de qualité du vin.
  • Les variables qui contribuent le plus à la dimension 2 sont Soil et Acidity — la dimension 2 est pilotée par l’environnement de culture et l’acidité.

Remarquez l’apport de l’AFDM : une variable catégorielle (Soil) et une variable numérique (Acidity) figurent sur la même échelle de contribution et définissent le même axe — quelque chose que ni l’ACP ni l’ACM ne pourraient montrer seules.

Variables quantitatives

Extrayez seulement les variables numériques avec get_famd_var(res.famd, "quanti.var") :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

quanti.var <- get_famd_var(res.famd, "quanti.var")

# Coordinates on the correlation circle
round(quanti.var$coord[, 1:2], 2)
                Dim.1 Dim.2
Plante          -0.86  0.25
Acidity         -0.42  0.70
Harmony          0.95  0.15
Intensity        0.84  0.37
Overall.quality  0.95  0.07
Typical          0.88  0.16

Pour les variables numériques, fviz_famd_var(choice = "quanti.var") trace le cercle des corrélations familier de l’ACP. La longueur et l’angle d’une flèche montrent à quel point la variable est bien représentée et comment les variables se relient : des flèches proches sont positivement corrélées, des flèches opposées sont négativement corrélées, et un angle droit signifie aucune corrélation.

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

fviz_famd_var(res.famd, "quanti.var", repel = TRUE,
              col.var = "black")

FAMD correlation circle of the six quantitative wine variables, with Overall.quality, Harmony, Typical, Intensity and Plante pointing together toward dimension 1 and Acidity pointing toward dimension 2.

Mettez en évidence les variables numériques les plus importantes en colorant les flèches par contribution. Le même graphique coloré par col.var = "cos2" montrerait à la place la qualité de représentation — une flèche est bien représentée sur cette carte lorsque son cos2 sur les deux dimensions est proche de 1 :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

fviz_famd_var(res.famd, "quanti.var", col.var = "contrib",
              gradient.cols = c("#dbe9f6", "#3a86d4", "#08306b"),
              repel = TRUE)

FAMD correlation circle of quantitative wine variables coloured by contribution, with Overall.quality and Harmony darkest because they contribute most to the first two dimensions.

Les variables de qualité gustative — Overall.quality, Harmony, Typical, Intensity — pointent ensemble vers le côté positif de la dimension 1 : les vins élevés sur l’une tendent à l’être sur les autres. Acidity pointe ailleurs, ce qui explique pourquoi elle se charge plutôt sur la dimension 2.

Variables qualitatives

Extrayez les variables catégorielles avec get_famd_var(res.famd, "quali.var") — ici le résultat est le niveau de catégorie (Saumur, Env1, …), exactement comme dans l’ACM :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

quali.var <- get_famd_var(res.famd, "quali.var")

# Coordinates of the categories
round(quali.var$coord[, 1:2], 2)
           Dim.1 Dim.2
Saumur      0.08  0.20
Bourgueuil  0.73 -1.09
Chinon     -1.32  1.08
Reference   2.07  0.61
Env1       -0.31 -1.69
Env2       -1.41  1.21
Env4       -2.65  0.77

Tracez les catégories avec fviz_famd_var(choice = "quali.var"), colorées par contribution :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

fviz_famd_var(res.famd, "quali.var", col.var = "contrib",
              gradient.cols = c("#dbe9f6", "#3a86d4", "#08306b"))

FAMD map of the categories of the Label and Soil variables, with the Env4 and Reference soil categories far from the origin and contributing most to the dimensions.

Lisez-la comme une carte de catégories d’ACM : les catégories au profil similaire figurent proches les unes des autres, et la distance à l’origine mesure à quel point une catégorie est bien représentée. Les catégories de sol s’étalent le plus largement — Reference et Env4 sont éloignées l’une de l’autre, confirmant que Soil est un fort moteur de la carte (c’ était le premier contributeur à la dimension 2).

Graphe des individus

Extrayez les résultats au niveau des individus avec get_famd_ind() — les mêmes trois pièces (coord, cos2, contrib) que pour les variables. Tracez les vins avec fviz_famd_ind() et colorez-les par cos2 pour voir lesquels sont bien représentés sur cette carte :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

fviz_famd_ind(res.famd, col.ind = "cos2",
              gradient.cols = c("#dbe9f6", "#3a86d4", "#08306b"),
              repel = TRUE)

FAMD map of the 21 wines coloured by cos2, with well-represented wines darker and far from the origin, and the Soil and Label category points shown in black.

Par défaut, les points de catégorie des variables qualitatives sont tracés sur la carte des individus en noir — Saumur, Bourgueuil, Chinon (les catégories de Label) et les catégories de Soil. Ils servent de repères : un vin situé près d’une catégorie partage le profil de cette catégorie. Pour les masquer, ajoutez invisible = "quali.var". Les vins au profil similaire sont proches les uns des autres sur la carte.

Colorer les individus par groupe

Le véritable apport est le regroupement : colorez les vins par une variable catégorielle et voyez si les profils se séparent. L’argument habillage nomme le facteur de regroupement ; addEllipses = TRUE trace une ellipse de concentration autour de chaque groupe. Ici, nous regroupons par Label :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

fviz_famd_ind(res.famd,
              habillage = "Label",          # colour by groups
              palette = "jco",              # colourblind-safe journal palette
              addEllipses = TRUE, ellipse.type = "confidence",
              repel = TRUE)

FAMD individuals map coloured by the wine Label, with three confidence ellipses separating Saumur, Bourgueuil and Chinon wines on the factor map.

Les trois groupes de labels occupent des régions différentes de la carte — le profil global des vins dépend de leur origine, ce qui est exactement le genre de structure que l’AFDM est faite pour révéler à travers des types de variables mixtes. Pour comparer plusieurs variables de regroupement à la fois, utilisez fviz_ellipses() :

library("FactoMineR")
library("factoextra")
data(wine)
df <- wine[, c(1, 2, 16, 22, 29, 28, 30, 31)]
res.famd <- FAMD(df, graph = FALSE)

fviz_ellipses(res.famd, c("Label", "Soil"), repel = TRUE)

FAMD ellipse plot comparing the Label and Soil groupings of the wines on the same factor map.

L’AFDM standardise chaque type de variable puis exécute une seule ACP sur la table combinée et équilibrée.

Pour les variables quantitatives, l’AFDM fait ce que fait l’ACP : chaque colonne est centrée et réduite à une variance unitaire, de sorte que chaque variable numérique contribue la même variance totale, quelles que soient ses unités d’origine.

Pour les variables qualitatives, l’AFDM fait ce que fait l’ACM : chaque facteur est encodé en one-hot dans une matrice indicatrice (une colonne par catégorie), et chaque colonne indicatrice est pondérée par l’inverse de la fréquence de sa catégorie \(1 / p_k\), de sorte que les catégories rares ne soient pas surreprésentées et que le bloc catégoriel soit mis à la même échelle que le bloc numérique standardisé.

L’empilement des colonnes numériques standardisées et des colonnes indicatrices pondérées donne une seule matrice ; l’AFDM est la décomposition en valeurs singulières de cette matrice. Les valeurs propres \(\lambda_d\) sont les variances des dimensions résultantes, et le pourcentage de variance expliquée par la dimension \(d\) est \(100 \times \lambda_d / \sum_k \lambda_k\). Comme les deux blocs ont d’abord été normalisés, les dimensions reflètent la structure des deux types de variables plutôt que de celui qui se trouvait avoir plus de colonnes ou une plus grande échelle. Les règles d’interprétation — proximité = similarité, cos2 = qualité, contrib = importance — sont héritées sans changement de l’ACP et de l’ACM.

Essayez en direct

Modifiez et exécutez l’analyse dans votre navigateur — aucune installation nécessaire. Essayez de colorer les individus par "Soil" au lieu de "Label", basculez le graphique des variables vers "quanti.var" coloré par "cos2", ou changez les colonnes qui entrent dans df, puis relancez.

🟢 Avec un agent IA

Vous travaillez l’AFDM sur votre propre table mixte ? Demandez à Prova « comment exécuter l’AFDM sur des données comportant à la fois des colonnes numériques et catégorielles et lire la carte factorielle ? » — elle répond avec du code R que vous pouvez exécuter sur vos propres données, vous aide à confirmer quelles colonnes sont des facteurs et lesquelles sont numériques, et lit les contributions et le cos2 avec vous. The runtime is the judge. Demander à Prova →

Problèmes courants

  • Quand est-ce que j’utilise l’AFDM plutôt que l’ACP ou l’ACM ? Faites correspondre la méthode à vos colonnes : tout numérique → ACP ; tout catégoriel → ACM ; un mélange des deux → AFDM. Ne forcez pas une variable numérique en catégories (ni une catégorie en un code numérique) juste pour utiliser l’une des méthodes à type unique — l’AFDM existe précisément pour vous éviter de jeter de l’information.
  • Les colonnes catégorielles doivent être des facteurs. L’AFDM décide qu’une colonne est qualitative à partir de sa classe, donc une région ou un groupe stocké en character ou en code entier est traité comme numérique et analysé de la mauvaise façon. Convertissez-le d’abord — df$Soil <- as.factor(df$Soil) — et vérifiez avec str(df) avant d’exécuter FAMD().
  • Ne ré-échelonnez pas les variables à la main. L’AFDM normalise les blocs quantitatif et qualitatif pour vous afin qu’aucun ne domine — cet équilibrage est tout l’intérêt de la méthode. Standardiser les colonnes numériques vous-même au préalable (ou encoder en one-hot les facteurs vous-même) duplique cette étape et casse la pondération ; donnez à FAMD() le data frame mixte brut.

Questions fréquentes

L’AFDM est une méthode en composantes principales pour une table de données qui contient à la fois des variables quantitatives et qualitatives. Elle réduit la table mixte à quelques dimensions interprétables que vous pouvez tracer, révélant quels individus ont des profils similaires et comment les variables numériques et catégorielles se relient. Elle se comporte comme une ACP sur les colonnes numériques et comme une ACM sur les colonnes catégorielles, normalisant les deux blocs pour qu’aucun ne domine.

Utilisez FAMD() du package FactoMineR : assurez-vous que vos colonnes catégorielles sont des facteurs et vos colonnes numériques sont numériques, puis appelez res.famd <- FAMD(my_data, graph = FALSE). Visualisez-la avec factoextrafviz_eig() pour les valeurs propres, fviz_famd_var() pour les variables (choice = "quanti.var" ou "quali.var" pour les séparer) et fviz_famd_ind() pour les individus.

L’ACP ne fonctionne que sur des variables quantitatives (numériques). L’AFDM gère aussi les variables qualitatives (facteurs) dans la même analyse, traitant le bloc numérique comme une ACP et le bloc catégoriel comme une ACM, et normalisant les deux pour qu’aucun ne domine. Si votre table est purement numérique, l’AFDM et l’ACP donnent le même résultat — utilisez donc l’ACP. Utilisez l’AFDM lorsqu’au moins une variable est catégorielle.

Ne faites pas entrer de force des données mixtes dans une ACP (qui ignore ou mal-échelonne les facteurs) ni dans une ACM (qui vous oblige à découper chaque variable numérique en classes). Utilisez l’AFDM : passez le data frame brut avec ses colonnes numériques et facteurs à FAMD() et elle standardise et équilibre les deux types automatiquement. C’est la façon rigoureuse de conserver à la fois les mesures et les catégories dans une même carte.

L’AFDM équilibre les variables une à une par type (numérique vs catégorielle). L’analyse factorielle multiple (AFM) équilibre des groupes prédéfinis de variables (par exemple un bloc de scores sensoriels vs un bloc de mesures chimiques), de sorte que chaque groupe contribue également quel que soit le nombre de variables qu’il contient. Utilisez l’AFDM pour un mélange plat de types ; utilisez l’AFM lorsque vos variables forment des groupes ayant un sens que vous souhaitez pondérer également.

Testez vos connaissances

Exécutez l’AFDM sur une tranche plus large des données wine intégrées. Conservez les deux premières colonnes (Label, Soil — les facteurs) plus les colonnes numériques 16 à 21, exécutez FAMD(), affichez les trois premières valeurs propres, et tracez le cercle des corrélations des variables quantitatives coloré par contribution.

Construisez les données avec df <- wine[, c(1, 2, 16:21)]. Exécutez FAMD(df, graph = FALSE), puis utilisez get_eigenvalue() et fviz_famd_var(res, "quanti.var", col.var = "contrib", repel = TRUE).

library(FactoMineR)
library(factoextra)

data(wine)
df <- wine[, c(1, 2, 16:21)]

res.famd <- FAMD(df, graph = FALSE)
get_eigenvalue(res.famd)[1:3, ]

fviz_famd_var(res.famd, "quanti.var", col.var = "contrib",
              gradient.cols = c("#dbe9f6", "#3a86d4", "#08306b"),
              repel = TRUE)

Les facteurs restent des facteurs et les colonnes numériques restent numériques ; l’AFDM détecte chaque type et le cercle des corrélations montre quelles variables de dégustation pilotent les deux premières dimensions.

Vérification rapide. Vous avez une table de patients avec trois mesures de laboratoire (numériques) et un groupe de diagnostic (un facteur à quatre niveaux). Vous voulez une seule carte factorielle qui utilise à la fois les mesures de laboratoire et le diagnostic. Quelle méthode utilisez-vous ?

Utilisez l’AFDM. La table mêle des variables numériques (valeurs de laboratoire) et catégorielles (diagnostic), donc ni l’ACP (numérique uniquement) ni l’ACM (catégorielle uniquement) ne conviennent. FAMD(patients, graph = FALSE) analyse les deux types dans une seule carte, en les normalisant pour que le facteur de diagnostic à quatre niveaux ne soit pas noyé par les trois mesures de laboratoire numériques (ou inversement).

Conclusion

Vous avez chargé une table qui mêle des variables numériques et catégorielles, confirmé les types de colonnes, exécuté FAMD(), lu les valeurs propres (environ 61 % de la variance sur les deux premiers axes), et visualisé le résultat avec factoextra — toutes les variables sur une même échelle de contribution, le cercle des corrélations des variables quantitatives, la carte des catégories qualitatives, et les individus regroupés par un résultat. L’AFDM a transformé une table de vins mixte en une histoire à deux axes : un axe sur la qualité globale et l’harmonie, un autre sur le sol et l’acidité. Quand toutes les variables sont numériques, tournez-vous vers l’ACP ; quand toutes les variables sont catégorielles, utilisez l’ACM ; quand vos variables forment des groupes prédéfinis, utilisez l’AFM.

Leçons connexes

Vous préférez un livre ? Principal Component Methods in R est disponible en PDF téléchargeable — toutes les leçons de cette série, hors ligne et à vous.

Obtenir le livre (PDF) →Les leçons restent gratuites en ligne.
Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série Réduction de dimension en R — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN
Note

Cette leçon est reproductible : chaque figure a été produite par le code montré — modifiez n’importe quel bloc et cliquez sur Run, et le bac à sable + le quiz se réexécutent en direct dans votre navigateur. The runtime is the judge.

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Analyse factorielle de données mixtes (AFDM) dans R},
  date = {2026-06-24},
  url = {https://www.datanovia.com/learn/machine-learning/dimension-reduction/factor-analysis-of-mixed-data},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Analyse factorielle de données mixtes (AFDM) dans R.” 2026. June 24. https://www.datanovia.com/learn/machine-learning/dimension-reduction/factor-analysis-of-mixed-data.