Analyse factorielle des correspondances sous R

Partie I

Jean-Baptiste Pressac et Laurent Mell

1 mai 2017

Auteurs

Jean-Baptiste PRESSAC (CRBC, CNRS)
Laurent MELL (LABERS, UBO)

Si vous avez des commentaires à formuler ou des remarques à effectuer, vous pouvez nous contacter par mail (par le biais de nos noms ci-dessus). Par la même occasion, si vous souhaitez échanger plus en détail et/ou contribuer à cette démarche, nous sommes aussi disponibles.

Introduction

Ce premier travail s’inscrit dans une démarche de réflexion, plus large, que nous souhaitons entreprendre autour l’analyse de données multidimensionnelles. La spécificité de l’exercice réside dans le fait que nous allons nous concentrer sur l’analyse factorielle des correspondances (AFC). Notre objectif sera d’étudier les éventuelles liaisons entre les modalités de deux variables qualitatives. Par ailleurs, nous avons fait le choix d’utiliser le logiciel R ainsi que l’environnement de développement RStudio.

Les données

Les données sur lesquelles nous allons travailler proviennent, en partie, du MOOC Analyse des données multidimensionnelles sur la plateforme FUN1 Ce MOOC est proposé par François Husson, Jérôme Pagès et Magalie Houée-Bigot..

Les données sont issues d’un enquête du CREDOC publiée en 1974 par Nicole Tabard, intitulée “Besoins et aspirations des familles et des jeunes”2 Tabard N. (1974), Besoins et aspirations des familles et des jeunes, Caisse nationale des Allocations Familiales, Paris.. Le MOOC ne nous donne pas d’informations sur les circonstances dans lesquelles le questionnaire a été établi ni sur le nombre total de questions. Nous savons uniquement qu’il a porté sur 1724 femmes. L’AFC ne nous permettra pas d’analyser l’intégralité du questionnaire. De toute façon, nous allons nous focaliser sur une relation spécifique. Nous allons étudier l’articulation des réponses qualitatives à deux questions :

Le point de départ de l’analyse est le tableau de contingence reproduit ci-dessous. C’est ce type de données (les marges des totaux mis à part) que nous fournirons à la fonction de calcul de l’AFC.

Comme le souligne François Husson dans le MOOC, il est difficile de savoir à partir de ce tableau si les femmes sont favorables ou non au travail féminin. En effet, 908 femmes sur 1 724, soit 52 % ont répondu que la famille idéale est celle où “seul le mari travaille”. Elles sont néanmoins 1 123 sur 1 724 (65 %) à avoir répondu que l’activité convenant le mieux à une mère de famille quand ses enfants vont à l’école est de travailler à mi-temps. L’AFC va nous permettre d’étudier le lien entre ces deux questions et de lever cette apparente contradiction. Elle va notamment nous permettre de visualiser la nature de la liaison entre les deux questions. Mais qu’est ce qu’une liaison ?

Une liaison entre deux variables est l’écart entre les données observées et le modèle d’indépendance. Mettons pour l’instant de côté cette notion, nous y reviendrons plus tard.

Création du projet RStudio

Commençons par ouvrir le logiciel RStudio et par créer un nouveau projet depuis le menu File > New Project. Choisissons ensuite “New directory” > “Empty project” puis saisissons AFC-sous-R dans Directory name. Téléchargeons le fichier AnaDo_JeuDonnees_TravailFemme.csv du tableau de contingence et plaçons-le dans le répertoire “AFC-sous-R”. Créons ensuite notre script R depuis File > New file > R script.

Définir la localisation du répertoire de travail

Il est très important, d’emblée, de définir le répertoire de travail. Il existe une commande getwd() qui permet d’afficher la localisation du répertoire de travail sous la forme d’un chemin absolu :

getwd()
## [1] "/Users/ubo/Documents/Recherche/R/AFC-sous-R"

La définition du répertoire de travail peut aussi être faite par le biais de la commande Set As Working Directory via l’onglet More3 Emplacement de l’onglet More. Cet onglet correspond au symbole de la roue crantée dans la fenêtre en bas à droite de RStudio.

Importation du jeu de données

Nous lisons ensuite le fichier CSV à partir de la fonction read.table() :

wfemmes <- read.table("AnaDo_JeuDonnees_TravailFemme.csv",
           header=TRUE, row.names=1, sep=";", check.names=FALSE,
           fileEncoding="latin1")

Afin de faciliter, par la suite, la lecture et l’emploi du jeu de données, nous stockons le résultat dans la variable wfemmes.

Nous pouvons, très facilement et à n’importe quel moment, afficher le tableau de contingence wfemmes à partir du volet Data4 Emplacement du tableau de contingence dans la fenêtre en haut à droite de RStudio.

Seules les trois premières colonnes du jeu de données sont utilisées ici. Nous avons donc besoin de suppprimer les colonnes dont nous n’aurons pas l’utilité. Plus spécifiquement, nous n’allons sélectionner que les trois premières colonnes avec la commande suivante :

wfemmes <- wfemmes[1:3]

Dans cette commande :

Nous pouvons voir que, dans le volet Data dans la fenêtre en haut à droite de RStudio, le nombre de variables affichées a été réduit5 Réduction du nombre de variables.

Afin d’amliorer la lecture du tableau et, par la suite, du graphique, nous allons renommer les modalités des deux variables grâce à la fonction dimnames() :

dimnames(wfemmes)[[1]][1]<-"Les 2 conjoints travaillent"
dimnames(wfemmes)[[1]][2]<-"Travail du mari plus absorbant"
dimnames(wfemmes)[[1]][3]<-"Seul le mari travaille"
dimnames(wfemmes)[[2]][1]<-"Rester au foyer"
dimnames(wfemmes)[[2]][2]<-"Travail à mi-temps"
dimnames(wfemmes)[[2]][3]<-"Travail à plein-temps"

Pour la fonction dimnames() :

Suivant cette logique, lorsque nous écrivons, par exemple, (dimnames(wfemmes)[[2]][3]<-"..."), cela signifie que nous allons renommer la troisième modalité en colonne.

Notez que nous pouvons calculer sous R les marges lignes et les marges colonnes du tableau de contingence de la manière suivante :

Rester au foyer Travail à mi-temps Travail à plein-temps Total
Les 2 conjoints travaillent 13 142 106 261
Travail du mari plus absorbant 30 408 117 555
Seul le mari travaille 241 573 94 908
Total 284 1123 317 1724

Affichons ce tableau de manière plus agréable :

Rester au foyer Travail à mi-temps Travail à plein-temps Total
Les 2 conjoints travaillent 13 142 106 261
Travail du mari plus absorbant 30 408 117 555
Seul le mari travaille 241 573 94 908
Total 284 1123 317 1724

Il est aussi intéressant de calculer les pourcentages en ligne et les pourcentages en colonne avec la librairie Rcmdr.

wf_ligne <- wfemmes
wf_ligne[nrow(wf_ligne)+1, ] <- colSums(wf_ligne)
row.names(wf_ligne)[nrow(wf_ligne)] <- "Profil ligne moyen"
wf_ligne <- rowPercents(wf_ligne)
Rester au foyer Travail à mi-temps Travail à plein-temps Total Count
Les 2 conjoints travaillent 5.0 54.4 40.6 100 261
Travail du mari plus absorbant 5.4 73.5 21.1 100 555
Seul le mari travaille 26.5 63.1 10.4 100 908
Profil ligne moyen 16.5 65.1 18.4 100 1724

Pour rappel, la ligne “Profil ligne moyen” correspond à la répartition en pourcentage des modalités à la question sur “l’activité qui convient le mieux à une mère de famille quand les enfants vont à l’école”, quelque soit la réponse à la question sur la famille idéale. Le profil ligne moyen peut être comparé aux profils lignes (la répartition en pourcentages ou la distribution de probabilité d’une modalité en ligne). Ici, aucun des trois profils lignes n’est proche du profil ligne moyen.

Calculons maintenant le tableau des pourcentages en colonne.

wf_colonne <- wfemmes
wf_colonne$Total <- rowSums(wf_colonne)
wf_colonne <- colPercents(wf_colonne)
dimnames(wf_colonne)[[2]][4] <- "Profil colonne moyen"
Rester au foyer Travail à mi-temps Travail à plein-temps Profil colonne moyen
Les 2 conjoints travaillent 4.6 12.6 33.4 15.1
Travail du mari plus absorbant 10.6 36.3 36.9 32.2
Seul le mari travaille 84.9 51.0 29.7 52.7
Total 100.1 99.9 100.0 100.0
Count 284.0 1123.0 317.0 1724.0

Ce tableau permet de constater que la répartition des réponses sur la famille idéale pour la modalité “Travail à mi-temps” est le plus proche de la répartion des réponses à la question sur la famille idéale. Autrement dit, le profil colonne “Travail à mi-temps” est le profil colonne le plus proche du profil colonne moyen. Cette similitude se traduira sur le graphe de l’AFC comme nous le verrons plus loin.

