2AFC TP Python
2AFC TP Python
simplifier - propose une vision synthétique des informations « saillantes » portées par un
tableau de contingence. Elle permet de débroussailler rapidement les grands tableaux. Son
pouvoir de séduction repose en grande partie sur les représentations graphiques qu’elle propose.
Elles nous permettent de situer facilement les similarités (dissimilarités) entre les profils et les
attractions (répulsions) entre les modalités. L’AFC est bien une technique factorielle. Les
facteurs – les variables latentes – qui en sont issus sont des combinaisons linéaires des points
Techniquement, on peut voir l’AFC comme une méthode d’ajustement des nuages de profils
lignes et colonnes, permettant leur représentation simultanée, c.-à-d. dans le même repère.
l’indépendance. Ce prisme est intéressant parce qu’il montre clairement qu’avant de nous
intéresser à la structure des écarts, il est très important de considérer leur importance et se
Enfin, si l’AFC s’applique en priorité sur les tableaux de contingence (tableau de comptage). Elle
est en réalité valable dès lors que les valeurs sont positives, que les notions de marges (sommes
en ligne et colonne) et profils (ratios en ligne et colonne) ont un sens dans le tableau que nous
analysons.
Pour illustrer notre propos, nous utilisons la base « CSP Filières » qui est le fruit d’une enquête
où l’on a croisé l’origine sociale des étudiants (à travers la CSP – catégorie social professionnelle,
version très simplifiée - des parents) avec les choix de filières à l’Université. Elle est tirée de la
Figure 98 - CSP et Choix de filières avec les marges – Tableau des effectifs observés
qualitatives (mais il peut être plus riche comme nous le verrons dans la section 4.5). On cherche
différentes manières :
1. Quelle est la structure des filières choisies selon la CSP ? On parle alors de profil ligne.
2. Est-ce que la structure est différente d’une CSP à l’autre ? Nous matérialisons les écarts à
3. Nous pouvons mener la même étude mais sous l’angle des profils colonnes : les compositions
4. Nous pouvons enfin étudier les associations et répulsions entre CSP et filières : certaines
CSP ont-elles une préférences pour certaines filières ? Des filières spécifiques attirent-elles
Nous pouvons compléter les marges en ligne et colonnes en effectuant la somme des effectifs.
Il s’agit de la partie grisée de notre tableau ci-dessus (Figure 98). Nous disposons de (n = 3874)
filière « Droit », etc. Dans ce chapitre, nous utiliserons les notations suivantes pour représenter
Y/X x1 xl xL
y1
yk nkl nk .
yK
n.l n
Nous pouvons utiliser les fréquences relatives pour estimer les différentes probabilités :
1825
5. 𝑃(𝐶𝑎𝑑𝑟𝑒. 𝑆𝑢𝑝) = 3784 = 48.2% est la proportion des enfants de « Cadre.Sup » ;
1411
6. 𝑃(𝑀é𝑑𝑒𝑐𝑖𝑛𝑒) = = 37.3% est la proportion des étudiants qui ont fait le choix de la filière
3784
« Médecine ».
876
7. 𝑃(𝑀é𝑑𝑒𝑐𝑖𝑛𝑒 & 𝐶𝑎𝑑𝑟𝑒. 𝑆𝑢𝑝) = 3784 = 23.2% est la proportion de personnes qui ont choisi
d’une association.
876
8. 𝑃(𝑀é𝑑𝑒𝑐𝑖𝑛𝑒 / 𝐶𝑎𝑑𝑟𝑒. 𝑆𝑢𝑝) = 1825
= 48.0% est la proportion de personnes qui ont choisi
« Médecine » parmi les enfants de « Cadres.Sup ». On serait plutôt sur une idée de
causalité.
Dans ce qui suit, nous étudions les différentes manières d’explorer ces proportions, qui sont
Python. Comme de coutume, nous retraçons les calculs sous Python. Nous chargeons la feuille
#librairie
import numpy
Le premier prisme consiste à analyser les profils lignes – les proportions en ligne – du tableau
𝑛𝑘𝑙
𝑃(𝑋 = 𝑙 / 𝑌 = 𝑘) =
𝑛𝑘.
962
1. P(Sciences) = 3784 = 25.4%, la proportion de personnes qui ont choisi la filière « Sciences ».
Deux types de questions peuvent être posés au regard de ce mode de présentation des données :
(1) Est-ce que les structures de choix sont les mêmes d’un CSP à l’autre, on parle de distances
entre profils (section 4.1.2.2) ; (2) Est-ce que la structure de choix d’un CSP est différent de la
structure globale, sans distinction de CSP, on parle de distance à l’origine (section 4.1.2.3).
Nous calculons ces proportions en ligne sous Python, que nous agrémentons à l’aide d’une
#profils lignes
prof_lig = numpy.apply_along_axis(arr=D.values,axis=1,func1d=lambda x:x/numpy.sum(x))
print(prof_lig)
#représentation graphique
import matplotlib.pyplot as plt
somme = numpy.zeros(shape=(prof_lig.shape[0]))
for i in range(prof_lig.shape[1]):
plt.barh(range(prof_lig.shape[0]),prof_lig[:,i],left=somme)
somme = somme + prof_lig[:,i]
plt.yticks(range(prof_lig.shape[0]),D.index)
plt.show()
Figure 101 - Structure des choix de filières selon les CSP - Données "CSP - Filières"
« Cadres.Sup » pour la « Médecine ». Par rapport aux autres catégories, les « ouvriers » et
« exploitants agricoles » s’investissent plus dans les IUT. Etc. Le rôle de l’AFC justement sera
de mettre en évidence les différences entre les profils et d’identifier les éventuelles
Distance entre profils. La distance entre profils met en exergue les différences entre
proportions en exacerbant celles qui ont trait aux modalités rares. Le même écart est d’autant
plus marquant qu’il concerne une modalité peu représentée. On parle de distance du KHI-2 (𝜒 2) :
𝐿
1 𝑛𝑘𝑙 𝑛𝑘′𝑙 2
𝑑2 (𝑘, 𝑘 ′ ) = ∑ 𝑛 ( − )
.𝑙 𝑛𝑘. 𝑛𝑘 ′ .
𝑙=1 𝑛
𝑑 2 (𝑐𝑎𝑑𝑟𝑒, 𝑜𝑢𝑣𝑟𝑖𝑒𝑟)
1 1 1
= (0.258 − 0.270)2 + (0.219 − 0.314)2 + (0.480 − 0.207)2
0.272 0.254 0.373
1
+ (0.043 − 0.210)2 = 0.5109
101
𝑑 2 (𝑐𝑎𝑑𝑟𝑒, 𝑝𝑎𝑡𝑟𝑜𝑛)
1 1 1
= (0.258 − 0.292)2 + (0.219 − 0.238)2 + (0.480 − 0.362)2
0.272 0.254 0.373
1
+ (0.043 − 0.108)2 = 0.0846
101
On en conclut que la structure des choix de filières des enfants de cadres est plus proche
(similaire) de celle des cadres supérieurs qu’elle ne l’est de celle des enfants d’ouvrier.
Ces distances sont très faciles à produire sous Python, merci à la librairie Numpy.
0.510900786777672
0.08461088232967051
Distances par paires des profils. Nous pouvons dès lors approfondir l’analyse en calculant les
#double boucle
for i in range(prof_lig.shape[0]-1):
for j in range(i+1,prof_lig.shape[0]):
distPairesLig[i,j] = numpy.sum((prof_lig[i,:]-prof_lig[j,:])**2/prof_marg_lig)
#distPairesLig[j,i] = distPairesLig[i,j]
#affichage
print(pandas.DataFrame(distPairesLig,index=D.index,columns=D.index))
Une représentation graphique sous forme de « heatmap » donne une vision globale des écarts.
Figure 102 - Distances (au carré) entre les paires de modalités lignes - Données "CSP Filières"
proches (Figure 102). Il en est de même aussi, à un degré moindre cependant, entre les patrons
et les employés. Finalement, il n’y a que les cadres supérieurs qui la ramènent avec des
préférences qui les démarquent fortement des autres, en particulier des ouvriers et des
exploitants agricoles.
Analyse factorielle des correspondances. Pour l’analyse des grands tableaux, lorsque le
nombre de modalités lignes est élevé, comparer les profils (Figure 101) et inspecter les distances
par paires (Figure 102) deviennent rapidement inextricables. L’AFC a pour objectif de produire
un repère factoriel qui rend compte du positionnement relatif des modalités à l’aide de
Le profil marginal, la partie grisée dans le tableau de la Figure 100, correspond à la structure de
choix dans distinction de CSP. Il représente le « profil moyen » c.-à-d. la moyenne pondérée
1029
des profils lignes. Par exemple, la P(droit) = 3784 = 0.272 comme définit plus haut, mais elle peut
302 × 0.265 + 575 × 0.292 + 1825 × 0.258 + 467 × 0.310 + 615 × 0.270
𝑃(𝑑𝑟𝑜𝑖𝑡) = = 0.272
3784
Remarque : Cela veut dire aussi que si une modalité ligne est surreprésentée dans le fichier, elle
La distance à l’origine est tout simplement la distance au profil moyen. Pour les enfants de
1 1 1
𝑑 2 (𝑐𝑎𝑑𝑟𝑒) = (0.258 − 0.272)2 + (0.219 − 0.254)2 + (0.480 − 0.373)2
0.272 0.254 0.373
1
+ (0.043 − 0.101)2 = 0.0693
0.101
Nous obtenons le tableau suivant en calculant les distance à l’origine des CSP :
Nous remarquons par exemple que les enfants d’ouvriers et d’exploitants agricoles présentent
des structures de choix (profils) les plus différentes de l’ensemble (la moyenne) des étudiants.
4.1.2.4 Inertie
L’inertie traduit la quantité d’information portée par une modalité. Elle est définie par le produit
#distance à l'origine
distoLig = numpy.apply_along_axis(arr=prof_lig,axis=1,func1d=lambda x:numpy.sum((x
-prof_marg_lig)**2/prof_marg_lig))
#affichage
print(pandas.DataFrame(distoLig,index=D.index))
0
CSP_vs_Filiere
ExpAgri 0.170350
Patron 0.003311
CadreSup 0.069302
Employe 0.030113
Ouvrier 0.205492
#affichage
print(pandas.DataFrame(numpy.transpose([distoLig,poidsLig,inertieLig]),columns=['D
isto2','Poids','Inertie'],index=D.index))
Nous notons par exemple que les enfants des exploitants agricoles ont certes un profil différent
(distance à l’origine), mais sont peu représentés (poids), leur inertie ne se démarque pas
vraiment. A contrario, les « cadres.sup » ne sont pas si différents, mais nombreux, ils pèseront
Somme des inerties. La somme des inerties – l’inertie totale - représente la quantité
d’information disponible dans les données. C’est un indicateur fondamental. Chaque facteur
Pour les données « CSP Filières », l’inertie totale - que nous noterons 𝜙 2, nous comprendrons
#total inertie
tot_InertieLig = numpy.sum(inertieLig)
print(tot_InertieLig)
0.08463685828547157
Principe. L’AFC a pour mission de produire une successions de facteurs – des axes factoriels,
combinaisons linéaires des profils - qui permettent de positionner les modalités de la manière la
plus dispersée possible. Les facteurs sont deux à deux orthogonaux parce que le qème facteur est
De ce point de vue, l’AFC se présente comme une ACP où les individus sont les modalités lignes,
décrit par les profils lignes, et pondérés par les effectifs totaux des lignes.
𝐾
𝑛𝑘. 2
𝜆1 = ∑ × 𝐹𝑘1
𝑛
𝑘=1
propre.
𝜆1
La quantité ( ) indique la crédibilité du facteur. Il représente la part de d’inertie qu’il restitue.
𝜙2
Lorsque nous avons produit l’ensemble des facteurs, leur nombre maximal est égal à min (𝐾 −
∑ 𝜆ℎ = 𝜙 2
ℎ=1
(𝑎ℎ1 , 𝑎ℎ2 , … , 𝑎ℎ𝐿 ) – nous verrons comment dans la section 4.2 - qui permet de calculer la
coordonnée de la modalité (𝑦𝑘 ) à partir de son profil ligne. Pour le premier facteur par exemple,
les coefficients fournis par l’AFC sont (0.098, 0.559, -1.056, 2.230). Sachant que les coordonnées
– son profil ligne – de la modalité « Cadres.Sup » sont (0.258, 0.219, 0.480, 0.043) (Figure 100),
Nous positionnons ainsi les différentes modalités lignes sur le premier facteur :
Figure 104 - Position des modalités lignes sur le 1er facteur de l'AFC - Données "CSP Filières"
dessus (Figure 101 et Figure 102) : les « Cadres.Sup » représentent un profil spécifique,
différent (éloigné) des autres ; les enfants d’exploitants agricoles et d’ouvrier sont proches sur
le 1er facteur, ils présentent des profils – structures de choix de filières – similaires.
Calculs sous Python. Nous réalisons une AFC avec le package « fanalysis » que nous
présenterons plus en détail plus loin (section 4.3). Nous affichons les valeurs propres.
#importation de la librairie
from fanalysis.ca import CA
Nous observons pour chaque ligne de la matrice « eig_ »: les valeurs propres des [min(5-1, 4-1)
= 3} facteurs, la fraction d’inertie restituée par facteur et cumulée. La variance du 1er facteur
0.08239
est égale à (𝜆1 = 0.08239), elle représente déjà ( = 97.35%) de l’inertie totale.
0.0846
Nous affichons ensuite les coordonnées des modalités lignes par facteur.
0 1 2
CSP_vs_Filiere
ExpAgri 0.410115 -0.026253 0.038284
Patron 0.020151 0.026585 -0.046881
CadreSup -0.262717 -0.015596 0.006199
Employe 0.142090 0.097326 0.021242
Ouvrier 0.451481 -0.039588 -0.009493
Pour le 1er facteur, vérifions que la moyenne pondérée des coordonnées est bien nulle.
6.938893903907228e-17
0.0823936025778933
Nous représentons les individus lignes dans le premier plan factoriel qui restitue 99.36% de
for i in range(D.shape[0]):
ax.text(afc.row_coord_[i,0],afc.row_coord_[i,1],D.index[i])
plt.show()
Figure 105 - Position des modalités lignes dans le plan - AFC - Données "CSP Filières"
La distance du 𝜒 2 entre les modalités lignes dans l’espace initial devient distance euclidienne
dans l’espace factoriel. Et comme en ACP (concernant la distance entre individus), la restitution
est parfaite lorsque nous utilisons tous les facteurs. Nous avons une approximation en revanche
si nous n’en utilisons qu’une partie, sa précision dépend d’une part de la qualité de restitution
du repère factoriel choisi, d’autre part de la qualité de représentation des modalités impliquées
dans le calcul (on retrouve les fameux COS2, mais calculés différemment dans le cadre de l’AFC).
Pour les (q) premiers facteurs, la distance entre deux modalités lignes s’écrit :
𝑞
2
𝑑{𝐹 (𝑘, 𝑘 ′ ) = ∑(𝐹𝑘ℎ − 𝐹𝑘 ′ ℎ )2
1 ,…,𝐹𝑞 }
ℎ=1
2
𝑑{𝐹1}
(𝑐𝑎𝑑𝑟𝑒, 𝑜𝑢𝑣𝑟𝑖𝑒𝑟) = (−0.26272 − 0.45148)2 = 0.5101
2
𝑑{𝐹1}
(𝑐𝑎𝑑𝑟𝑒, 𝑝𝑎𝑡𝑟𝑜𝑛) = (−0.26272 − 0.02015)2 = 0.0800
CSP Exp.agri Patron Cadre.sup Employé Ouvrier CSP Exp.agri Patron Cadre.sup Employé Ouvrier
Exp.agri 0 0.1621 0.4538 0.0874 0.0042 Exp.agri 0 0.1521 0.4527 0.0718 0.0017
Patron 0 0.0846 0.0245 0.1918 Patron 0 0.0800 0.0149 0.1860
Cadre.sup 0 0.1768 0.5109 Cadre.sup 0 0.1639 0.5101
Employé 0 0.1154 Employé 0 0.0957
Ouvrier 0 Ouvrier 0
Distance du KHI-2 entre modalités (tableau initial) Distance euclidienne entre modalités (1er facteur)
Figure 106 - Comparaison des distances exactes et approchées entre modalités - Données "CSP Filières"
En fond bleu, les distances plutôt bien estimées, elles concernent les modalités situées aux
extrémités du 1er facteur, celles qui sont bien représentées comme nous le constaterons plus
loin (section 4.3.2). En fond rose, les distances mal restituées, elles concernent les modalités
#double boucle
for i in range(prof_lig.shape[0]-1):
for j in range(i+1,prof_lig.shape[0]):
distPairesLigF1[i,j] = numpy.sum((afc.row_coord_[i,0]-afc.row_coord_[j,0])**2)
#affichage
print(pandas.DataFrame(distPairesLigF1,index=D.index,columns=D.index))
Nous pouvons mener la même analyse sur les profils colonnes du tableau de données :
𝑛𝑘𝑙
𝑃(𝑌 = 𝑘 / 𝑋 = 𝑙) =
𝑛.𝑙
1. P(Cadres.Sup) = 48.2%
La question en filigrane ici est : Observe-t-on les mêmes structures de CSP dans les filières ?
De fait, nous allons à l’essentiel dans cette section. La distance du 𝜒 2 entre profils s’écrit :
𝐾
2 (𝑙, ′ )
1 𝑛𝑘𝑙 𝑛𝑘𝑙′ 2
𝑑 𝑙 =∑𝑛 ( − )
𝑘. 𝑛.𝑙 𝑛.𝑙′
𝑘=1 𝑛
Par exemple,
1 1
𝑑 2 (𝑑𝑟𝑜𝑖𝑡, 𝑠𝑐𝑖𝑒𝑛𝑐𝑒𝑠) = (0.078 − 0.103)2 + (0.163 − 0.142)2 + ⋯ = 0.024
0.080 0.152
1 1
𝑑 2 (𝑑𝑟𝑜𝑖𝑡, 𝑚é𝑑𝑒𝑐𝑖𝑛𝑒) = (0.078 − 0.046)2 + (0.163 − 0.147)2 + ⋯ = 0.118
0.080 152
Le profil sociologique des étudiants en « droit » est plus proche de ceux en « sciences » qu’en
« médecine ».
De la même manière que pour les profils lignes, nous pouvons calculer les distances à l’origine
(représenté par la marge colonne du tableau de la Figure 107), les poids (des colonnes) et les
#affichage
print(pandas.DataFrame(distoCol,index=D.columns))
0
Droit 0.004738
Sciences 0.027168
Medecine 0.092792
IUT 0.414466
En comparant son profil avec le profil marginal, nous notons une surreprésentation des enfants
0
Droit 0.271934
Sciences 0.254228
Medecine 0.372886
IUT 0.100951
#inertie
inertieCol = distoCol*poidsCol
print(pandas.DataFrame(inertieCol,index=D.columns))
0
Droit 0.001288
Sciences 0.006907
Medecine 0.034601
IUT 0.041841
Les filières IUT et Médecine sont celles qui pèseront le plus dans l’analyse, mais pas pour les
mêmes raisons : la première parce que sa distance à l’origine est élevée, la seconde parce qu’elle
La somme des inerties des modalités colonnes (filières) est égale à 𝜙 2 = 0.0486,…
0.08463685828547156
analysons le même tableau qui porte la même quantité totale d’information, mais avec un prisme
Principe. L’objectif est toujours de produire une succession de facteurs, combinaisons linéaires
des profils, qui étalent au mieux les modalités colonnes. Si on s’en tient au premier facteur, la
𝐿
𝑛.𝑙 2
𝜆1 = ∑ × 𝐺𝑙1
𝑛
𝑙=1
1. Les 𝐺𝑙1 correspondent aux coordonnées des modalités colonnes (les filières) sur le 1er facteur.
3. La variance 𝜆1 calculée ici coïncide avec celle calculée pour les modalités lignes, nous parlons
Nous reprenons le calcul avec la librairie « fanalysis », nous affichons les coordonnées des
modalités colonnes (les filières) pour les 3 facteurs de l’AFC sur les données « CSP Filières ».
0 1 2
Droit 0.027987 0.060669 -0.016545
Sciences 0.160462 0.002734 0.037583
Medecine -0.303125 -0.029662 -0.005200
IUT 0.640174 -0.060749 -0.030870
plt.show()
Figure 108 - Carte des modalités colonnes - 1er plan factoriel - Données "CSP Filières"
Les différenciations se jouent encore une fois essentiellement sur le 1er facteur. L’IUT présente
Remarque : Nous le verrons dans la section suivante, il est licite de fondre des cartes des
modalités lignes et colonnes dans un seul graphique et, dans un sens que nous préciserons,
Au-delà de la comparaison des profils, l’intérêt majeur de l’AFC est d’identifier les associations
entre les modalités lignes et colonnes. Est-ce que les enfants de « Cadres.Sup » sont plus attiré
par la « Médecine » que les autres ? Est-ce que les IUT exercent une attraction pour les enfants
Avant de s’intéresser aux relations entre les modalités, il faudrait déjà vérifier qu’il existe bien
une liaison exploitable entre les variables en ligne et colonne du tableau de contingence. La
statistique du 𝜒 2 de l’écart à l’indépendance, dite de Pearson, est l’outil privilégié pour ce faire.
observés (𝑛𝑘𝑙 ) avec les effectifs théoriques (𝑒𝑘𝑙 ) du tableau sous l’hypothèse (nulle)
version 2.1, avril 2020). Dans ce cas, le contenu du tableau est entièrement défini par ses marges.
En effet, sous H0, la probabilité conjointe est égale au produit des probabilités marginales :
𝑛𝑘. × 𝑛.𝑙
𝑒𝑘𝑙 =
𝑛
Au tableau des effectifs observés (Figure 98), nous opposons donc le tableau des effectifs sous
Figure 109 - Tableau des effectifs sous hypothèse d'indépendance - Données "CSP Filières"
Sous H0, elle suit une loi du 𝜒 2 à [(𝐾 − 1) × (𝐿 − 1)] degrés de liberté.
#effectifs totaux
n = numpy.sum(D.values)
#statistique du KHI-2
KHI2 = numpy.sum(((D.values-E)**2)/E)
print(KHI2)
320.2658717522244
#degré de liberté
ddl = (E.shape[0]-1)*(E.shape[1]-1)
print(ddl)
12
#p-value du test
print(1-scipy.stats.chi2.cdf(KHI2,ddl))
0.0
Le test conduit au rejet de l’hypothèse nulle (p-value ≈ 0). Manifestement, les variables CSP
Remarque : On émet souvent des restrictions quant à la validité de ce test : il faut que 80% des
cellules présentent en effectif théorique supérieur ou égal à 5, mais au-delà il faut surtout se
rendre compte que les faibles valeurs de (𝑒𝑘𝑙 ) peut gonfler exagérément la valeur de la
0 ≤ 𝜒 2 ≤ 𝑛 × min(𝐾 − 1, 𝐿 − 1)
En pratique, on procède à des normalisations pour disposer d’une mesure qui ne dépend pas des
effectifs :
𝜒 2 320.3
𝜙2 = = = 0.0846
𝑛 3784
− Le t de Tschuprow qui est une normalisation du 𝜙 2 par les degrés de liberté. Sous certaines
𝜙2 0.0846
𝑡=√ =√ = 0.1563
√(𝐾 − 1)(𝐿 − 1) √(5 − 1)(4 − 1)
𝜙2 0.0846
𝑣=√ =√ = 0.1680
min (𝐾 − 1, 𝐿 − 1) min (5 − 1,4 − 1)
L’indicateur qui nous intéresse au premier chef est le 𝜙 2 dans cette section. Il est égal à l’inertie
totale. Ainsi, l’information disponible dans le tableau, qui était présentée sous la forme d’une
dispersion des modalités autour du profil moyen, peut être également perçue sous l’angle de
l’association entre Y et X.
L’information globale associant les variables lignes et colonnes peut être dispatchée en
informations locales associant les modalités lignes et colonnes. Elles permettent d’approfondir
la nature de la liaison. Parmi les différents indicateurs disponibles, nous nous intéressons au
𝑛𝑘𝑙 − 𝑒𝑘𝑙
𝑟𝑘𝑙 =
√𝑒𝑘𝑙
Il suit très approximativement une loi normale centrée et réduite. La liaison entre deux modalités
de Y et X s’écarte significativement de l’indépendance lorsque |𝑟𝑘𝑙 | > 1.96 pour un test à 5%.
Mais le résidu standardisé nous intéresse surtout parce qu’il est directement impliqué dans le
calcul de la solution l’analyse factorielle des correspondances (section 4.2), et parce qu’il permet
En effet,
𝐾 𝐿
2
∑ ∑ 𝑟𝑘𝑙 = 𝜒2
𝑘=1 𝑙=1
de contingence,
2
𝑟𝑘𝑙
𝑐𝑘𝑙 = 2
𝜒
Pour les données « CSP Filières », voici le tableau des résidus standardisés (Figure 110) :
Premier commentaire important, le résidu standardisé est signé. Nous observons une attraction
entre les modalités lorsque (𝑟𝑘𝑙 > 0), une répulsion dans le cas inverse (𝑟𝑘𝑙 < 0).
que nous avions confusément pressentis lors de l’étude des profils lignes et colonnes – entre
(IUT & Ouvrier), (Médecine & Cadres.Sup) ; des répulsions tout aussi radicales entre (IUT &
Les contributions au 𝜒 2 ne sont pas signés. Elles permettent de hiérarchiser les couples de
modalités selon leur importance dans le tableau de contingence. Elles s’additionnent en ligne et
en colonne pour identifier les modalités porteuses d’information. Nous les avons exprimées en
Les contributions sont forcément en adéquation avec les résidus standardisés. Mais nous
observons de surcroit que les modalités les plus contributives en ligne sont « Cadres.Sup » et
L’indice d’attraction-répulsion est un autre indicateur qui permet d’approfondir la nature des
relations entre les modalités lignes et colonnes du tableau. Il est défini par le ratio :
𝑃(𝑌 = 𝑦𝑘 & 𝑋 = 𝑥𝑙 )
𝑃(𝑌 = 𝑦𝑘 ) × 𝑃(𝑋 = 𝑥𝑙 )
En pratique, nous le calculons par le rapport entre les effectifs observés et théoriques :
𝑜𝑘𝑙
𝑖𝑘𝑙 =
𝑒𝑘𝑙
Si l’indice est supérieur à 1, nous avons une attraction ; s’il est inférieur, nous avons une
𝐾 𝐿
𝐺 = 2 ∑ ∑ 𝑛𝑘𝑙 × ln(𝑖𝑘𝑙 )
𝑘=1 𝑙=1
Laquelle suit une loi du 𝜒 2 à [(K-1)(L-1)] degrés de liberté sous l’hypothèse d’indépendance.
Voici le tableau des indices pour les données « CSP Filières » (Figure 112) :
Figure 112 - Tableau des indices d'attractions et répulsions - Données "CSP Filières"
Les informations sont de même nature et cohérentes avec le tableau des résidus standardisés.
Le calcul de la statistique de test ne présente aucune difficulté sous Python. Les résultats sont
321.96365868622877
#degrés de liberté (4 x 3)
print(ddl)
12
0.0
vraisemblance, mise en avant du temps où les opérations à l’aide des tables de logarithmes ou
paraître très relatif. Les deux indicateurs sont le fruit de la confrontation entre les probabilités
conjointes et les produits des probabilités marginales. Ils produisent des résultats aux lectures
comparables. Son utilité sera plus évidente lorsque nous étudierons la reconstitution du tableau
des indices à partir des coordonnées factorielles des modalités lignes et colonnes (section
4.1.4.6). L’indice est en relation directe avec les positions relatives et par rapport à l’origine des
3 points de vue pour la même analyse. L’analyse factorielle des correspondances permet de
positionner les modalités lignes dans un repère factoriel. Il en est de même pour les modalités
colonne. Nous avons vu aussi que les facteurs (𝐹ℎ , 𝐺ℎ ) avaient le même pouvoir de
représentation. Nous irons plus loin dans cette section en affirmant qu’il s’agit en réalité des
mêmes facteurs et qu’il est possible de projeter les modalités lignes et colonnes dans le même
repère. Les proximités donnent alors des indications sur l’étude des attractions et répulsions,
factorielles des modalités lignes et colonnes sont liées par les relations de transition dites quasi-
barycentriques. En effet, sur un facteur (𝐹ℎ ) quelconque, il est possible d’obtenir les
coordonnées des modalités lignes (𝐹𝑘ℎ ) à partir des modalités colonnes (𝐺𝑙ℎ ) avec :
𝐿
1 𝑛𝑘𝑙
𝐹𝑘ℎ = ∑ × 𝐺𝑙ℎ
√𝜆ℎ 𝑛𝑘.
𝑙=1
Et inversement :
𝐾
1 𝑛𝑘𝑙
𝐺𝑙ℎ = ∑ × 𝐹𝑘ℎ
√𝜆ℎ 𝑘=1 𝑛.𝑙
- par son profil - des coordonnées de l’ensemble des modalités colonne (resp. ligne), déflaté par
Exemple. Prenons un exemple pour le 1er facteur (F1) où (𝜆1 = 0.08239), le profil – ligne – de
choix de filières des enfants d’ouvrier (5ème modalité ligne) est (Figure 100) :
Les coordonnées des modalités colonnes (𝐺1 ), les filières, sur ce 1er facteur est (Figure 108) :
1
𝐹51 = (0.270 × 0.02799 + 0.314 × 0.16046 + ⋯ ) = 0.45148
√0.08239
Nous retrouvons bien cette coordonnée des « Ouvrier » sur le 1er facteur de la carte des
Proximités entre les modalités lignes et colonnes. Ainsi, le rapprochement des coordonnées
des modalités lignes et colonnes est licite grâce à la relation quasi-barycentrique. Attention
faire que globalement c.-à-d. une modalité ligne doit être située par rapport à l’ensemble des
Nous représentons les modalités lignes et colonnes sur le 1er facteur pour approfondir ces idées
Figure 113 - Positions des modalités lignes et colonnes sur le 1er facteur - Données "CSP Filières"
1. (IUT, Ouvrier) sont proches sur le 1er facteur. Est-ce à dire que les enfants d’ouvriers
sont attirés par les IUT ? Réponse OUI. Parce que le point IUT est éloigné de l’ensemble
modalités lignes sauf de « Ouvrier » (et « Exp.Agricole » aussi d’ailleurs). Conclure à une
2. (Droit, Patron) sont proches sur le 1er facteur. Peut-on dire que les enfants de « Patron »
sont attirés préférentiellement par le « Droit » ? Réponse NON. Parce que « Patron »
est positionné quasiment au milieu de l’ensemble des filières. En réalité, ils (les enfants
Et surtout, ces conclusions sont confirmées par le tableau des indices d’attraction-répulsion
(Figure 112) – ou à défaut, le tableau des contributions au 𝜒 2 - que l’on devrait toujours avoir
sous la main quand on se lance dans l’interprétation des plans factoriels en AFC.
Représentation dans le plan. Forts de ces précautions, nous représentons les modalités lignes
et colonnes des données « CSP Filières » dans le premier plan factoriel (Figure 114). J’ai cerclé à
#représentation simultanée
fig, ax = plt.subplots(figsize=(10,10))
ax.axis([-0.7,+0.7,-0.7,+0.7])
ax.plot([-0.7,+0.7],[0,0],color='silver',linestyle='--')
ax.plot([0,0],[-0.7,+0.7],color='silver',linestyle='--')
ax.set_xlabel("Dim.1")
ax.set_ylabel("Dim.2")
plt.title("Carte des modalités lignes et colonnes")
#modalités ligne
for i in range(D.shape[0]):
ax.text(afc.row_coord_[i,0],afc.row_coord_[i,1],D.index[i],color='blue')
#modalités colonne
for i in range(D.shape[1]):
ax.text(afc.col_coord_[i,0],afc.col_coord_[i,1],D.columns[i],color='green')
plt.show()
partir des coordonnées factorielles des individus (section 1.4), nous pouvons approcher le tableau
des indices d’attraction-répulsion (𝑖𝑘𝑙 ) à partir des coordonnées factorielles des modalités lignes
et colonnes. La formule s’écrit comme suit si l’on prend en compte les H premiers facteurs :
𝐻
(𝐻) 𝐹𝑘ℎ × 𝐺𝑙ℎ
𝑖̂𝑘𝑙 =1+∑
ℎ=1
√𝜆ℎ
a. 2 modalités s’attirent (resp. se repoussent) si leurs coordonnées sont de même signe (resp.
b. Le trait est d’autant plus marqué que les valeurs des coordonnées sont élevées (en valeur
absolue) c.-à-d. que les points sont situés aux extrémités des facteurs.
c. Lesquelles coordonnées doivent être relativisées par le pouvoir de restitution du facteur (𝜆ℎ ).
A l’instar de l’ACP, la reconstitution du tableau des indices est parfaite si nous utilisons tous les
Exemple. Pour les données « CSP Filières », si l’on s’en tient au 1er facteur qui capte déjà 97.4%
effectuons le parallèle avec le tableau initial. Nous constatons que l’approximation est déjà de
très bonne tenue parce que le pouvoir de représentation du facteur est très bon (Figure 115).
Le calcul est aisé sous Python. Nous affichons pour contrôle les indices calculés précédemment
pour le test du rapport de vraisemblance (section 4.1.4.4). Nous affichons ensuite les indices
2
L’AFC permet de décomposer la quantité totale d’information (𝜒𝑡𝑜𝑡𝑎𝑙 ) en éléments additifs. En
effet, la reconstitution des données peut être étendue aux effectifs originels (𝑛𝑘𝑙 ). Si l’on prend
Nous pouvons dès lors calculer (1) l’information restituée par les H premiers facteurs…
2
(𝐻)
(𝑛̂𝑘𝑙 − 𝑒𝑘𝑙 )
2
𝜒(𝐻) = ∑∑
𝑒𝑘𝑙
𝑘 𝑙
2
(𝐻)
(𝑛𝑘𝑙 − 𝑛̂𝑘𝑙 )
2
𝜒𝑟𝑒𝑠𝑖𝑑𝑢𝑒𝑙 = ∑∑
𝑒𝑘𝑙
𝑘 𝑙
2 2 2
𝜒𝑡𝑜𝑡𝑎𝑙 = 𝜒(𝐻) + 𝜒𝑟𝑒𝑠𝑖𝑑𝑢𝑒𝑙
vs. les deux suivants dans notre support de cours consacré à l’AFC (COURS AFC, page 28). Pour
varier les plaisirs, nous réalisons – sous Python - les manipulations pour (H = 2) premiers
Pour rappel, nous affichons tout d’abord les effectifs (𝑒𝑘𝑙 ) sous H0, les coordonnées factorielles
des modalités lignes (𝐹𝑘ℎ ) et colonnes (𝐺𝑙ℎ ) dans le plan, les valeurs propres (𝜆ℎ ), et enfin la
#effectifs sous H0
print(E)
0 1
CSP_vs_Filiere
ExpAgri 0.410115 -0.026253
Patron 0.020151 0.026585
CadreSup -0.262717 -0.015596
Employe 0.142090 0.097326
Ouvrier 0.451481 -0.039588
0 1
Droit 0.027987 0.060669
Sciences 0.160462 0.002734
Medecine -0.303125 -0.029662
IUT 0.640174 -0.060749
[0.0823936 0.00170345]
320.2658717522244
Plusieurs étapes sont nécessaires pour obtenir les effectifs approchés du tableau de
contingence.
318.2232419212952
… et le 𝜒𝑟𝑒𝑠𝑖𝑑𝑢𝑒𝑙
2
sur le dernier.
#KHI2 résiduel
KHI2residuel = numpy.sum((D.values-est_n_plan)**2/E)
print(KHI2residuel)
2.0426298309291298
Nous effectuons la somme. Elle correspond bien à la quantité totale d’information véhiculée par
les données.
320.2658717522243
Mettre les mains dans le cambouis permet toujours de mieux appréhender la teneur des
méthodes. Concernant l’AFC, une solution simple consiste à appliquer un programme d’ACP aux
profils lignes (ou colonnes) en pondérant les modalités par les effectifs marginaux. Dans cette
section, nous préférons mettre en exergue une implémentation qui met en lumière la recherche
1
𝑀= 𝑅
√𝑛
Où R est la matrice des résidus standardisés dans ce contexte de l’AFC (section 4.1.4.3).
𝑀 = 𝑈 Δ 𝑉𝑇
Où :
orthonormée. Ils permettent d’obtenir les coordonnées factorielles des modalités lignes.
− Δ (K, L) est une matrice diagonale dont les éléments correspondent aux valeurs singulières.
𝑀 𝑣ℎ = 𝛿ℎ 𝑢ℎ
{ 𝑇
𝑀 𝑢ℎ = 𝛿ℎ 𝑣ℎ
− Les dispersions des modalités lignes sont maximales sur les facteurs. Il en est de même pour
a. La variance restitue par les facteurs, les valeurs propres, correspondent au carré des valeur
𝜆ℎ = 𝛿ℎ2
b. Les coordonnées des modalités lignes sont obtenues à partir des vecteurs de U
𝑢𝑘ℎ × 𝛿ℎ
𝐹𝑘ℎ =
𝑛𝑘.
√
𝑛
c. Les coordonnées des modalités colonnes sont obtenues à partir des vecteurs de V
𝑣𝑙ℎ × 𝛿ℎ
𝐺𝑙ℎ =
𝑛.𝑙
√
𝑛
Voyons tout cela sous Python. Nous essayons de retrouver à l’identique les résultats de l’objet
« afc » de la librairie « fanalysis » que nous avions instancié plus haut (section 4.1.2.5). Nous
calculons tout d’abord la matrice des résidus standardisés à partir des effectifs observés et
#matrice M
M = R/numpy.sqrt(n)
print(M)
Nous faisons ensuite appel à la fonction svd() de la librairie « Numpy » pour effectuer la
#valeurs singulières
print(sol[1])
Seules les 3 premières valeurs sont non-nulles, conformément à ce qui est attendu [le nombre
Nous les passons au carré et nous les comparons aux valeurs propres fournies par l’objet « afc »
#passés au carré
numpy.set_printoptions(suppress=True)
print(sol[1]**2)
Coordonnées des modalités lignes. Passons maintenant aux vecteurs singuliers à gauche.
Nous appliquons la formule pour produire les coordonnées factorielles des CSP, que nous
0 1 2
CSP_vs_Filiere
ExpAgri 0.410115 -0.026253 0.038284
Patron 0.020151 0.026585 -0.046881
CadreSup -0.262717 -0.015596 0.006199
Employe 0.142090 0.097326 0.021242
Ouvrier 0.451481 -0.039588 -0.009493
0 1 2
CSP_vs_Filiere
ExpAgri 0.410115 -0.026253 0.038284
Patron 0.020151 0.026585 -0.046881
CadreSup -0.262717 -0.015596 0.006199
Employe 0.142090 0.097326 0.021242
Ouvrier 0.451481 -0.039588 -0.009493
Coordonnées des modalités colonnes. La matrice des vecteurs singuliers à droite est le dernier
résultat à exploiter.
Nous appliquons la formule pour obtenir les coordonnées des « Filières ». Encore une fois, nous
0 1 2
Droit 0.027987 0.060669 -0.016545
Sciences 0.160462 0.002734 0.037583
Medecine -0.303125 -0.029662 -0.005200
IUT 0.640174 -0.060749 -0.030870
0 1 2
Droit 0.027987 0.060669 -0.016545
Sciences 0.160462 0.002734 0.037583
Medecine -0.303125 -0.029662 -0.005200
IUT 0.640174 -0.060749 -0.030870
bibliothèque de calcul matriciel. Pour ma part, je m’étais beaucoup appuyé sur l’excellente
Dans cette section, nous déroulons l’analyse complète en mettant en avant les fonctionnalités
comprendre les résultats numériques fournis par l’AFC, la possibilité de projeter une ligne ou
colonne supplémentaire dans le repère factoriel. Pour plus de clarté, nous recommençons
#numpy
import numpy
#effectif total
n = numpy.sum(D.values)
print(n)
3784
nous passons le tableau à traiter à la méthode fit(). Nous affichons les propriétés de l’objet.
#importation de la librairie
from fanalysis.ca import CA
#propriétés de l'objet
print(dir(afc))
Les valeurs propres sont fournies de 3 manières par « fanalysis » : les valeurs brutes, en
Règle de Kaiser. La règle de Kaiser est une approche simple pour identifier le nombre de
facteurs pertinents. Elle peut s’appliquer sur les valeurs propres brutes, dans ce cas le seuil
d’acceptation serait la moyenne des valeurs observées. Pour notre exemple « CSP Filières », il
est égal à :
La règle d’acceptation peut aussi s’appliquer aux pourcentages de variance restituée. Le seuil
1
devient ( × 100), soit :
𝐻𝑚𝑎𝑥
33.333333333
Ces deux approches sont totalement équivalentes. Seul le 1er facteur serait pertinent pour
décrire nos données « CSP Filières ». Nous en conserverons 2 quand-même ne serait-ce que
Scree plot. L’éboulis des valeurs propres est de mise également en analyse factorielle des
Pour notre exemple, le graphique n’est pas des plus déterminants au regard du faible nombre
Test statistique. Dans Saporta (2006, page 209) est décrit un test statistique pour tester la
significativité des (q) derniers facteurs. Malheureusement (TUTO 15, section 3.4.2), surtout si
nous travaillons sur des effectifs un tant soit peu élevés, il tend à sélectionner trop d’axes
factoriels. Finalement, les méthodes empiriques restent les plus utilisés en pratique.
Les informations sur les modalités lignes peuvent être regroupés dans une structure commune.
Coordonnées des points lignes. Nous savons comment ils sont calculés (section 4.2).
Contributions des modalités lignes aux facteurs – CTR. Elles qualifient l’influence relative
des modalités dans la définition des axes factoriels. La contribution d’une modalité correspond
à la fraction d’information qu’elle porte dans la variance restituée par le facteur (𝜆ℎ ).
𝑛𝑘. 2 𝑛𝑘. 2
𝐹𝑘ℎ
𝐶𝑇𝑅ℎ (𝑘) = 𝑛 = 𝑛 𝐹𝑘ℎ
𝑛𝑘. 2 𝜆ℎ
∑𝐾
𝑘=1 𝑛 𝐹𝑘ℎ
Pour notre exemple, nous constatons que les modalités « Cadres.Sup » et « Ouvrier » sont les
plus déterminantes sur le 1er facteur, avec des rôles opposés puisqu’elles sont situées de part et
ne restitue que 2.01% de l’information disponible. Le résultat doit être fortement relativisé.
Pour réaliser les calculs sous Python, il nous faut tout d’abord produire le profil marginal des
𝑛𝑘.
modalités lignes ( ) puis appliquer la formule. Nous retrouvons les valeurs de l’objet « afc ».
𝑛
#contributions
contribLig = (numpy.reshape(profMargLig,(5,1))*afc.row_coord_**2)/afc.eig_[0]*100
print(contribLig)
individuelle et cumulée des points modalités sur les H premiers facteurs. Il représente
que la CTR, mais normalisée cette fois-ci par l’inertie totale de la modalité (section 4.1.2.4). Il
peut être éventuellement exprimé en pourcentages. La somme inter-facteur des COS2 d’une
modalité sur l’ensemble des axes est égale à 100%. Pour le facteur n°h, le COS2 s’écrit :
𝑛𝑘. 2
𝐹𝑘ℎ 2
𝐹𝑘ℎ
2 (𝑘)
𝐶𝑂𝑆ℎ =𝑛 𝑛 = 2
𝑘. 2 (𝑘)
𝑑 𝑑 (𝑘)
𝑛
La formule est en réalité simplifiée, elle revient à relativiser le carré de la coordonnée par la
Le COS2 est important pour l’appréciation des proximités entre les modalités homologues (soit
lignes, soit colonnes). Lorsque deux modalités de la même variable sont proches et bien
représentées (COS2 élevé), nous pouvons conclure à une similarité des profils. Si elles sont
éloignées au contraire, on peut penser qu’ils sont dissemblables. Concernant notre exemple,
« Ouvrier », « Cadres.Sup » et « Exp.Agri » sont très bien représentées sur le 1er facteur. Leur
entre les profils (Figure 101, et Figure 102 pour le calcul des distances entre profils).
Le cas de « Exp.Agri » attire notre attention car il nous éclaire sur la différence de nature entre
COS2 et CTR. La modalité est très bien représentée (COS2 élevé) parce qu’elle est quasiment
située sur l’axe F1 (coordonnée sur F2 proche de 0) ; mais sa contribution (CTR) est moindre, par
rapport à « Ouvrier » notamment, parce que son poids relatif est nettement moindre.
Pour reproduire les COS2 de l’objet « afc » sous Python, nous calculons donc tout d’abord les
Informations sur les modalités colonnes. Le principe et les indicateurs sont les mêmes pour
col_cos2_dim3
Droit 0.057776
Sciences 0.051990
Medecine 0.000291
IUT 0.002299
Nous représentons les modalités lignes et colonnes dans le premier plan factoriel. L’instruction
#représentation simultanée
afc.mapping(num_x_axis=1,num_y_axis=2,figsize=(7,7))
Attention. L’outil graphique ajuste automatiquement les échelles en abscise et ordonnées. Les
indications sur les parts d’inerties restituées sur les axes sont fondamentales pour une bonne
lecture des positions relatives et des proximités entres modalités lignes et colonnes, lesquelles
« fanalysis » ne les propose pas mais, je le répète encore une fois, la lecture des résultats d’une
AFC lorsqu’on se lance dans l’étude des associations entre modalités lignes et colonnes est
périlleuse. Elle doit être accompagnée par, au choix : le tableau des résidus standardisés, celui
des contributions au 𝜒 2, ou celui des indices d’attraction-répulsion. En effet, les proximités sont
parfois trompeuses en AFC, guider notre interprétation par les données sous-jacentes aux
Coordonnées. Même s’il est moins mis en lumière dans la littérature, le mécanisme des
modalités supplémentaires existe pour l’analyse factorielle des correspondances. Il permet déjà
de prendre en compte les profils atypiques qu’on a dû écarter de la construction des facteurs
parce qu’ils risquaient de fausser les calculs. Il permet aussi de situer les modalités particulières,
Dans cette section, nous essayons de situer les choix de filières des enfants de « Bourgeois ».
Nous sommes d’accord, « Bourgeois » n’est pas une CSP. Il s’agirait d’une catégorie sociale aux
contours assez flous, mais qu’on identifie quand-même assez bien lorsque nous les croisons.
L’introduire parmi les modalités actives n’avait pas de sens à cause de sa définition incertaine.
En revanche, après coup, nous pouvons analyser son positionnement par rapport aux autres
Remarque : Nous décrivons la procédure pour une modalité ligne ici, mais la démarche est très
présente comme une ligne additionnelle dans le tableau de contingence (Figure 117).
Nous utilisons la relation quasi-barycentrique (section 4.1.4.5) pour positionner cette modalité
ligne supplémentaire dans l’espace factoriel. Nous avons besoin pour ce faire de sa description
Figure 118 - Profils lignes, dont celui de la modalité supplémentaire - Données "CSP Filières"
Lambda.1 Lambda.2
0.0824 0.001703
Values Coord.1 Coord.2
Droit 0.0280 -0.0607
Sciences 0.1605 -0.0027
Médecine -0.3031 0.0297
IUT 0.6402 0.0608
Figure 119 - Coordonnées factorielles (F1, F2) des modalités colonnes - Données "CSP Filières"
La coordonnée de la modalité supplémentaire (yk*) sur le facteur (Fh) est obtenue avec :
𝐿
1 𝑛𝑘 ∗𝑙
𝐹𝑘 ∗ℎ = ∑ × 𝐺𝑙ℎ
√𝜆ℎ 𝑙=1 𝑛𝑘 ∗ .
1
𝐹𝐵𝑜𝑢𝑟𝑔𝑒𝑜𝑖𝑠,1 = (0.266 × 0.0280 + ⋯ + 0.059 × 0.6402) = −0.1949
√0.0824
Sous « fanalysis », l’opération est encapsulée dans la fonction transform(). Nous créons un
Nous insérons la modalité « Bourgeois » dans le premier plan factoriel à l’aide de ces
#modalités ligne
for i in range(D.shape[0]):
ax.text(afc.row_coord_[i,0],afc.row_coord_[i,1],D.index[i],color='red')
#modalités colonne
for i in range(D.shape[1]):
ax.text(afc.col_coord_[i,0],afc.col_coord_[i,1],D.columns[i],color='blue')
#point supplémentaire
ax.text(coordBourges[0][0],coordBourges[0][1],"Bourgeois",color='green')
plt.show()
Figure 120 - Position de la modalité supplémentaire dans le plan factoriel - Données "CSP Filières"
Qualité de représentation – COS2. Calculer la contribution aux facteurs n’a pas de sens pour
sur les facteurs (individuellement ou cumulés). Nous appliquons la formule de la section 4.3.2 :
le COS2 d’une modalité sur un facteur est défini par le rapport entre le carré de sa coordonnée
Sous Python, nous calculons le profil marginal (moyen), puis le profil des « Bourgeois », pour
modalité n’a pas participer à la construction des facteurs, la somme inter-facteur des COS2 n’est
0.03807680914376361
#COS2 de la représentation
cos2Bourges = (coordBourges**2)/distoBourges
print(cos2Bourges)
Coord Cos2
Dim.1 -0.194947 0.998093
Dim.2 -0.005490 0.000792
Dim.3 -0.006518 0.001116
La modalité « Bourgeois » est très bien représentée sur le 1er facteur. On pouvait le deviner
d’emblée dans le graphique précédent (Figure 120), la modalité est quasiment située sur l’axe.
Les nuages de points modalités peuvent présenter des formes caractéristiques qu’il faut savoir
de contingence (Lebart et al., 2000, pages 92 à 94 ; Tenenhaus, 2007, pages 241 à 248).
− Deux blocs distincts dans le tableau après réorganisation selon la position des modalités
sur le premier facteur. Les points modalité sont disposés en 2 groupes. Il est peut-être
nécessaire de scinder les données en deux parties pour mener des analyses distinctes.
− Des blocs distincts dans le tableau (après réorganisation). L’idée d’analyses distinctes
reste de mise.
modalités lignes et/ou colonnes. Nous l’avions étudié en détail dans un tutoriel (TUTO 12) où
d’emploi (colonne) qu’ils occupent. Il y avait clairement un ordre sur les modalités de la
première variable qui correspondent simplement au nombre d’années d’études. Il est moins
évident pour la seconde. Mais on peut imaginer que les différents types d’emploi requièrent
une qualification en lien avec les études. Les positions des points-modalités dans le premier
F1 horizontal et F2 vertical
1.45
0.95 Prof_school
Doctorate
Preschool
1st_4th 5th_6th
Priv_house_serv
7th_8th
0.45 9th
10th
11th Farming_fishing
Prof_specialty
Machine_op_inspct
Masters 12th Handlers_cleaners
Transport_moving
Armed_Forces Other_service
HS_grad
-0.05
Craft_repair
Assoc_voc
Bachelors Some_college
Exec_managerial Sales Adm_clerical
Assoc_acdm Protective_serv
-0.55 Tech_support
-1.05
-1.5 -1 -0.5 0 0.5 1
Figure 121 - Lien entre le niveau d'études et le type d'emploi occupé - TUTO 12
Nous explorons d’autres outils qui permettent de pratiquer l’analyse factorielle des
correspondances dans cette section. D’une manière assez succincte toujours. L’objectif est de
Nous inaugurons un nouveau jeu de données décrit dans un tutoriel accessible en ligne
(Bendixen, 1996). Le tableau de contingence - issu d’une enquête auprès de 100 ménages - croise
8 types d’aliments pour petit déjeuner avec 14 mots clés destinés à les qualifier. Nous avons un
tableau avec K = 14 lignes et L = 8 colonnes. Les réponses multiples étant autorisées, l’effectif
total est de n = 1760. L’étude cherche à mettre en évidence d’une part les ressemblances et
dissemblances entre les profils, d’autre part les relations (attractions ou répulsions) les plus
J’ai décrit en détail la mise en œuvre de l’AFC sur ces données dans un tutoriel qui avait pour
objectif de comparer les fonctionnalités de plusieurs logiciels (TUTO 15). J’en étais arrivé au
constat qu’ils produisaient des résultats numériques identiques. En revanche, de par le prisme
adopté, ils éclairaient avec plus ou moins d’acuité différentes facettes de l’analyse.
de l’outil sont décrits dans notre précédent tutoriel (TUTO 15, sections 3.2 et 3.3). Dans ce
3. De trier les modalités selon les contributions dans les tableaux de résultats (coordonnées
(1)
(2)
(3)
Les sorties sont subdivisées en plusieurs zones, énumérerons-les tour à tour dans ce qui suit.
fondamental. En effet, si la liaison globale est trop faible, l’étude des relations entre les
modalités ne sert à rien. Il faut s’assurer qu’il existe une information exploitable dans le tableau.
3
Le test du ² n’est pas strictement applicable ici. En effet chaque individu a pu choisir plusieurs couples de
valeurs (statement x food). De fait, les observations ne sont pas indépendantes. Il faut dès lors voir le ² plutôt
comme un indicateur de la quantité d’information exploitable dans le tableau.
la liaison est très significative (p-value < 0.0001). De plus, Tanagra fournit la valeur du
𝜒2 647.31
coefficient ² (Trace), avec 𝜙 2 = = = 0.3678), il symbolise la quantité d’information
𝑛 1760
disponible. En pratique, on peut penser que le tableau recèle des informations intéressantes à
partir de (𝜙 2 > 0.2) (Bendixen, 1996, page 7). L’AFC va décomposer cette quantité sur les
Tableau des valeurs propres. Tanagra affiche ensuite le tableau des valeurs propres (𝜆ℎ ). Elles
expriment la part d’inertie expliquée par les axes. Ainsi, puisque la décomposition est
² = 0.3678. Nous pouvons réécrire les valeurs en pourcentage d’inertie expliquée par les axes
Choix du nombre d’axes – Scree plot. La règle du coude peut être mise à contribution pour la
détection du nombre de facteurs pertinents. Dans le diagramme ci-dessus (Figure 125), on peut
Choix du nombre d’axes – Règle de Kaiser. L’autre approche consiste à utiliser la règle de Kaiser.
Le nombre maximum d’axes factoriels que nous pouvons produire est Hmax = MIN(L -1, C-1) =
d’inertie restituée est supérieure à (1 / Hmax) = 14.3 %, soit les axes 1 (52.50 %) et 2 (21.13 %).
Le même raisonnement peut porter sur les valeurs propres brutes. Nous retenons les axes
factoriels portés par une valeur propre supérieure à leur moyenne c.-à-d. supérieure à (0.3678
/ 7) = 0.0525 ; nous avons bien les axes 1 (1=0.19309) et 2 (2= 0.07773). TANAGRA met
automatiquement en surbrillance (très légèrement parce que ce n’est pas une règle irréfragable)
La représentation des lignes couvre plusieurs informations : les statistiques sur les points lignes
(poids, distance à l’origine, l’inertie) [A] ; les coordonnées factorielles [B] ; les contributions
(CTR) aux axes (en %) [C] ; et la qualité de représentation (COS²) par axe et cumulée [D].
TANAGRA intègre une fonctionnalité assez pratique : il peut trier en cascade les modalités lignes
selon leur contributions aux facteurs, en mettant des codes couleurs pour identifier les
coordonnées selon leur signe. Comme l’information est décomposée sur plusieurs facteurs, on
ne peut pas se contenter d’effectuer un tri sur le premier uniquement. Tanagra s’appuie sur la
stratégie suivante : pour le premier axe, il identifie les variables qui contribuent plus que la
leurs contributions ; parmi les modalités restantes, il identifie celles qui pèsent sur le second
axe, il les trie de nouveau, etc. Ainsi, nous avons une représentation en cascade (en diagonale)
qui permet d’identifier très rapidement la nature des informations véhiculées par les facteurs.
TANAGRA met en surbrillance les coordonnées des modalités répondant aux conditions
suivantes : (CTR > 1/K)4 et (COS² > 1/Hmax) c.-à-d. la modalité contribue plus que la moyenne
(non pondérée), et l’information qu’elle véhicule est concentrée sur le facteur (plus que la
moyenne). L’idée est d’attirer l’œil de l’utilisateur sur les éléments saillants du tableau qui est,
Ainsi, le 1er facteur est déterminé par l’opposition entre (TooLongToPrepare, ForWeekends,
grandes occasions vs. celle de tous les jours. Le 2nd par l’opposition (Healthy, Expensive,
incompatible avec la boustifaille de tous les jours, économique, pourtant favorite des familles
(on mange des frites aux pâtes aujourd’hui les enfants, ça vous va ? ouaiiiis !!!).
On notera surtout que les modalités à inertie élevée vont souvent conditionner les résultats sur
les premiers axes. Ce n’est pas un problème en soi. Il faut en avoir conscience simplement pour
une lecture distanciée. Il est important que ces éléments (poids, distance à l’origine, inertie – la
partie A du tableau) soient visibles en même que les coordonnées, CTR et COS2.
Enfin, les COS² indiquent la qualité de représentation individuelle et cumulée des modalités sur
les H premiers facteurs. Dans notre exemple, les modalités « GoodWinter » et « TasteLess »
sont les moins bien restituées par (F1, F2) (moins que les autres modalités tout du moins).
4
Nous avons préféré cette règle à (CTR > poids de la modalité) (Saporta, 2006 ; page 207) pour éviter de mettre
en surbrillance des modalités sous-représentées qui, de toute manière, contribuent faiblement au ²global. Par
exemple, avec cette seconde condition, nous aurions dû mettre « tasteless » en évidence sur le premier axe
(CTR = 1.26%, poids = 1.19%). Or, cette modalité pèse finalement très peu dans l’analyse. Elle ne correspond ni à
une attraction ni à une répulsion réellement marquée avec l’une des modalités colonnes.
Les mêmes schémas que la représentation des lignes s’applique pour les modalités colonne.
Il faut connaître un peu les aliments pour se lancer dans des commentaires circonstanciés. Il me
semblait par exemple que les « Muesli » étaient des céréales. Le fait que la modalité soit en
opposition avec « Cereals » me laisse à penser qu’elle recouvre peut-être autre chose dans la
Dans l’onglet CHART, TANAGRA propose la représentation simultanée par couple de facteurs
(Figure 128). La popularité des analyses factorielles repose pour beaucoup sur les « cartes »
graphiques. On a l’impression de tout comprendre en un coup d’œil. Il est toujours très stimulant
de pouvoir associer visuellement des points. Certains outils proposent même la visualisation 3D.
On passe un temps fou alors à tourner le graphique dans tous les sens, à voir le nuage par en
dessous, sur le côté, de travers, etc., en perdant complètement le fil de l’analyse au passage.
Pour nos données, nous observons bien les proximités et oppositions entre les modalités
homologues (les aliments entre eux d’une part, les qualificatifs entre eux d’autre part), en se
L’affaire est plus périlleuse lorsqu’il s’agit de rapprocher (ou opposer) les modalités lignes et
colonnes pour identifier les attractions (ou les répulsions). Il faut toujours s’astreindre à une
Correspondance Analysis
Economical
FamilyFavourite ToastTea
TooLongToPrepare Cereals
ForWeekdays
Porridge
ForWeekends Tasteless
BaconEggs GoodWinter
QuickEasy
0
ForATreat
Tasty GoodSummer
-1
Pour guider le praticien dans l’étude des attractions et répulsions entre les modalités lignes et
Pour chaque combinaison des modalités lignes / colonnes, TANAGRA propose : l’effectif
tableau de manière décroissante pour que les informations les plus marquantes apparaissent au
premier plan. Seules les contributions supérieures à la moyenne [contribution relative > 1 / (K x
dans la lecture des résultats de l’analyse factorielle des correspondances. On se rend compte
notamment que l’information portée par le tableau de contingence est en réalité « écrasée »
Le principe des observations supplémentaires est applicable en AFC. Dans le tutoriel originel,
I : Daily ; II : Several times per week ; III : Several times per month ; IV : Every few months ; V : Never.
A partir de la relation quasi-barycentrique, il est possible de les positionner sur les 2 premiers
facteurs à l’aide des coordonnées des modalités colonnes (section 4.3.4). Mais l’idée n’est pas
toujours très bien comprise, surtout que la plupart des outils proposent de le faire directement
approche simplifiée. Il fournit les coefficients de fonctions score c.-à-d. les fonctions
permettant de projeter les points supplémentaires dans le repère factoriel à partir de leur profil.
Ces coefficients peuvent être exportés facilement dans d’autres outils (ex. dans le tableur
Voici les coefficients de la fonction score pour les lignes additionnelles (Figure 130).
Figure 130 - Coefficients des fonctions score - Lignes supplémentaires - AFC – Tanagra
effectifs en profils.
Nous pouvons dès lors calculer leurs coordonnées pour les deux premiers axes.
Scores
Factor.1 Factor.2
I 0.280 0.551
II 0.448 0.321
III -0.562 0.082
IV 0.114 -0.161
V 0.042 -0.157
Figure 132 - Coordonnées factorielles des modalités lignes supplémentaires - AFC – Tanagra
Détaillons le calcul pour « III : Several times per month » sur le 1er facteur.
C(III, Factor 1) = 1.280579 x 0.050 + 0.712525 x 0.084 + (-0.122041) x 0.101 + (-1.782883) x 0.387 + 0.399026 x 0.067 +
0.560261 x 0.118 + (-0.717755) x 0.126 + 0.195685 x 0.067 = -0.562
logique dans la mesure où « BaconEggs » est l’aliment le plus prisé dans ce cas (38.7 % dixit le
Remarque : Le même dispositif existe pour les modalités colonnes supplémentaires. Il sera
J’ai énormément étudié la PROC CORRESP de SAS pour développer l’AFC dans TANAGRA. La
procédure s’applique aussi à l’analyse des correspondances multiples (chapitre 5). Elle regorge
d’options multiples qu’il faut savoir cerner. Quoiqu’en en dise, elle constitue une référence
à 2 le nombre de facteurs à générer pour éviter d’être noyés sous les tableaux de chiffres ;
(CELLCHI2) fait apparaître les contributions au 𝜒 2, si importants pour identifier les associations
Tableau des contributions au 𝝌𝟐. SAS attaque directement par le tableau des contributions
exprimés en valeur absolue c.-à-d. en effectuant la somme des contributions, nous aboutissons
au 𝜒𝑔𝑙𝑜𝑏𝑎𝑙
2
. L’enjeu consiste à repérer rapidement les associations les plus significatives. Un
formatage en ce sens aurait été appréciable. Pouvoir lire facilement le sens de la relation
(attraction ou répulsion) aurait été salutaire également. J’ai surligné manuellement (fond vert)
les 5 attractions/contributions les plus marquantes (Figure 133). Nous remarquons que les
Figure 133 - Tableau des contributions au KHI-2 - AFC - SAS PROC CORRESP
(section 4.5.2.2) (plutôt l’inverse). Nous avons pour chaque facteur : la valeur singulière, son
individuelle et cumulée.
Coordonnées, CTR et COS2. Ils sont dispatchés dans plusieurs tableau. J’ai fait un petit
montage pour que nous ayons une vision synthétique. Voici les informations pour les modalités
lignes (Figure 135). Nous disposons des mêmes tableaux pour les modalités colonnes.
Statistiques des points lignes. Le tableau des statistiques regroupe le COS2 cumulé de chaque
𝑛𝑘.
modalité sur le nombre de facteurs spécifié (DIMENS) (Qualité), son poids relatif ( ) (Masse),
𝑛
Figure 136 - Statistiques pour les points lignes - SAS PROC CORRESP
Indices des coordonnées contributives. SAS propose un tableau des « indices des
coordonnées qui contribuent le plus à l’inertie des points ». Il permet d’identifier les modalités
présentant les plus fortes contributions sur chaque facteur. Je n’ai pas trouvé la valeur seuil
dans la documentation. Pour les modalités lignes, nous avons (Figure 137) :
Figure 137 - Identification des modalités à fortes contributions sur les facteurs - SAS PROC CORRESP
parmi les modalités « remarquables » pour le 1er facteur. On note que « ForWeekdays » est
Bien évidemment, un tableau avec la même finalité est proposé pour les modalités colonnes.
Carte des modalités – Représentation simultanée. Que seraient les méthodes factorielles
sans les représentations graphiques ? SAS propose par défaut la carte des modalités lignes et
colonnes fondus dans la même plan factoriel (nous n’avions demandé que DIMENS = 2
Plusieurs packages peuvent faire l’affaire sous R. Cette multiplicité est à la fois un atout et une
faiblesse. Un atout parce que nous disposons de plusieurs points de vue pour un même
traitement. Cela ne peut qu’enrichir l’analyse. Une faiblesse parce qu’obtenir des résultats
peu de recul par rapport aux techniques. Parfois, les sorties de certaines librairies ne
correspondent pas aux présentations que l’on retrouve dans les ouvrages de référence. Cela peut
Heureusement, les packages sont de qualité pour l’analyse factorielle sous R. Nous avions déjà
exploré « FactoMineR » (TUTO 14), « ca » et « ade4 » (TUTO 15). Nous reprenons l’étude avec
Nous importons la librairie « ade4 », après l’avoir installé préalablement si nécessaire. Nous
faisons appel ensuite à la fonction dudi.coa() pour l’AFC. Nous lui passons les données (D), nous
#librairie ade4
library(ade4)
#afc
afc <- dudi.coa(D,nf=2,scannf=FALSE)
summary(afc)
La fonction summary() affiche l’inertie totale et la qualité de restitution des axes factoriels en
affichons l’éboulis des valeurs propres. Le « coude » est assez marqué pour (Axis = 2).
Nous affichons les positions des modalités lignes et colonnes sur un facteur. Ce type de
graphique remplace d’une certaine manière les coordonnées brutes empilées dans les tableaux,
avec l’avantage certain d’une présentation triée, limité au facteur étudié, facilitant les
comparaisons des modalités intra et inter-variables. Voici la représentation pour le 1er facteur
(F1). Nous ne disposons pas en revanche, dans le même temps, des contributions et des COS2
Enfin, nous disposons de la représentation simultanée dans le premier plan factoriel. Nous
spécifions l’option (method = 1) pour que les dispersions des points modalités lignes et colonnes
#représentation simultanée
scatter(afc,method=1)
L’analyse factorielle des correspondances multiples (AFCM) ou, plus simplement, l’analyse des
lorsque les variables actives sont catégorielles. Les deux approches se rejoignent d’ailleurs
lorsque les variables sont exclusivement binaires. Elle répond donc à la même problématique, elle
cherche à projeter les individus dans un espace de dimension réduit, en respectant au mieux les
proximités entre eux, mais en se plaçant dans un cadre théorique différent : elle substitue la
distance du 𝜒 2 à la distance euclidienne pour mesurer les proximités entre les individus. Bien
sûr, au-delà du traitement des observations, comme pour toute méthode factorielle, la
description synthétique des données met également en évidence les association entre les
descripteurs et, dans le cas de l’analyse des correspondances multiples, leurs modalités.
L'ACM peut être aussi vue comme une technique de transformation de variables. Elle permet de
passer d'un espace discret, décrit par les variables originales, en un espace continu, décrit par
les axes factoriels. Sans perte d'informations si l'on choisit de conserver tous les axes. Avec une
perte d'information contrôlée lorsque l'on ne conserve que les premiers axes. En effet, les
on lisse ainsi les données en nous concentrant sur les informations essentielles. Elle rend ainsi
que les descripteurs quantitatifs. On citera, entres autres, l’exemple bien connu de la méthode
DISQUAL (Saporta, 2006) en analyse prédictive. Elle consiste à projeter les observations dans
un espace continu avant d’appliquer une analyse discriminante linéaire pour expliquer et prédire