install.packages(c("FactoMineR", "factoextra"))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.
- 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 parcos2(qualité) oucontrib(importance).
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.
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.
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) etSoil(Reference, Env1, Env2 ou Env4). - Les six colonnes restantes sont numériques (variables continues) :
Plante,Acidity,Harmony,Intensity,Overall.qualityetTypical.
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 denindividus (lignes) parpvariables (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— mettezFALSEici ; 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 enquanti.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")
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())
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")
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")
Lisez les deux diagrammes en barres ensemble :
- Les variables qui contribuent le plus à la dimension 1 sont
Overall.qualityetHarmony(avecTypical,IntensityetPlantejuste derrière) — la dimension 1 est essentiellement un axe de qualité du vin. - Les variables qui contribuent le plus à la dimension 2 sont
SoiletAcidity— 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")
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)
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"))
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)
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)
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)
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.
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
characterou 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 avecstr(df)avant d’exécuterFAMD(). - 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 factoextra — fviz_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
- Analyse en composantes principales (ACP) — la méthode numérique uniquement que l’AFDM réutilise pour son bloc quantitatif, avec le cercle des corrélations que vous lisez ici. · Analyse des correspondances multiples (ACM) — la méthode catégorielle uniquement que l’AFDM réutilise pour son bloc qualitatif. · Analyse factorielle multiple (AFM) — l’étape suivante lorsque les variables forment des groupes prédéfinis.
- Pour aller plus loin : ACP · ACM · AFM. · Réduction de dimension — la série complète. · Machine Learning — le pilier.
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.
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.
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
✓ Vous êtes Pro — continuez. The runtime is the judge.
Prêt à passer à la vitesse supérieure ?
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
@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}
}