Nous verrons également que l’on passera en paramètre à la fonction R de calcul de l’AFC, le tableau de contingence. Mais l’AFC travaille en réalité sur le tableau de probabilités que l’on peut calculer en divisant les valeurs du tableau de contingence par le nombre d’individus (on effectue le calcul sur le tableau de contingence avec marge pour mieux constater que l’effectif total du tableau de probabilité est bien égal à 1, ce qui est la marque d’une distribution de probabilités) :

wfemmes_tableau_de_probabilite <- wf_marges / 1724
Rester au foyer Travail à mi-temps Travail à plein-temps Total
Les 2 conjoints travaillent 0.0075406 0.0823666 0.0614849 0.1513921
Travail du mari plus absorbant 0.0174014 0.2366589 0.0678654 0.3219258
Seul le mari travaille 0.1397912 0.3323666 0.0545244 0.5266821
Total 0.1647332 0.6513921 0.1838747 1.0000000

Rappellons que notre objectif est de visualiser la nature de la liaison entre deux variables qualitatives. Mais faut-il encore que cette liaison soit significative.

Pour ce faire, nous réalisons un test du Khi2.

Test du Khi2

Le test du khi2 mesure la significativité d’une liaison mais pas son intensité. Afin de réaliser ce test du khi2, nous utilisons une fonction fournie de base avec le logiciel R. Il s’agit de la fonction chisq.test. Il n’est pas nécessaire d’installer une librairie supplémentaire afin de réaliser ce test.

chisq.test(wfemmes)
## 
##  Pearson's Chi-squared test
## 
## data:  wfemmes
## X-squared = 233.43, df = 4, p-value < 2.2e-16

Le terme X-squared est à lire Khi2 soit Khi au carré. La fonction chisq.test nous donne, entre autres, la valeur du Khi2 qui est un indicateur de la significativité de la liaison. Mais ce qui nous interesse ici est la p-value. Nous voyons ici que la p-value est inférieure à 2,2x10-16. Cela signifie que la probabilité que les variables soient indépendantes est inférieure à 2,2x10-16. Ce qui nous permet de rejeter l’hypothèse d’indépendance entre les deux variables. Pour autant, cela ne veut pas dire que les variables soient dépendantes. Les réponses à la question sur la famille idéale sont probablement liées aux réponses concernant l’activité convenant le mieux à une mère de famille dont les enfants vont à l’école.

Test du Khi2 - Explications

Le test du khi2 permet de déterminer la probabilité que les deux variables d’un tableau de contingence soient indépendantes, c’est-à-dire qu’il n’existe pas de relation entre les modalités en ligne et les modalités en colonne (les unes ne conditionnent pas les autres, et réciproquement). Dit autrement et comme le rappelle très clairement Julien Barnier, cela veut dire que le “fait d’appartenir à une modalité de la première variable n’a pas d’influence sur la modalité d’appartenance de la deuxième variable”6 Pour plus de précisions, vous pouvez vous reporter à cette page : https://alea.fr.eu.org/pages/khi2. Dans ce test, l’hypothèse nulle (H0) suppose qu’il y a indépendance entre les deux variables. Si nous acceptons l’hypothèse d’indépendance (H0), nous n’aurons pas d’utilité à réaliser une AFC car les points projetés seront extrêmement proches ou confondus avec le centre de gravité, confondus avec le centre du graphe. Si nous rejetons l’hypothèse d’indépendance (p-value < 0,05), l’hypothèse alternative (H1) suppose que la liaison entre les deux variables est significative sans que nous puissions définir l’intensité de la liaison.

Rappelons que pour que le test du khi2 soit opératoire, il doit respecter un certain nombre de conditions7 Claude Grasland détaille davantage son propos sur cette page : http://grasland.script.univ-paris-diderot.fr/STAT98/stat98_8/stat98_8.htm :

Du fait que nous ayons obtenu une p-value inférieure à 2,2x10-16 et, par extension, inférieure au seuil de 0,05, nous rejetons l’hypothèse d’indépendance entre les deux variables.

Comme le résultat est significatif, tout en respectant les conditons de validité du test du khi2, nous stockons le résultat de la fonction dans la variable khi2wfemmes.

chisq.test(wfemmes) -> khi2wfemmes

Test du Khi2 - Aide à l’interprétation

Le test du khi2 est symétrique. Les lignes et les colonnes du tableau croisé sont interchangeables. Le résultat du test sera exactement le même. Il n’y a pas de “sens de lecture” du tableau.

Nous pouvons afficher le tableau de contingence d’origine (tableau des données observées) en sélectionnant la valeur observed.

Rester au foyer Travail à mi-temps Travail à plein-temps
Les 2 conjoints travaillent 13 142 106
Travail du mari plus absorbant 30 408 117
Seul le mari travaille 241 573 94

