L’Analyse Factorielle des Correspondances (AFC) permet de résumer et de visualiser un tableau de contingence, c’est-à-dire un tableau croisant deux variables qualitatives. Ce tableau donne, au croisement de la ligne i et de la colonne j, le nombre d’individus prenant la modalité i de la première variable et j de la seconde. Les objectifs de l’AFC sont de comparer les lignes entre elles, de comparer les colonnes entre elles et d’interpréter les positions entre les lignes et les colonnes, autrement dit de visualiser les associations des modalités des deux variables.

Pour l’AFC, on utilise la fonction CA du package FactoMineR, package dédié à l’analyse factorielle.

Le jeu de données représente le nombre d’étudiants des universités françaises par discipline et par cursus selon le sexe lors de l’année 2007-2008. Le tableau croise les variables qualitatives Discipline et Niveau-sexe. Il comprend en lignes les 10 disciplines de l’université et en colonnes les croisements des variables niveau (licence, master et doctorat) et sexe (homme et femme). L’AFC est alors appliquée entre une variable (Discipline) et le croisement de deux variables (Niveau-sexe), ce qui est fréquent en AFC. Nous disposons de plus par discipline du nombre total d’étudiants par niveau, par sexe et du total global.

Importer le jeu de données

data(mtcars)
summary(mtcars)
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000

Construisons maintenant l’AFC à l’aide de la fonction CA du package FactoMineR en précisant que les colonnes 7 à 12 sont illustratives :

library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.2.3
res.ca <- CA(mtcars)
## Warning: ggrepel: 20 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

L’objet res.ca contient l’ensemble des résultats qui peuvent être résumés par la fonction summary.CA, qui peut être appelée indifféremment par summary ou summary.CA.

Pour avoir les résultats sur tous les individus et toutes les variables.

summary(res.ca, nb.dec=2, ncp=2, nbelements=3)
## 
## Call:
## CA(X = mtcars) 
## 
## The chi square of independence between the two variables is equal to 1029.214 (p-value =  5.498314e-78 ).
## 
## Eigenvalues
##                       Dim.1  Dim.2  Dim.3  Dim.4  Dim.5  Dim.6  Dim.7  Dim.8
## Variance               0.05   0.02   0.00   0.00   0.00   0.00   0.00   0.00
## % of var.             73.41  21.78   2.06   1.41   0.51   0.38   0.20   0.11
## Cumulative % of var.  73.41  95.19  97.25  98.67  99.17  99.55  99.75  99.87
##                       Dim.9 Dim.10
## Variance               0.00   0.00
## % of var.              0.09   0.04
## Cumulative % of var.  99.96 100.00
## 
## Rows (the 3 first)
##                       Iner*1000   Dim.1   ctr  cos2   Dim.2   ctr  cos2  
## Mazda RX4           |      0.65 |  0.13  0.73  0.61 | -0.02  0.07  0.02 |
## Mazda RX4 Wag       |      0.67 |  0.13  0.78  0.63 | -0.02  0.06  0.01 |
## Datsun 710          |      2.16 |  0.33  3.75  0.94 | -0.03  0.07  0.01 |
## 
## Columns (the 3 first)
##                       Iner*1000   Dim.1   ctr  cos2   Dim.2   ctr  cos2  
## mpg                 |     26.93 |  0.75 47.83  0.96 |  0.13  4.57  0.03 |
## cyl                 |      0.43 |  0.12  0.39  0.50 |  0.02  0.05  0.02 |
## disp                |     14.04 | -0.14 18.35  0.71 |  0.09 25.30  0.29 |

Par défaut, un test du \(\chi^2\) est construit pour tester l’indépendance des variables Discipline et Niveau-sexe sur les modalités (lignes et colonnes) actives.

Choisir le nombre d’axes

Pour déterminer le nombre d’axes à analyser, on se base sur la décomposition de l’inertie associée à chaque axe. Celle-ci est donnée en début de sortie précédenteet l’on peut représenter le diagramme en bâtons de cette décomposition.

barplot(res.ca$eig[,2],names=paste("Dim",1:nrow(res.ca$eig)))

plot(res.ca)
## Warning: ggrepel: 20 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps