library(knitr)
library(kableExtra)
library(FactoMineR)
library(factoextra) Loading required package: ggplot2
Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(ggplot2)library(knitr)
library(kableExtra)
library(FactoMineR)
library(factoextra) Loading required package: ggplot2
Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(ggplot2)Notre objectif est d’étudier l’indépendance entre les lignes (catégories socioprofessionnelles) et les colonnes (filières d’études) à partir du tableau de contingence fourni selon une enquête sur les origines sociales de 1970.
Nous calculerons :
# matrice de données (effectifs observés)
data <- matrix(
c(
80, 36, 134, 99, 65, 28, 11, 58,
6, 2, 15, 6, 4, 1, 1, 4,
168, 74, 312, 137, 208, 53, 21, 62,
470, 191, 806, 400, 876, 164, 45, 79,
236, 99, 493, 264, 281, 56, 36, 87,
145, 52, 281, 133, 135, 30, 20, 54,
166, 64, 401, 193, 127, 23, 28, 129,
16, 6, 27, 11, 8, 2, 2, 8,
305, 115, 624, 247, 301, 47, 42, 90
),
nrow = 9, byrow = TRUE
)
rownames(data) <- c("Exploitant Agric.", "Salarié Agric.", "Patron", "Lib. Cadre Sup.",
"Cadre Moyen", "Employé", "Ouvrier", "Service", "Autres")
colnames(data) <- c("Droit", "Sc. Eco.", "Lettres", "Sciences", "Med. Dent.", "Pharma.",
"Pluridisc.", "IUT")
# Affichage du tableau observé
data Droit Sc. Eco. Lettres Sciences Med. Dent. Pharma. Pluridisc.
Exploitant Agric. 80 36 134 99 65 28 11
Salarié Agric. 6 2 15 6 4 1 1
Patron 168 74 312 137 208 53 21
Lib. Cadre Sup. 470 191 806 400 876 164 45
Cadre Moyen 236 99 493 264 281 56 36
Employé 145 52 281 133 135 30 20
Ouvrier 166 64 401 193 127 23 28
Service 16 6 27 11 8 2 2
Autres 305 115 624 247 301 47 42
IUT
Exploitant Agric. 58
Salarié Agric. 4
Patron 62
Lib. Cadre Sup. 79
Cadre Moyen 87
Employé 54
Ouvrier 129
Service 8
Autres 90
Ci-dessus se trouvent les effectifs observés par cellule du tableau de contingence. lecture : 80 étudiants en droit viennent de parents exploitants agricoles. 876 étudiants en sciences ont des parents libéraux ou cadres supérieurs.
La formule générale pour l’effectif théorique (attendu) dans la cellule (i,j) est :
\[ E_{ij} = \frac{(\text{total ligne } i) \times (\text{total colonne } j)}{N} \]
# Totaux
row_totals <- rowSums(data)
col_totals <- colSums(data)
N <- sum(data)
# Matrice des effectifs théoriques
expected <- outer(row_totals, col_totals) / N
# Arrondi à 2 décimales
expected <- round(expected, 2)
expected Droit Sc. Eco. Lettres Sciences Med. Dent. Pharma.
Exploitant Agric. 81.35 32.65 158.05 76.14 102.46 20.64
Salarié Agric. 6.21 2.49 12.06 5.81 7.82 1.58
Patron 164.77 66.14 320.13 154.22 207.52 41.81
Lib. Cadre Sup. 482.54 193.68 937.49 451.62 607.72 122.45
Cadre Moyen 247.08 99.17 480.03 231.25 311.18 62.70
Employé 135.32 54.31 262.90 126.65 170.43 34.34
Ouvrier 180.06 72.27 349.82 168.52 226.77 45.69
Service 12.74 5.11 24.74 11.92 16.04 3.23
Autres 281.94 113.17 547.77 263.88 355.09 71.55
Pluridisc. IUT
Exploitant Agric. 10.53 29.18
Salarié Agric. 0.80 2.23
Patron 21.32 59.10
Lib. Cadre Sup. 62.44 173.07
Cadre Moyen 31.97 88.62
Employé 17.51 48.53
Ouvrier 23.30 64.58
Service 1.65 4.57
Autres 36.48 101.12
Les effectifs théoriques sont représentés ci-dessus, ils représentent les effectifs que l’on s’attendrait à observer si les deux variables étaient indépendantes.
lecture : Pour les enfants d’exploitants agricoles en Droit, l’effectif observé est 80, alors que l’effectif théorique attendu est 81,35. Cela signifie que le nombre d’étudiants issus d’exploitants agricoles en droit est proche de ce qu’on attendait si les variables étaient indépendantes.
Pour les enfants de libéraux / cadres supérieurs en Médecine/Dentaire, l’effectif observé est 876, mais l’effectif théorique est 607,72. Ici, il y a beaucoup plus d’étudiants que prévu : cela indique une sur-représentation des enfants de cadres supérieurs dans cette filière.
Les profils lignes donnent, pour chaque ligne i, la proportion de la ligne répartie sur les colonnes j :
\[ P_{j|i} = \frac{O_{ij}}{\text{total ligne } i} \times 100 \]
# Profils lignes : %
row_profiles <- prop.table(data, 1) * 100
row_profiles <- round(row_profiles, 1)
# colonne Total = 100%
row_profiles <- cbind(row_profiles, Total = 100)
row_profiles_formatted <- apply(row_profiles, c(1,2), function(x) {
if (x %% 1 == 0) paste0(as.integer(x), "%") else paste0(x, "%")
})
kable(row_profiles_formatted, caption = "Profils lignes (%)") %>%
kable_styling(full_width = FALSE)| Droit | Sc. Eco. | Lettres | Sciences | Med. Dent. | Pharma. | Pluridisc. | IUT | Total | |
|---|---|---|---|---|---|---|---|---|---|
| Exploitant Agric. | 15.7% | 7% | 26.2% | 19.4% | 12.7% | 5.5% | 2.2% | 11.4% | 100% |
| Salarié Agric. | 15.4% | 5.1% | 38.5% | 15.4% | 10.3% | 2.6% | 2.6% | 10.3% | 100% |
| Patron | 16.2% | 7.1% | 30.1% | 13.2% | 20.1% | 5.1% | 2% | 6% | 100% |
| Lib. Cadre Sup. | 15.5% | 6.3% | 26.6% | 13.2% | 28.9% | 5.4% | 1.5% | 2.6% | 100% |
| Cadre Moyen | 15.2% | 6.4% | 31.8% | 17% | 18.1% | 3.6% | 2.3% | 5.6% | 100% |
| Employé | 17.1% | 6.1% | 33.1% | 15.6% | 15.9% | 3.5% | 2.4% | 6.4% | 100% |
| Ouvrier | 14.7% | 5.7% | 35.5% | 17.1% | 11.2% | 2% | 2.5% | 11.4% | 100% |
| Service | 20% | 7.5% | 33.8% | 13.8% | 10% | 2.5% | 2.5% | 10% | 100% |
| Autres | 17.2% | 6.5% | 35.2% | 13.9% | 17% | 2.7% | 2.4% | 5.1% | 100% |
Chaque ligne du tableau ci-dessus montre la répartition relative (en %) des filières pour la catégorie socioprofessionnelle donnée (somme par ligne ≈ 100%).
Chez les enfants de patrons, la part la plus élevée se trouve en Lettres (30,1 %) et en Médecine/Dentaire (20,1 %). On note donc un attrait fort pour les professions de santé, en plus des Lettres.
Les enfants de cadres moyens se tournent surtout vers les Lettres (31,8 %) et les Sciences (17 %), avec aussi une part non négligeable en Médecine/Dentaire (18,1 %).
Ces proportions pourraient être biaisées et ne pas refléter la réalité générale, car il semble qu’un nombre beaucoup plus important d’étudiants en droit ait été interrogé. Cette impression pourra être vérifiée et confirmée à l’aide du tableau des profils colonnes, qui met en évidence la structure des effectifs par filière.
Les profils colonnes donnent, pour chaque colonne j, la proportion de la colonne répartie sur les lignes i :
\[ P_{i|j} = \frac{O_{ij}}{\text{total colonne } j} \times 100 \]
# Profils colonnes : %
col_profiles <- prop.table(data, 2) * 100
col_profiles <- round(col_profiles, 1)
# Ajouter ligne Total = 100%
col_profiles <- rbind(col_profiles, Total = 100)
# Formater pour afficher % et enlever la décimale si 0
col_profiles_formatted <- apply(col_profiles, c(1,2), function(x) {
if (x %% 1 == 0) paste0(as.integer(x), "%") else paste0(x, "%")
})
# Affichage propre avec kable
kable(col_profiles_formatted, caption = "Profils colonnes (%)") %>%
kable_styling(full_width = FALSE)| Droit | Sc. Eco. | Lettres | Sciences | Med. Dent. | Pharma. | Pluridisc. | IUT | |
|---|---|---|---|---|---|---|---|---|
| Exploitant Agric. | 5% | 5.6% | 4.3% | 6.6% | 3.2% | 6.9% | 5.3% | 10.2% |
| Salarié Agric. | 0.4% | 0.3% | 0.5% | 0.4% | 0.2% | 0.2% | 0.5% | 0.7% |
| Patron | 10.6% | 11.6% | 10.1% | 9.2% | 10.4% | 13.1% | 10.2% | 10.9% |
| Lib. Cadre Sup. | 29.5% | 29.9% | 26.1% | 26.8% | 43.7% | 40.6% | 21.8% | 13.8% |
| Cadre Moyen | 14.8% | 15.5% | 15.9% | 17.7% | 14% | 13.9% | 17.5% | 15.2% |
| Employé | 9.1% | 8.1% | 9.1% | 8.9% | 6.7% | 7.4% | 9.7% | 9.5% |
| Ouvrier | 10.4% | 10% | 13% | 13% | 6.3% | 5.7% | 13.6% | 22.6% |
| Service | 1% | 0.9% | 0.9% | 0.7% | 0.4% | 0.5% | 1% | 1.4% |
| Autres | 19.2% | 18% | 20.2% | 16.6% | 15% | 11.6% | 20.4% | 15.8% |
| Total | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
Chaque colonne du tableau ci-dessus montre la répartition relative (en %) des catégories socioprofessionnelles pour la filière donnée (somme par colonne ≈ 100%).
En Médecine/Dentaire, près de 44 % des étudiants sont issues de parents libéraux et cadres supérieurs.
En IUT, la part d’enfants d’ouvriers est à 22,6 %, soit la plus forte proportion de la colonne IUT et elle apparaît donc comme la filière la plus accessible socialement.
En Lettres, la présence des enfants d’ouvriers atteint 13 %, ce qui est bien plus élevé que dans Médecine (6,3 %) ou Pharmacie (5,7 %). Cette filière attire donc davantage d’étudiants issus des milieux populaires.
La contribution de la cellule (i,j) au Khi2 est :
\[ C_{ij} = \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
où \(O_{ij}\) est l’effectif observé et \(E_{ij}\) l’effectif théorique.
# Calcul des contributions
contrib <- (data - expected)^2 / expected
# Arrondi à 3 décimales
contrib <- round(contrib, 2)
contrib Droit Sc. Eco. Lettres Sciences Med. Dent. Pharma. Pluridisc.
Exploitant Agric. 0.02 0.34 3.66 6.86 13.70 2.62 0.02
Salarié Agric. 0.01 0.10 0.72 0.01 1.87 0.21 0.05
Patron 0.06 0.93 0.21 1.92 0.00 2.99 0.00
Lib. Cadre Sup. 0.33 0.04 18.44 5.90 118.43 14.10 4.87
Cadre Moyen 0.50 0.00 0.35 4.64 2.93 0.72 0.51
Employé 0.69 0.10 1.25 0.32 7.37 0.55 0.35
Ouvrier 1.10 0.95 7.49 3.56 43.89 11.27 0.95
Service 0.83 0.16 0.21 0.07 4.03 0.47 0.07
Autres 1.89 0.03 10.61 1.08 8.24 8.42 0.84
IUT
Exploitant Agric. 28.46
Salarié Agric. 1.40
Patron 0.14
Lib. Cadre Sup. 51.13
Cadre Moyen 0.03
Employé 0.62
Ouvrier 64.26
Service 2.57
Autres 1.22
# Somme des contributions = statistique du Khi2 manuelle
chi2_stat_manual <- sum(contrib)
chi2_stat_manual[1] 474.68
Le tableau ci-dessus donne la contribution de chaque cellule au Khi2 global. La somme de ces contributions vaut la statistique du khi². Plus une valeur de ce tableau est élevée plus elle contribue à la liaison entre les deux variable.
On remarque que certaines cases se distinguent par des valeurs très élevées : par exemple enfants de Libéraux/Cadres supérieurs en Médecine/Dentaire (118,43) ou enfants d’Ouvriers en IUT (64,26). Cela signifie que ces croisements contribuent énormément au khi² global et révèlent des liaisons fortes entre ces catégories sociales et ces filières d’étude.
D’autres contributions importantes apparaissent, comme les enfants de Libéraux/Cadres supérieurs en IUT (51,13) ou encore enfants d’Ouvriers en Médecine/Dentaire (43,89). Ces valeurs indiquent que la répartition observée s’écarte fortement de ce que donnerait une indépendance parfaite : certaines catégories sont donc sur-représentées ou sous-représentées dans certaines filières.
Avec une contribution au khi² évelvé et un effectif observé > théorique, il y a donc une sur-représentation. Inversement, une contribution au khi² évelvé et un effectif observé < théorique, il y a donc une sous-représentation.
À l’inverse, les contributions très faibles (proches de 0, comme pour enfnat de Patron en Droit = 0.06 ou enfnant de Cadre moyen en Sciences économiques = 0.00) montrent qu’il n’y a quasiment pas de différence entre l’effectif observé et l’effectif attendu. Ces cases n’apportent presque rien à la liaison entre les deux variables.
Les conditions d’application :
Le test du Khi2 repose sur une approximation par la loi du Khi2 qui est valide si la plupart des effectifs théoriques \(E_{ij}\) sont supérieurs à 5. Une règle pratique : au moins 80% des cellules avec \(E_{ij} \ge 5\) et aucune cellule avec \(E_{ij} < 1\).
On utilise la fonction chisq.test de R pour obtenir la statistique, le degré de liberté et la p-valeur.
# Test du khi2 (sans correction)
test <- chisq.test(data, correct = FALSE)Warning in chisq.test(data, correct = FALSE): Chi-squared approximation may be
incorrect
test
Pearson's Chi-squared test
data: data
X-squared = 474.67, df = 56, p-value < 2.2e-16
# Vérification : comparer la stat. calculée manuellement et celle de chisq.test
c(chi2_manual = chi2_stat_manual, chi2_test = unname(test$statistic))chi2_manual chi2_test
474.6800 474.6679
Hypothèses du test :
H0 : La variable catégorie socioprofessionnelle des parents et la variable filière d’études sont indépendantes.
H1 : La variable catégorie socioprofessionnelle des parents et la variable filière d’études sont liées.
Règle de décision :
Si \(\chi^2_{\text{obs}} > K_{\text{seuil}}\), alors on rejette H0 et on conclut que les deux variables sont liées. Si \(\chi^2_{\text{obs}} < K_{\text{seuil}}\), alors on rejette H1 et on conclut que les deux variables sont indépendantes.
Calculs :
Statistique observée : \(\chi^2_{\text{obs}} = 474,67\) Degrés de liberté : \(ddl = (9 - 1) \times (8 - 1) = 56\) Valeur critique à \(\alpha = 5\%\) et \(ddl = 56\) : \(K_{\text{seuil}} \approx 74,47\) (selon la table de loi du Khi2).
Comparaison : \(474,67 > 74,47\) et p-value \(< 2,2 \times 10^{-16}\) (très inférieure à 5%).
Conclusion : On rejette l’hypothèse nulle H0. Il existe donc une dépendance significative entre la catégorie socioprofessionnelle et la filière d’études au seuil de 5%.
La statistique du Khi2 indique s’il existe une dépendance, mais ne renseigne pas sur l’intensité de cette association.
On calcule donc le V de Cramer :
\[ V = \sqrt{\frac{\chi^2}{N \times \min(r-1, c-1)}} \]
où : - \(\chi^2\) est la statistique du test, - \(N\) l’effectif total, - \(r\) le nombre de lignes, - \(c\) le nombre de colonnes.
chi2_value <- unname(test$statistic)
# Fonction V de Cramer
v_cramer <- function(chi2, n, r, c){
min_dim <- min(r-1, c-1)
sqrt(chi2 / (n * min_dim))
}
# Calcul
N <- sum(data)
r <- nrow(data)
c <- ncol(data)
V <- v_cramer(chi2_value, N, r, c)
V[1] 0.08234665
Le V de Cramer : la force de l’association entre catégorie socioprofessionnelle et filière est évaluée par le V de Cramer. Valeur observée : V = 0.0823. Malgré un χ² significatif, cette valeur indique une association très faible, donc l’origine social des parents a un effet statistiquement détectable mais de faible ampleur sur le choix de filière. Pour identifier quelles cellules expliquent le plus le χ², on examine les résidus standardisés : les cellules avec |résidu| > 2 sont considérées comme significativement sur- ou sous-représentées.
res_afc <- CA(data, graph = FALSE)
summary(res_afc)
Call:
CA(X = data, graph = FALSE)
The chi square of independence between the two variables is equal to 474.6679 (p-value = 1.194233e-67 ).
Eigenvalues
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7
Variance 0.040 0.005 0.001 0.001 0.000 0.000 0.000
% of var. 83.716 11.485 2.380 2.023 0.281 0.113 0.002
Cumulative % of var. 83.716 95.201 97.581 99.604 99.885 99.998 100.000
Rows
Iner*1000 Dim.1 ctr cos2 Dim.2 ctr cos2
Exploitant Agric. | 5.569 | 0.233 6.969 0.497 | 0.226 48.041 0.470 |
Salarié Agric. | 0.436 | 0.323 1.023 0.932 | -0.033 0.078 0.010 |
Patron | 0.627 | -0.020 0.101 0.064 | 0.030 1.690 0.147 |
Lib. Cadre Sup. | 21.324 | -0.264 52.968 0.987 | 0.024 3.165 0.008 |
Cadre Moyen | 0.967 | 0.050 0.959 0.394 | -0.011 0.373 0.021 |
Employé | 1.124 | 0.103 2.290 0.810 | -0.033 1.715 0.083 |
Ouvrier | 13.346 | 0.335 31.912 0.950 | 0.030 1.858 0.008 |
Service | 0.842 | 0.291 1.707 0.806 | -0.021 0.066 0.004 |
Autres | 3.232 | 0.068 2.071 0.255 | -0.115 43.015 0.726 |
Dim.3 ctr cos2
Exploitant Agric. 0.049 10.959 0.022 |
Salarié Agric. -0.023 0.183 0.005 |
Patron 0.054 26.279 0.474 |
Lib. Cadre Sup. -0.016 6.836 0.004 |
Cadre Moyen -0.015 3.226 0.038 |
Employé 0.024 4.501 0.045 |
Ouvrier -0.060 35.907 0.030 |
Service 0.101 7.194 0.097 |
Autres 0.018 4.915 0.017 |
Columns
Iner*1000 Dim.1 ctr cos2 Dim.2 ctr cos2
Droit | 0.543 | 0.004 0.005 0.004 | -0.033 3.115 0.313 |
Sc. Eco. | 0.264 | -0.011 0.021 0.032 | 0.012 0.157 0.032 |
Lettres | 4.292 | 0.090 6.344 0.587 | -0.074 31.285 0.397 |
Sciences | 2.436 | 0.096 3.424 0.559 | 0.050 6.913 0.155 |
Med. Dent. | 20.045 | -0.313 49.554 0.982 | 0.020 1.501 0.004 |
Pharma. | 4.135 | -0.249 6.304 0.606 | 0.181 24.301 0.320 |
Pluridisc. | 0.766 | 0.177 1.632 0.846 | -0.063 1.491 0.106 |
IUT | 14.986 | 0.477 32.715 0.867 | 0.173 31.238 0.114 |
Dim.3 ctr cos2
Droit 0.043 25.964 0.540 |
Sc. Eco. 0.056 17.756 0.759 |
Lettres -0.008 1.754 0.005 |
Sciences -0.024 7.340 0.034 |
Med. Dent. -0.033 19.080 0.011 |
Pharma. 0.082 23.807 0.065 |
Pluridisc. 0.019 0.650 0.010 |
IUT -0.027 3.650 0.003 |
# Valeurs propres (inertie) et pourcentage d'inertie
res_afc$eig eigenvalue percentage of variance cumulative percentage of variance
dim 1 3.973716e-02 83.715710055 83.71571
dim 2 5.451690e-03 11.485270396 95.20098
dim 3 1.129689e-03 2.379957023 97.58094
dim 4 9.603978e-04 2.023304638 99.60424
dim 5 1.332353e-04 0.280691605 99.88493
dim 6 5.356108e-05 0.112839045 99.99777
dim 7 1.057199e-06 0.002227238 100.00000
Le tableau des valeurs propres montre que le premier axe concentre l’essentiel de l’information il explique à lui seule 83,7 % de la variance. Le deuxème axe ajoute encore 11,5 %, ce qui porte le cumul à 95,2 %.
Pour les modalités lignes dans l’axe 1, les modalités les mieux représentées sont les Libéraux/Cadres supérieurs (cos² = 0,987) et les Ouvriers (cos² = 0,950). Elles contribuent aussi fortement à l’axe, avec des contributions respectives de 53 % et 32 %. Cela signifie que cet axe oppose principalement ces deux groupes sociaux. D’autres catégories participent aussi de manière notable : les Exploitants agricoles (cos² = 0,497 et ctr ≈ 7 %) et les Employés (cos² = 0,810 et ctr ≈ 2 %). Bien que leur poids soit plus limité, elles renforcent la lecture de l’axe.
Pour l’axe 2, les modalités les plus importantes sont les Exploitants agricoles (cos² = 0,470 ; ctr = 48 %) et la catégorie Autres (cos² = 0,726 et ctr = 43 %). L’axe 2 montre donc surtout l’opposition entre ces deux profils.
Pour les colonnes, dans l’axe 1, deux filières dominent très nettement : Médecine/Dentaire (cos² = 0,982 ; ctr ≈ 50 %) et l’IUT (cos² = 0,867 ; ctr ≈ 33 %). Elles structurent l’opposition principale de cet axe, qui oppose ainsi clairement les étudiants en Médecine/Dentaire à ceux de l’IUT. D’autres filières participent secondairement, comme Pharmacie (cos² = 0,606 ; ctr ≈ 6 %) et Lettres (cos² = 0,587 ; ctr ≈ 6 %). Ces filières sont bien représentées sur l’axe et renforcent cette opposition, mais avec un poids moins important.
Pour l’axe 2, ce sont d’autres filières qui prennent le relais : Lettres (cos² = 0,397 et ctr ≈ 31 %) et IUT (cos² = 0,114 et ctr ≈ 31 %) contribuent fortement à sa construction. On peut donc dire que l’axe 2 oppose particulièrement la filière Lettres à celle de l’IUT, tout en intégrant une contribution notable de Pharmacie (cos² = 0,320 et ctr ≈ 24 %).
res_afc <- CA(data, graph = FALSE)
# Graphique des lignes seulement
fviz_ca_row(res_afc, repel = TRUE,
col.var = "blue", title = "AFC : lignes")L’axe 1 oppose très nettement deux ensembles de catégories. À droite du plan factoriel, on observe les ouvriers, les employés, les salariés agricoles, les métiers de services ainsi que les exploitants agricoles. Ces groupes se caractérisent par des choix de filières spécifiques et relativement homogènes, qui les distinguent fortement des autres catégories. À gauche du plan, on retrouve les professions libérales et cadres supérieurs ainsi que les patrons, nettement opposés aux précédents, leurs profils de choix de filières sont très différents et orientés vers d’autres domaines d’études. Les cadres moyens et la catégorie patron ne semblent pas trés bien représentés sur le premier plan factoriel.
Ainsi, le premier axe factoriel révèle un gradient social très marqué dans l’orientation scolaire : les catégories socioprofessionnelles les plus favorisées (libéraux, cadres supérieurs, patrons) se situent à une extrémité de l’axe, tandis que les catégories populaires (ouvriers, employés, salariés agricoles) occupent l’extrémité opposée. Les différences dans les choix de filières d’études apparaissent donc fortement structurées par l’origine sociale. Cela confirme, en cohérence avec les résultats du test du Khi², l’existence d’une dépendance statistiquement significative entre la catégorie socioprofessionnelle d’origine et le type de filière des enfants.
# Graphique des colonnes seulement
fviz_ca_col(res_afc, repel = TRUE,
col.var = "red", title = "AFC : colonnes")Dans une moindre mesure, la filière pluridisciplinaire et les lettres, situées toutes trois du côté des valeurs positives de l’axe 1. Ces filières se rapprochent des catégories socioprofessionnelles situées elles aussi à droite de l’axe sur le graphique des lignes, c’est-à-dire les catégories populaires (ouvriers, employés, salariés agricoles). À gauche du plan, on observe les filières de médecine-dentaire et de pharmacie, nettement opposées aux précédentes, ainsi que plus modérément les sciences économiques, le droit et les sciences. Ces filières se situent du côté des catégories socioprofessionnelles les plus favorisées (libéraux, cadres supérieurs, patrons) sur le graphique des lignes.
Ainsi, le premier axe factoriel traduit une opposition sociale forte entre deux ensembles de filières : d’un côté les filières les plus sélectives et prestigieuses (médecine-dentaire, pharmacie, droit, sciences) associées aux catégories socioprofessionnelles les plus favorisées, et de l’autre les filières plus généralistes ou techniques (IUT, pluridisciplinaire, lettres) davantage choisies par les catégories populaires. Le second axe, qui n’explique qu’une faible part de l’inertie (11,5 %), n’apporte qu’une distinction secondaire, séparant très légèrement la filière IUT en haut du plan des autres filières proches du centre.
res_afc <- CA(data, graph = FALSE) # CA = Correspondence Analysis
# Graphique des lignes et colonnes
fviz_ca_biplot(res_afc, repel = TRUE,
col.row = "blue", col.col = "red",
title = "AFC : lignes (bleu) et colonnes (rouge)")Le graphique à deux facteur montre qu’il n’y a pas d’indépendance parfaite entre ces deux variables. Si elles étaient totalement indépendantes, toutes les modalités seraient regroupées au centre du graphique. Or, on observe des écarts nets : Les enfants de Libéraux/Cadres supérieurs se rapprochent fortement des filières Médecine/Dentaire et Pharmacie, cela montre une sur-représentation de ces catégories sociales dans ces filières prestigieuses. Ouvriers et Exploitants agricoles apparaissent du côté droit, proches de l’IUT, cela valide le fait que les étudiants issus de ces milieux sont davantage orientés vers des filières professionnalisantes. Les filières Droit, Lettres et Sciences économiques restent plus proches du centre, ce qui signifie qu’elles accueillent une population étudiante socialement plus diversifiée (pas de forte sur- ou sous-représentation nette).
Pour la seconde partie, nous avons décidé d’utiliser les données Titanic composées de 3 variables catégorielles : la classe (1ère, 2ème, 3ème), le sexe (homme, femme) et la survie (oui, non). Ces variables permettent d’étudier la relation entre le statut social, le genre et les chances de survie lors du naufrage.
data("Titanic")
df <- as.data.frame(Titanic)Chaque individu est représenté par un vecteur binaire (0/1) qui indique les modalités qu’il possède.
Exemple : un passager du Titanic avec 3rd class, Male, No (non survivant) sera représenté par :
\[x_i = (0,0,1,\, 1,0,\, 1,0)\]
Pour chaque individu, on calcule son petit tableau :
\[M_i = x_i^\top x_i\]
C’est une matrice carrée où toutes les cases correspondant aux modalités de l’individu valent 1.
Le tableau de Burt final est la somme des contributions individuelles :
\[B = \sum_{i=1}^n M_i = X^\top X\]
où \(X\) est le tableau disjonctif complet (individus × modalités).
Le tableau de Burt est la somme de tous les petits tableaux individuels.
# On "réplique" chaque individu selon la fréquence (Freq)
df_expanded <- df[rep(1:nrow(df), df$Freq), c("Class", "Sex", "Survived")]
# tableau de Burt
burt <- tab.disjonctif(df_expanded)
head(burt) 1st 2nd 3rd Crew Male Female No Yes
3 0 0 1 0 1 0 1 0
3.1 0 0 1 0 1 0 1 0
3.2 0 0 1 0 1 0 1 0
3.3 0 0 1 0 1 0 1 0
3.4 0 0 1 0 1 0 1 0
3.5 0 0 1 0 1 0 1 0
# matrice complète de Burt
burt_mat <- crossprod(as.matrix(burt))
print(burt_mat) 1st 2nd 3rd Crew Male Female No Yes
1st 325 0 0 0 180 145 122 203
2nd 0 285 0 0 179 106 167 118
3rd 0 0 706 0 510 196 528 178
Crew 0 0 0 885 862 23 673 212
Male 180 179 510 862 1731 0 1364 367
Female 145 106 196 23 0 470 126 344
No 122 167 528 673 1364 126 1490 0
Yes 203 118 178 212 367 344 0 711
df_expanded <- df[rep(1:nrow(df), df$Freq), c("Class", "Sex", "Survived")]
head(df_expanded) Class Sex Survived
3 3rd Male No
3.1 3rd Male No
3.2 3rd Male No
3.3 3rd Male No
3.4 3rd Male No
3.5 3rd Male No
# l'ACM
res_acm <- MCA(df_expanded, graph = FALSE)
summary(res_acm)
Call:
MCA(X = df_expanded, graph = FALSE)
Eigenvalues
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
Variance 0.581 0.352 0.333 0.243 0.157
% of var. 34.856 21.100 20.000 14.596 9.448
Cumulative % of var. 34.856 55.956 75.956 90.552 100.000
Individuals (the 10 first)
Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3 ctr cos2
3 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
3.1 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
3.2 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
3.3 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
3.4 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
3.5 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
3.6 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
3.7 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
3.8 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
3.9 | -0.409 0.013 0.175 | -0.762 0.075 0.608 | -0.366 0.018 0.140 |
Categories
Dim.1 ctr cos2 v.test Dim.2 ctr cos2 v.test
1st | 1.288 14.064 0.288 25.153 | 1.100 16.937 0.210 21.476 |
2nd | 0.628 2.928 0.059 11.356 | -0.422 2.191 0.027 -7.643 |
3rd | 0.019 0.007 0.000 0.610 | -1.275 49.392 0.767 -41.083 |
Crew | -0.690 10.997 0.321 -26.556 | 0.749 21.373 0.377 28.804 |
Male | -0.430 8.337 0.680 -38.690 | 0.100 0.753 0.037 9.044 |
Female | 1.583 30.706 0.680 38.690 | -0.370 2.771 0.037 -9.044 |
No | -0.524 10.647 0.574 -35.549 | -0.182 2.127 0.069 -12.361 |
Yes | 1.097 22.313 0.574 35.549 | 0.382 4.457 0.069 12.361 |
Dim.3 ctr cos2 v.test
1st -0.910 12.215 0.143 -17.756 |
2nd 2.402 74.715 0.858 43.454 |
3rd -0.634 12.893 0.190 -20.435 |
Crew 0.066 0.176 0.003 2.547 |
Male 0.000 0.000 0.000 0.000 |
Female 0.000 0.000 0.000 0.000 |
No 0.000 0.000 0.000 0.000 |
Yes 0.000 0.000 0.000 0.000 |
Categorical variables (eta2)
Dim.1 Dim.2 Dim.3
Class | 0.488 0.948 1.000 |
Sex | 0.680 0.037 0.000 |
Survived | 0.574 0.069 0.000 |
Le tableau des valeurs propres présente la variance expliquée par chacun des axes de l’ACM. Le premier axe concentre à lui seul 34,9 % de l’information totale, ce qui indique qu’il traduit la relation la plus forte entre les modalités. Le deuxième axe factoriel explique 21,1 % supplémentaires, portant le cumul à près de 56 %. Ainsi, l’opposition structurante révélée par les deux premiers axes rend déjà compte de plus de la moitié de l’information du jeu de données. Le troisième contribue à hauteur de 20 %, ce qui permet d’atteindre un cumul d’environ 76 %. Il apporte donc encore un éclairage pertinent, en mettant en évidence des contrastes complémentaires non visibles sur les deux premiers axes. L’essentiel de la structure des données peut être interprété à partir des deux premiers axes, qui résument les principales oppositions. Toutefois, l’ajout du troisième axe est utile pour affiner l’analyse et restituer une vision plus complète des relations entre les modalités.
Avec 8 modalités et un axe, la contribution moyenne est de 1/8 = 12,5 %. Une contribution supérieure à 12,5 % peut donc être considérée comme importante. Enfin, le cos² (qualité de représentation) rappelle qu’une modalité peut contribuer fortement à un axe mais rester mal représentée si son cos² est faible.
Le premier axe est principalement structuré par l’opposition entre les modalités Female (cos² = 0,68) et Male (cos² = 0,68). Il met en valeur également l’opposition entre Yes (survie, cos² = 0,57) et No (décès, cos² = 0,57). Enfin, la modalité 1st class se projette du côté positif de l’axe, tandis que Crew se situe du côté négatif. L’axe 1 oppose donc clairement les femmes, la 1ʳᵉ classe et la survie aux hommes, à l’équipage et à la mortalité.
Le deuxième axe est dominé par la modalité 3rd class (cos² = 0,77), fortement opposée à Crew (cos² = 0,38). La modalité 1st class contribue aussi positivement à cet axe. On peut donc interpréter l’axe 2 comme différenciant les passagers de 3ᵉ classe des membres d’équipage et des passagers de 1ʳᵉ classe.
Le troisième axe est construit presque exclusivement par la modalité 2nd class (cos² = 0,86). Cet axe traduit donc la spécificité des passagers de deuxième classe, qui ne se retrouvaient pas dans les oppositions principales des deux premiers axes.
# Pourcentage d'inertie expliqué par chaque dimension
fviz_screeplot(res_acm, addlabels = TRUE, ylim = c(0, 80))Warning in geom_bar(stat = "identity", fill = barfill, color = barcolor, :
Ignoring empty aesthetic: `width`.
L’ébouli des valeurs propres montre que l’essentiel de la structure des données peut être interprété avec les axes 1 et 2, éventuellement en ajoutant l’axe 3 pour affiner l’analyse. Les autres axes capturent des variations secondaires moins importantes.
# plan factoriel
fviz_mca_var(res_acm, repel = TRUE)L’analyse en composantes multiples réalisée sur le jeu de données Titanic permet de mettre en évidence les relations entre les modalités des variables Classe, Sexe et Survie. Le premier axe factoriel, qui explique près de 35 % de l’inertie, oppose nettement les modalités « 1ʳᵉ classe », « Femme » et « Survécu » aux modalités « Équipage », « Homme » et « Non-survécu ». Cet axe reflète donc l’influence déterminante de la classe sociale et du sexe dans les chances de survie.
Le second axe, qui représente environ 21 % de l’inertie, différencie principalement les passagers de troisième classe, situés en bas du plan, et les membres d’équipage, positionnés en haut. Il souligne la spécificité de ces deux groupes : les passagers de troisième classe, souvent associés à une forte mortalité, et les membres d’équipage, en majorité masculins, également fortement exposés au risque de décès.
L’examen conjoint des deux axes révèle plusieurs associations fortes. Les femmes de première classe apparaissent fortement liées à la survie, traduisant une priorité d’évacuation en leur faveur. À l’inverse, les hommes de troisième classe se rapprochent des non-survivants, ce qui met en évidence leur grande vulnérabilité lors du naufrage. Les membres d’équipage, très majoritairement masculins, présentent également une proximité marquée avec la modalité « Non-survécu ».
Donc l’ACM confirme que les probabilités de survie sur le Titanic dépendent fortement de la combinaison entre la classe sociale, le sexe et le statut de passager ou de membre d’équipage. Les femmes de première classe bénéficiaient de la meilleure chance de survie, tandis que les hommes de troisième classe et de l’équipage se trouvaient dans les situations les plus défavorables.
fviz_mca_var(res_acm, axes = c(1, 3), repel = TRUE)L’axe 3 (20 %) met en relief d’autres contrastes : en haut, la modalité 2nd class, et en bas 3rd class. Cet axe différencie donc les classes intermédiaires (2e) des classes plus populaires (3e).
L’analyse en composantes multiples (ACM) du jeu de données Titanic montre que la survie dépendait fortement de la combinaison entre la classe sociale et le sexe. Le premier axe (34,9 % de l’inertie) oppose les femmes de première classe, associées à la survie, aux hommes de l’équipage et de troisième classe, proches de la mortalité. Le deuxième axe (21,1 %) différencie surtout les passagers de troisième classe, fortement exposés au risque, des membres d’équipage et des passagers de première classe, tandis que le troisième axe (20 %) met en évidence la spécificité de la deuxième classe, occupant une position intermédiaire. Globalement, l’ACM confirme que les femmes de première classe bénéficiaient des meilleures chances de survie, alors que les hommes de troisième classe et de l’équipage se trouvaient dans les situations les plus défavorables.