De la même manière, nous pouvons afficher le tableau d’indépendance (tableau des effectifs théoriques) en sélectionnant la valeur expected. Dans ce contexte, nous calculons le tableau des pourcentages théoriques, en multipliant pour chaque case la proportion observée dans la population des deux modalités correspondantes. Puis, le tableau des effectifs théoriques se calcule en multipliant le tableau des pourcentages théoriques par l’effectif total.

Pour plus de détails, nous vous recommandons la lecture de ce document8 Barnier J. (2016), Tout ce que vous n’avez jamais voulu savoir sur le Khi2 sans jamais avoir eu envie de le demander, https://alea.fr.eu.org/pages/khi2.

Rester au foyer Travail à mi-temps Travail à plein-temps
Les 2 conjoints travaillent 42.99536 170.0133 47.9913
Travail du mari plus absorbant 91.42691 361.5226 102.0505
Seul le mari travaille 149.57773 591.4640 166.9582

Le tableau des effectifs théoriques n’a que peu d’intérêt en lui-même mais en a davantage comparativement au tableau des données observées.

Nous pouvons aussi afficher le tableau des résidus (tableau des écarts à l’indépendance) en sélectionnant la valeur residuals. Un résidu positif signifie que les effectifs dans la case sont supérieur à ceux attendus sous l’hypothèse d’indépendance. Et l’inverse pour un résidu négatif.

Rester au foyer Travail à mi-temps Travail à plein-temps
Les 2 conjoints travaillent -4.574496 -2.148441 8.373594
Travail du mari plus absorbant -6.424239 2.444409 1.479859
Seul le mari travaille 7.475127 -0.759211 -5.646384

Exprimé d’une autre manière, l’écart à l’indépendance représente l’écart entre l’effectif observé et l’effectif théorique, et ceci pour chacune des cases du tableau de contingence. D’ailleurs, l’écart à l’indépendance “est un effectif et c’est un invariant, indépendant du choix des lignes et des colonnes (c’est la différence entre l’effectif observé et l’effectif théorique : le résultat est donc un effectif).”9 Cibois P. (2003), “Les écarts à l’indépendance. Techniques simples pour analyser des données d’enquête”, Sciences Humaines, https://www.scienceshumaines.com/textesInedits/Cibois.pdf.

Par ailleurs,

Plus la valeur de l’écart à l’indépendance est importante, plus l’attraction/opposition entre les modalités est forte.

Rappel de l’objectif

Notre objectif est bien de visualiser la nature de la liaison entre les deux variables qualitatives. Sachant qu’une liaison correspond à l’écart entre les données observées et le modèle d’indépendance, nous souhaitons donc visualiser la nature de l’écart à l’indépendance entre deux variables qualitatives.

Par ailleurs, il y a trois façons de caractériser la liaison entre les deux variables qualitatives.

Chargement des packages

Le test du Khi2 a permis d’écarter l’hypothèse d’indépendance. Il y a donc une liaison entre les modalités des deux variables. De fait, nous pouvons faire une AFC pour visualiser la nature de la liaison. Pour notre part, nous avons choisi d’utiliser le package FactoMineR (dédié à l’analyse multidimensionnelle de données) mais il y en existe d’autres qui peuvent être utilisés pour réaliser ce type de méthode statistique.

Nous chargeons donc la librairie FactoMineR permettant de réaliser plusieurs analyses de données multi-dimentionnelles (AFC, ACP, ACM, etc.).

library (FactoMineR)

AFC - Les résultats

Lors du précédent test du khi2, nous avons obtenu une p-value inférieure à 2,2x10-16. Nous avons donc rejeté l’hypothèse d’indépendance entre les deux variables et admis que la liaison entre ces deux variables est signficative.

Nous sommes en droit de réaliser une AFC afin de visualiser la nature de la liaison. Pour ce faire, nous allons employer la fonction CA(), fournie par le package FactoMineR que nous venons de charger. Précédemment, nous avons stocké notre jeu de données dans la variable wfemmes. Nous exécutons une analyse factorielle des correspondances (AFC) sur notre jeu de données de la manière qui suit :

afcwfemmes <- CA(wfemmes)

Afin de faciliter, par la suite, la lecture et l’emploi des résultats cette AFC, nous les stockons dans la variable afcwfemmes.

Revenons un instant sur ce fameux tableau 37, issu de l’enquête de Nicole Tabard, croisant les deux variables (questions) :

Il est important de rappeler que les résultats de cette enquête ont été publiés en 197410 Rappel du tableau de contigence