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.
Obtenez le livre — Principal Component Methods in R (PDF)

Introduction

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).

Cette leçon fait partie de la série Réduction de dimension. Pour la contrepartie descriptive qui résume la variance, voyez Analyse en composantes principales.

ACP vs analyse factorielle

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 $cov
dim(Harman74.cor$cov)
[1] 24 24
# A corner of the matrix — the first 4 tests
round(Harman74.cor$cov[1:4, 1:4], 2)
                 VisualPerception Cubes PaperFormBoard Flags
VisualPerception             1.00  0.32           0.40  0.47
Cubes                        0.32  1.00           0.32  0.23
PaperFormBoard               0.40  0.32           1.00  0.30
Flags                        0.47  0.23           0.30  1.00

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).
  • covmatou 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 :

data(Harman74.cor)

res.fa <- factanal(covmat = Harman74.cor, factors = 4, rotation = "varimax")
res.fa

Call:
factanal(factors = 4, covmat = Harman74.cor, rotation = "varimax")

Uniquenesses:
      VisualPerception                  Cubes         PaperFormBoard 
                 0.438                  0.780                  0.644 
                 Flags     GeneralInformation  PargraphComprehension 
                 0.651                  0.352                  0.312 
    SentenceCompletion     WordClassification            WordMeaning 
                 0.283                  0.485                  0.257 
              Addition                   Code           CountingDots 
                 0.240                  0.551                  0.435 
StraightCurvedCapitals        WordRecognition      NumberRecognition 
                 0.491                  0.646                  0.696 
     FigureRecognition           ObjectNumber           NumberFigure 
                 0.549                  0.598                  0.593 
            FigureWord              Deduction       NumericalPuzzles 
                 0.762                  0.592                  0.583 
      ProblemReasoning       SeriesCompletion     ArithmeticProblems 
                 0.601                  0.497                  0.500 

Loadings:
                       Factor1 Factor2 Factor3 Factor4
VisualPerception        0.160   0.689   0.187   0.160 
Cubes                   0.117   0.436                 
PaperFormBoard          0.137   0.570           0.110 
Flags                   0.233   0.527                 
GeneralInformation      0.739   0.185   0.213   0.150 
PargraphComprehension   0.767   0.205           0.233 
SentenceCompletion      0.806   0.197   0.153         
WordClassification      0.569   0.339   0.242   0.132 
WordMeaning             0.806   0.201           0.227 
Addition                0.167  -0.118   0.831   0.166 
Code                    0.180   0.120   0.512   0.374 
CountingDots                    0.210   0.716         
StraightCurvedCapitals  0.188   0.438   0.525         
WordRecognition         0.197                   0.553 
NumberRecognition       0.122   0.116           0.520 
FigureRecognition               0.408           0.525 
ObjectNumber            0.142           0.219   0.574 
NumberFigure                    0.293   0.336   0.456 
FigureWord              0.148   0.239   0.161   0.365 
Deduction               0.378   0.402   0.118   0.301 
NumericalPuzzles        0.175   0.381   0.438   0.223 
ProblemReasoning        0.366   0.399   0.123   0.301 
SeriesCompletion        0.369   0.500   0.244   0.239 
ArithmeticProblems      0.370   0.158   0.496   0.304 

               Factor1 Factor2 Factor3 Factor4
SS loadings      3.647   2.872   2.657   2.290
Proportion Var   0.152   0.120   0.111   0.095
Cumulative Var   0.152   0.272   0.382   0.478

Test of the hypothesis that 4 factors are sufficient.
The chi square statistic is 226.68 on 186 degrees of freedom.
The p-value is 0.0224 

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 out
print(res.fa$loadings, cutoff = 0.3)

Loadings:
                       Factor1 Factor2 Factor3 Factor4
VisualPerception                0.689                 
Cubes                           0.436                 
PaperFormBoard                  0.570                 
Flags                           0.527                 
GeneralInformation      0.739                         
PargraphComprehension   0.767                         
SentenceCompletion      0.806                         
WordClassification      0.569   0.339                 
WordMeaning             0.806                         
Addition                                0.831         
Code                                    0.512   0.374 
CountingDots                            0.716         
StraightCurvedCapitals          0.438   0.525         
WordRecognition                                 0.553 
NumberRecognition                               0.520 
FigureRecognition               0.408           0.525 
ObjectNumber                                    0.574 
NumberFigure                            0.336   0.456 
FigureWord                                      0.365 
Deduction               0.378   0.402           0.301 
NumericalPuzzles                0.381   0.438         
ProblemReasoning        0.366   0.399           0.301 
SeriesCompletion        0.369   0.500                 
ArithmeticProblems      0.370           0.496   0.304 

               Factor1 Factor2 Factor3 Factor4
