Analyse factorielle exploratoire dans R : facteurs, saturations et rotation
Modélisez de nombreuses variables observées par quelques facteurs latents inobservés avec factanal(), puis lisez les saturations, les spécificités et la rotation
Un guide pratique de l’analyse factorielle exploratoire (AFE) dans R : en quoi elle diffère de l’ACP, comment ajuster un modèle avec factanal(), et comment lire les saturations, les spécificités, la rotation varimax, la proportion de variance expliquée et le test du khi-deux qui vous indique si votre nombre de facteurs est suffisant. Travaillé sur les classiques données d’aptitude psychologique Harman74.
Date de publication
24 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
L’analyse factorielle exploratoire (AFE) résume de nombreuses variables observées corrélées en quelques facteurs latents inobservés — les variables qui saturent sur le même facteur partagent une cause commune, non directement mesurée.
Elle diffère de l’ACP : l’AFE suppose un modèle (observé = facteurs + erreur unique), tandis que l’ACP est une pure transformation des variables observées résumant la variance. Lisez ACP vs analyse factorielle avant de choisir.
Ajustez un modèle en base R avec factanal() — aucun package supplémentaire requis. Elle renvoie les saturations, les spécificités, une rotation et un test du khi-deux.
Les saturations sont les corrélations entre chaque variable et chaque facteur (lisez quelles variables définissent chaque facteur) ; les spécificités sont la variance non expliquée par les facteurs communs.
La rotation varimax (le défaut) rend les facteurs interprétables — elle pousse chaque variable à saturer fortement sur un seul facteur et près de zéro sur les autres.
Le test du khi-deux vérifie si le nombre de facteurs que vous avez choisi est suffisant ; combinez-le à l’interprétabilité pour décider combien en conserver.
L’analyse factorielle résume l’information contenue dans un vaste jeu de données multivarié en un plus petit nombre de variables non mesurées appelées facteurs (ou variables latentes). L’idée clé : plusieurs variables observées présentent un schéma de réponses similaire parce qu’elles sont toutes pilotées par la même variable sous-jacente, non directement mesurée.
Par exemple, les gens peuvent répondre de façon similaire à des questions sur le revenu, l’éducation et la profession parce que ces trois éléments sont associés à une même variable latente — le statut socio-économique. La variation de dix variables observées pourrait en réalité refléter la variation de seulement deux variables inobservées. Le but de l’analyse factorielle est de trouver ces facteurs latents indépendants et de les utiliser pour réduire la dimensionnalité des données.
Formellement, les variables observées sont modélisées comme des combinaisons linéaires des facteurs, plus un terme d’« erreur » (unique). Utilisez l’analyse factorielle lorsqu’un ensemble de variables présente une interdépendance systématique et que vous voulez mettre au jour les facteurs latents qui créent cette communauté. Elle est employée dans de nombreux domaines — la santé, la psychologie, la psychométrie, la théorie de la personnalité, le marketing et la finance.
Il en existe deux grands types :
Analyse factorielle exploratoire (AFE) — vous ne spécifiez pas à l’avance quelles variables saturent sur quel facteur ; l’analyse découvre la structure. Cette leçon traite de l’AFE.
Analyse factorielle confirmatoire (AFC) — vous spécifiez bien une structure hypothétique et testez à quel point elle s’ajuste (une tâche de modélisation par équations structurelles, hors de portée du base R).
C’est la question que tout le monde pose, alors réglons-la d’abord. L’ACP et l’analyse factorielle sont liées mais non identiques — et choisir la mauvaise est l’erreur la plus courante.
La différence tient à la direction du modèle :
Dans l’ACP, vous créez de nouvelles variables (les composantes) qui sont des combinaisons linéaires des variables observées. Les composantes ne sont que des sommes pondérées de ce que vous avez mesuré — il n’y a aucun modèle sous-jacent, et une composante est calculée, non estimée.
Dans l’analyse factorielle, vous modélisez les variables observées comme des combinaisons linéaires des facteurs, plus un terme d’erreur unique par variable. L’analyse factorielle est, en un sens, une inversion de l’ACP : les facteurs latents sont supposés générer les données que vous voyez.
Toutes deux réduisent la dimensionnalité des données, mais elles répondent à des questions différentes :
ACP
Analyse factorielle exploratoire
Objectif
Résumer / compresser la variance
Expliquer la variance partagée via des facteurs latents
Modèle
Aucun — une transformation déterministe
Observé = facteurs + erreur unique
Direction
Composantes = f(variables observées)
Variables observées = f(facteurs)
Terme d’erreur
Non (conserve toute la variance)
Oui — sépare la variance commune de la variance unique
À utiliser pour
Représenter, débruiter, alimenter des modèles en aval
Tester une hypothèse de structure latente
Il y a une dernière différence pratique. Dans l’ACP, les composantes sont souvent difficiles à interpréter — une seule variable peut contribuer fortement à plusieurs composantes, alors qu’idéalement vous voudriez que chaque variable ne sature que sur une seule. L’analyse factorielle recourt à une technique appelée rotation des facteurs (ci-dessous) pour tendre vers exactement cette structure nette, à une variable par facteur. Chaque facteur capture une part de la variance globale, et les facteurs sont listés par ordre décroissant d’importance — le premier explique le plus.
NoteLaquelle devrais-je utiliser ?
Utilisez l’ACP pour résumer et visualiser des variables numériques corrélées sans aucune hypothèse. Utilisez l’analyse factorielle lorsque vous pensez qu’un petit ensemble de variables latentes génère vos données et que vous voulez les récupérer et les interpréter — courant en psychométrie et dans la recherche par enquête.
Les données
Nous utiliserons Harman74.cor, un jeu de données classique intégré à R (le package datasets, toujours disponible). Il contient les corrélations entre 24 tests d’aptitude psychologique passés par 145 enfants — l’exemple pédagogique standard de l’analyse factorielle, et un cas d’usage naturel en psychologie.
L’objet est une liste ; la matrice de corrélation se trouve dans $cov. L’AFE travaille directement sur une matrice de corrélation, nous n’avons donc pas besoin des lignes brutes :
data(Harman74.cor)# It's a list; the 24x24 correlation matrix is in $covdim(Harman74.cor$cov)
[1] 24 24
# A corner of the matrix — the first 4 testsround(Harman74.cor$cov[1:4, 1:4], 2)
Les noms des variables (VisualPerception, WordMeaning, Addition, …) suggèrent les aptitudes latentes que nous espérons récupérer — spatiale, verbale, arithmétique et mémorielle.
Ajuster le modèle avec factanal()
Le base R ajuste une AFE avec factanal() — aucun package à installer. L’appel simplifié est factanal(x, factors, covmat, rotation = "varimax") :
x — un data frame d’observations brutes (lignes = individus, colonnes = variables numériques).
covmat — ou bien fournissez directement une matrice de covariance/corrélation (ce que nous faisons ici, puisque c’est tout ce que Harman74.cor nous donne).
factors — le nombre de facteurs latents à extraire (vous choisissez ; voir plus bas).
rotation — comment faire pivoter les facteurs pour l’interprétabilité ; "varimax" (orthogonale) est le défaut.
Commencez par 4 facteurs — le nombre pour lequel ce jeu de données est célèbre. Passez la matrice de corrélation via covmat :
Ce seul affichage contient tout le résultat. Nous allons le lire morceau par morceau.
Lire les saturations
Les saturations sont le cœur de la sortie : chacune est la corrélation entre une variable et un facteur. Une variable avec une saturation élevée sur un facteur est bien expliquée par celui-ci ; le schéma des saturations élevées vous indique ce que signifie chaque facteur. Par défaut, factanal() masque les saturations inférieures à 0.1 pour faire ressortir la structure — abaissez le seuil avec l’argument cutoff lors de l’affichage :
data(Harman74.cor)res.fa <-factanal(covmat = Harman74.cor, factors =4, rotation ="varimax")# Show loadings, hiding values below 0.3 so the structure stands outprint(res.fa$loadings, cutoff =0.3)
Lisez-les colonne par colonne — chaque facteur est une aptitude latente :
Le facteur 1 sature sur GeneralInformation, ParagraphComprehension, SentenceCompletion, WordMeaning — un facteur verbal.
Le facteur 2 sature sur VisualPerception, Cubes, PaperFormBoard, Flags — un facteur spatial / visuel.
Le facteur 3 sature sur Addition, CountingDots, StraightCurvedCapitals — un facteur de vitesse / numérique.
Le facteur 4 sature sur WordRecognition, NumberRecognition, ObjectNumber — un facteur mémoriel.
Cette séparation nette et interprétable — chaque test saturant principalement sur un seul facteur — est exactement ce que l’analyse factorielle vise, et ce que la rotation vous apporte.
Spécificités et communautés
La variance de chaque variable se scinde en deux parts : la communauté (partagée avec les facteurs communs) et la spécificité (tout le reste — la variance propre à la variable plus l’erreur de mesure). Elles somment à 1 pour des variables standardisées, donc communauté = 1 - spécificité :
data(Harman74.cor)res.fa <-factanal(covmat = Harman74.cor, factors =4, rotation ="varimax")# Uniquenesses, sorted high to lowsort(round(res.fa$uniquenesses, 2), decreasing =TRUE)
Une spécificité élevée (p. ex. WordRecognition, NumberRecognition autour de 0.65–0.70) signifie que les facteurs communs expliquent peu de cette variable — elle se tient quelque peu à l’écart.
Une spécificité faible (p. ex. WordMeaning ≈ 0.26) signifie que les facteurs capturent l’essentiel de sa variance — elle est bien décrite par le modèle.
Si une variable a une spécificité proche de 1, les facteurs ne disent presque rien d’elle ; demandez-vous si elle appartient à l’analyse.
Rotation des facteurs (varimax)
La rotation est ce qui rend les facteurs interprétables. La solution brute (non tournée) maximise la variance sur le premier facteur, de sorte que de nombreuses variables y saturent et que la structure est confuse. Varimax fait pivoter les axes des facteurs vers une structure simple — en poussant chaque variable vers une saturation élevée sur un facteur et près de zéro sur les autres — sans changer la part de variance totale que les facteurs expliquent.
Voyez-le directement : comparez la variance par facteur avec et sans rotation :
Sans rotation, le premier facteur porte bien plus que les autres (un facteur « g » général écrase tout). Après varimax, la variance est équilibrée entre les quatre facteurs, de sorte que chacun correspond à une aptitude distincte et nommable. La variance totale expliquée est identique — la rotation ne fait que la redistribuer.
NoteRotation orthogonale vs oblique
"varimax" est orthogonale — elle maintient les facteurs non corrélés, ce qui est le plus simple à interpréter. Si vous vous attendez à ce que les facteurs latents soient corrélés (l’aptitude verbale et l’aptitude au raisonnement le sont souvent), utilisez une rotation oblique comme promax (rotation = "promax"), qui laisse les axes s’incliner. Commencez orthogonal ; ne passez à l’oblique que lorsque la théorie dit que les facteurs devraient être corrélés.
Combien de facteurs ?
factanal() vous oblige à choisir le nombre de facteurs d’emblée, et elle rapporte un test du khi-deux d’adéquation : l’hypothèse nulle est « ce nombre de facteurs est suffisant ». Une petite p-value signifie que le modèle laisse encore une structure significative inexpliquée — vous pourriez avoir besoin de plus de facteurs.
Ajustez une plage et comparez le test :
data(Harman74.cor)# Chi-square test for 2, 3, 4 and 5 factorsfor (k in2:5) { fa <-factanal(covmat = Harman74.cor, factors = k, rotation ="varimax")cat(sprintf("%d factors: chi-sq = %6.1f, df = %3d, p = %.4f\n", k, fa$STATISTIC, fa$dof, fa$PVAL))}
En lisant la chaîne : 2 et 3 facteurs sont clairement rejetés (p bien en dessous de 0.05 — une structure subsiste), 4 facteurs est à la limite (p ≈ 0.022), et 5 facteurs n’est pas rejeté (p ≈ 0.13). Le test seul vous pousserait vers 5, mais le nombre de facteurs ne se choisit pas par le test seul :
Le test du khi-deux est sensible à la taille d’échantillon — avec assez de données, il rejette presque n’importe quel modèle, donc traitez-le comme un signal, non un verdict.
L’interprétabilité compte davantage. La solution à 4 facteurs correspond nettement à verbal / spatial / vitesse / mémoire — la structure bien connue de ces données. Un 5e facteur ajoute peu de sens nommable.
Une règle de type éboulis (conserver les facteurs dont les valeurs propres dépassent 1) donne une borne supérieure grossière.
Ici, 4 facteurs est le choix standard et défendable : à la limite de l’adéquation selon le test et le plus interprétable. Il y a rarement une seule réponse objective — combinez le test, la variance expliquée et la façon dont les facteurs sont sensés.
Un graphique des saturations
Une façon rapide de voir la structure est de représenter les saturations des deux premiers facteurs l’une contre l’autre. Les variables se regroupent près de l’axe du facteur qu’elles définissent :
data(Harman74.cor)res.fa <-factanal(covmat = Harman74.cor, factors =4, rotation ="varimax")# Loadings of the first two factorsload <- res.fa$loadings[, 1:2]plot(load, type ="n",xlim =c(-0.15, 0.95), ylim =c(-0.15, 0.8),xlab ="Factor 1 (verbal)", ylab ="Factor 2 (spatial)",main ="Factor loadings: Harman74 aptitude tests")abline(h =0, v =0, col ="grey80")text(load, labels =rownames(load), cex =0.65, col ="#3a86d4")
Les variables éloignées le long du facteur 1 sont les tests verbaux ; celles élevées sur le facteur 2 sont les tests spatiaux ; les variables proches de l’origine saturent principalement sur les deux autres facteurs (vitesse et mémoire) non représentés ici. Le graphique est l’écho visuel du tableau des saturations.
Le modèle à facteurs communs écrit chaque variable observée standardisée \(x_j\) comme une combinaison linéaire de \(m\) facteurs communs \(f_1, \dots, f_m\) plus un terme unique \(u_j\) :
Les coefficients \(\lambda_{jk}\) sont les saturations (rassemblées dans la matrice des saturations \(\Lambda\)). Pour des facteurs orthogonaux à variance unitaire, le modèle implique que la matrice de corrélation \(R\) des variables observées se factorise comme
\[
R = \Lambda \Lambda^{\top} + \Psi ,
\]
où \(\Psi\) est la matrice diagonale des spécificités\(\psi_j\). Chaque entrée diagonale de \(\Lambda \Lambda^{\top}\) est la communauté\(h_j^2 = \sum_k \lambda_{jk}^2\), la part de la variance de \(x_j\) expliquée par les facteurs communs, donc \(h_j^2 + \psi_j = 1\). factanal() estime \(\Lambda\) et \(\Psi\) par maximum de vraisemblance, puis applique la rotation. La statistique du khi-deux teste si la matrice reconstruite \(\Lambda \Lambda^{\top} + \Psi\) correspond à la matrice observée \(R\) assez bien pour le \(m\) choisi. Contrastez cela avec l’ACP, qui diagonalise simplement \(R\) elle-même (\(R = V \Lambda_{\text{eig}} V^{\top}\)) sans \(\Psi\) — aucune séparation de la variance commune et de la variance unique.
Essayez en direct
Lancez une AFE dans votre navigateur — aucune installation nécessaire, car factanal() et Harman74.cor sont tous deux intégrés à R. Essayez de changer le nombre de factors, ou de basculer rotation sur "promax" (oblique) et regardez les saturations changer.
🟢 Avec un agent IA
Vous avez vos propres données d’enquête ou psychométriques ? Demandez à Prova« réalise une analyse factorielle exploratoire sur mes données, décide combien de facteurs conserver, et dis-moi ce que signifie chaque facteur. » — elle répond avec du code R que vous pouvez exécuter sur votre propre jeu de données, puis vous aide à lire les saturations, les spécificités et le test du khi-deux. The runtime is the judge.Demander à Prova →
Problèmes courants
Vous traitez l’ACP et l’analyse factorielle comme une même chose. Ce n’est pas le cas. L’ACP calcule les composantes comme des sommes pondérées de vos variables (aucun modèle, conserve toute la variance) ; l’AFE estime des facteurs latents supposés générer les données, séparant la variance commune de la variance unique. Si vous voulez tester une structure latente, utilisez factanal(), pas l’ACP. Voyez ACP vs analyse factorielle.
Vous n’arrivez pas à décider combien de facteurs conserver. Ne vous fiez pas au test du khi-deux seul — il rejette presque n’importe quel modèle dès lors que l’échantillon est grand. Combinez-le à l’interprétabilité (les facteurs correspondent-ils à quelque chose de nommable ?) et à une règle grossière de valeur propre > 1. Pour Harman74, 4 facteurs est le choix standard et interprétable, même si le test est à la limite.
Les facteurs paraissent ininterprétables. Assurez-vous d’avoir tourné — la solution non tournée empile la variance sur le premier facteur et est difficile à lire. "varimax" (le défaut) y remédie généralement ; si vous vous attendez à des facteurs corrélés, essayez rotation = "promax".
factanal() renvoie une erreur « 1 factor is too many » ou un cas de Heywood. Vous avez demandé plus de facteurs que les données n’en supportent, ou une spécificité a atteint zéro (un cas de Heywood). Réduisez factors, ou vérifiez les variables colinéaires / redondantes.
Questions fréquentes
NoteQu’est-ce que l’analyse factorielle ?
L’analyse factorielle est une technique qui résume de nombreuses variables observées corrélées en un plus petit nombre de facteurs latents inobservés. Les variables qui saturent sur le même facteur sont supposées partager une cause commune, non directement mesurée (par exemple le revenu, l’éducation et la profession reflétant tous le statut socio-économique). Les variables observées sont modélisées comme des combinaisons linéaires des facteurs plus un terme d’erreur unique.
NoteComment réaliser une analyse factorielle dans R ?
Utilisez le factanal() du base R — aucun package nécessaire. Passez soit un data frame (factanal(x, factors = k)) soit une matrice de corrélation (factanal(covmat = R, factors = k)), choisissez le nombre de facteurs k, et conservez le rotation = "varimax" par défaut. Le résultat rapporte les saturations, les spécificités, la proportion de variance expliquée et un test du khi-deux indiquant si k facteurs sont suffisants.
NoteQuelle est la différence entre l’analyse factorielle et l’ACP ?
Dans l’ACP, les nouvelles composantes sont des combinaisons linéaires des variables observées — une transformation déterministe qui conserve toute la variance et ne fait aucune hypothèse de modèle. Dans l’analyse factorielle, les variables observées sont modélisées comme des combinaisons linéaires de facteurs latents plus une erreur unique, séparant la variance partagée (commune) de la variance propre à la variable. Utilisez l’ACP pour résumer et visualiser ; utilisez l’analyse factorielle pour récupérer et interpréter une structure latente supposée.
NoteCombien de facteurs dois-je extraire ?
Combinez les signaux plutôt que de vous fier à un seul. Le test du khi-deux de factanal() vérifie si un nombre donné de facteurs est suffisant (petit p = pas assez), mais il est sensible à la taille d’échantillon. Pesez-le face à l’interprétabilité (pouvez-vous nommer chaque facteur ?) et à une règle grossière de valeur propre > 1. Choisissez le plus petit nombre de facteurs qui soit adéquat et interprétable.
NoteQue renvoie factanal() ?
factanal() renvoie les saturations (corrélations variable–facteur), les spécificités (variance non expliquée par les facteurs communs, donc 1 - spécificité est la communauté), la rotation choisie, les SS loadings / la proportion de variance par facteur, et un test du khi-deux d’adéquation du modèle avec ses degrés de liberté et sa p-value ($STATISTIC, $dof, $PVAL).
Testez vos connaissances
ImportantExercice : un modèle à 3 facteurs
Ajustez un modèle varimax à 3 facteurs sur Harman74.cor, affichez les saturations (en masquant les valeurs inférieures à 0.3), et rapportez le test du khi-deux. 3 facteurs sont-ils suffisants selon le test ?
AstuceIndice
Appelez factanal(covmat = Harman74.cor, factors = 3), puis print(res$loadings, cutoff = 0.3) et lisez res$PVAL.
La p-value est d’environ 1e-04 — bien en dessous de 0.05 — donc 3 facteurs sont rejetés : une structure significative reste inexpliquée, ce qui explique pourquoi le modèle à 4 facteurs est préféré pour ces données.
Vérification rapide. Une variable a une spécificité de 0.9. Que cela vous dit-il sur la façon dont les facteurs communs la décrivent ?
NoteAfficher la réponse
Une spécificité de 0.9 signifie que les facteurs communs n’expliquent que 10 % de la variance de cette variable (communauté = 1 − 0.9 = 0.1). La variable se tient largement à l’écart de la structure latente — l’essentiel de sa variance lui est spécifique (ou est du bruit) — elle contribue donc peu aux facteurs et vous pourriez vous demander si elle appartient à l’analyse.
Conclusion
Vous avez ajusté une analyse factorielle exploratoire avec factanal(), lu les saturations pour nommer chaque facteur latent, utilisé les spécificités pour voir à quel point chaque variable est décrite, appliqué la rotation varimax pour une structure nette et interprétable, et combiné le test du khi-deux à l’interprétabilité pour choisir le nombre de facteurs. La distinction cruciale à retenir : l’analyse factorielle modélise les variables observées comme le produit de facteurs latents, tandis que l’ACP ne fait que résumer leur variance — choisissez selon la question que vous vous posez.
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.
Cette leçon est reproductible : chaque résultat de cette page a été produit par le code montré — modifiez n’importe quel bloc et lancez-le, et le bac à sable + l’exercice se ré-exécutent en direct dans votre navigateur. The runtime is the judge.
Références
Harman, H. H. (1976). Modern Factor Analysis, 3e éd. University of Chicago Press.
Mardia, K. V., Kent, J. T., & Bibby, J. M. (1979). Multivariate Analysis. Academic Press.
Lawley, D. N., & Maxwell, A. E. (1971). Factor Analysis as a Statistical Method, 2e éd. Butterworths.