SS loadings      3.647   2.872   2.657   2.290
Proportion Var   0.152   0.120   0.111   0.095
Cumulative Var   0.152   0.272   0.382   0.478

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 low
sort(round(res.fa$uniquenesses, 2), decreasing = TRUE)
                 Cubes             FigureWord      NumberRecognition 
                  0.78                   0.76                   0.70 
                 Flags        WordRecognition         PaperFormBoard 
                  0.65                   0.65                   0.64 
          ObjectNumber       ProblemReasoning           NumberFigure 
                  0.60                   0.60                   0.59 
             Deduction       NumericalPuzzles                   Code 
                  0.59                   0.58                   0.55 
     FigureRecognition       SeriesCompletion     ArithmeticProblems 
                  0.55                   0.50                   0.50 
    WordClassification StraightCurvedCapitals       VisualPerception 
                  0.49                   0.49                   0.44 
          CountingDots     GeneralInformation  PargraphComprehension 
                  0.44                   0.35                   0.31 
    SentenceCompletion            WordMeaning               Addition 
                  0.28                   0.26                   0.24 
# Communality = 1 - uniqueness (variance explained by the factors)
sort(round(1 - res.fa$uniquenesses, 2), decreasing = TRUE)
              Addition            WordMeaning     SentenceCompletion 
                  0.76                   0.74                   0.72 
 PargraphComprehension     GeneralInformation       VisualPerception 
                  0.69                   0.65                   0.56 
          CountingDots     WordClassification StraightCurvedCapitals 
                  0.56                   0.51                   0.51 
      SeriesCompletion     ArithmeticProblems                   Code 
                  0.50                   0.50                   0.45 
     FigureRecognition       NumericalPuzzles           NumberFigure 
                  0.45                   0.42                   0.41 
             Deduction           ObjectNumber       ProblemReasoning 
                  0.41                   0.40                   0.40 
        PaperFormBoard                  Flags        WordRecognition 
                  0.36                   0.35                   0.35 
     NumberRecognition             FigureWord                  Cubes 
                  0.30                   0.24                   0.22 

Lisez-les comme un diagnostic :

  • 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 :

data(Harman74.cor)

# Unrotated: factor 1 hogs the variance
fa.none <- factanal(covmat = Harman74.cor, factors = 4, rotation = "none")
round(colSums(fa.none$loadings^2), 2)
Factor1 Factor2 Factor3 Factor4 
   7.52    1.70    1.33    0.92 
# Varimax: variance is spread across factors -> interpretable
fa.vmax <- factanal(covmat = Harman74.cor, factors = 4, rotation = "varimax")
round(colSums(fa.vmax$loadings^2), 2)
Factor1 Factor2 Factor3 Factor4 
   3.65    2.87    2.66    2.29 

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 factors
for (k in 2: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))
}
2 factors: chi-sq =  420.2, df = 229, p = 0.0000
3 factors: chi-sq =  295.6, df = 207, p = 0.0001
4 factors: chi-sq =  226.7, df = 186, p = 0.0224
5 factors: chi-sq =  186.8, df = 166, p = 0.1283

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 factors
load <- 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")

Scatter plot of the first two varimax factor loadings for the 24 Harman74 aptitude tests, with verbal tests stretching along factor 1 and spatial tests along factor 2, labelled at their loading positions.

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\) :

\[ x_j = \lambda_{j1} f_1 + \lambda_{j2} f_2 + \dots + \lambda_{jm} f_m + 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 , \]

\(\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

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.

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.

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.

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.

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

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 ?

Appelez factanal(covmat = Harman74.cor, factors = 3), puis print(res$loadings, cutoff = 0.3) et lisez res$PVAL.

data(Harman74.cor)

res3 <- factanal(covmat = Harman74.cor, factors = 3, rotation = "varimax")
print(res3$loadings, cutoff = 0.3)

cat("p-value =", signif(res3$PVAL, 3), "\n")

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 ?

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.

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 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.

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Analyse factorielle exploratoire dans R : facteurs,
    saturations et rotation},
  date = {2026-06-24},
  url = {https://www.datanovia.com/learn/machine-learning/dimension-reduction/factor-analysis},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Analyse factorielle exploratoire dans R : facteurs, saturations et rotation.” 2026. June 24. https://www.datanovia.com/learn/machine-learning/dimension-reduction/factor-analysis.