Exercice 1 TP3 + Exercice ajout

Author

Amine LAHBIB

Partie 1

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)

Données et objectif

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 :

  • les effectifs observés (tableau donné),
  • les effectifs théoriques sous l’hypothèse d’indépendance,
  • les profils lignes (distribution conditionnelle par ligne),
  • les profils colonnes (distribution conditionnelle par colonne),
  • le tableau des contributions au Khi2
  • le test du Khi2 global et sa conclusion
  • l’AFC à un facteur
  • l’AFC à deux facteurs
  • le V de Cramer et son interprétation

1) Effectifs observés

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


2) Effectifs théoriques (sous H0 d’indépendance)

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.

3) Profils lignes (proportions conditionnelles par ligne en %)

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)
Profils lignes (%)
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.

4) Profils colonnes (proportions conditionnelles par colonne en %)

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)
Profils colonnes (%)
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.

5) Contributions au Khi2

La contribution de la cellule (i,j) au Khi2 est :

\[ C_{ij} = \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]

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

6) Test du Khi2 (test d’indépendance)

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

  • Si la p-valeur est inférieure au niveau de signification choisi (par exemple \(\alpha = 0.05\)), on rejette H0 et on conclut qu’il existe une association statistiquement significative entre la catégorie socioprofessionnelle des parents et la filière d’études au risque α définie à 5%.
  • Si la p-valeur est supérieure à \(\alpha\), on ne rejette pas H0 et on considère qu’il n’y a pas de preuve suffisante pour affirmer une dépendance.

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

7) Mesure de l’association : V de Cramer

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.

8) AFC

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

Partie II

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)

Tableau de Burt

  • 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\]

    \(X\) est le tableau disjonctif complet (individus × modalités).

Interprétation

  • Chaque fois qu’un individu possède une combinaison de modalités, il ajoute +1 dans toutes les cases correspondantes du tableau.
  • En sommant les contributions de tous les individus, on obtient le tableau de Burt.

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

Ligne 1st

  • 1st – Male = 180 → 180 hommes étaient en 1ʳᵉ classe.
  • 1st – Female = 145 → 145 femmes étaient en 1ʳᵉ classe.
  • 1st – No = 122 → 122 passagers de 1ʳᵉ classe n’ont pas survécu.
  • 1st – Yes = 203 → 203 passagers de 1ʳᵉ classe ont survécu.

Ligne 3rd

  • 3rd – Male = 510 → 510 hommes étaient en 3ᵉ classe.
  • 3rd – Female = 196 → 196 femmes étaient en 3ᵉ classe.
  • 3rd – No = 528 → 528 passagers de 3ᵉ classe n’ont pas survécu.
  • 3rd – Yes = 178 → 178 passagers de 3ᵉ classe ont survécu.

Ligne Crew

  • Crew – Male = 862 → 862 membres d’équipage étaient des hommes.
  • Crew – Female = 23 → 23 membres d’équipage étaient des femmes.
  • Crew – No = 673 → 673 membres d’équipage n’ont pas survécu.
  • Crew – Yes = 212 → 212 membres d’équipage ont survécu.

Ligne No

  • No – Male = 1364 → 1364 hommes n’ont pas survécu.
  • No – Female = 126 → 126 femmes n’ont pas survécu.

Ligne Yes

  • Yes – Male = 367 → 367 hommes ont survécu.
  • Yes – Female = 344 → 344 femmes ont survécu.

Croisements Class × Sex

  • 1st – Male = 180 → 180 hommes étaient en 1ʳᵉ classe.
  • 1st – Female = 145 → 145 femmes étaient en 1ʳᵉ classe.
  • 2nd – Male = 179 → 179 hommes étaient en 2ᵉ classe.
  • 2nd – Female = 106 → 106 femmes étaient en 2ᵉ classe.
  • 3rd – Male = 510 → 510 hommes étaient en 3ᵉ classe.
  • 3rd – Female = 196 → 196 femmes étaient en 3ᵉ classe.
  • Crew – Male = 862 → 862 hommes faisaient partie de l’équipage.
  • Crew – Female = 23 → 23 femmes faisaient partie de l’équipage.

Croisements Class × Survived

  • 1st – No = 122 → 122 passagers de 1ʳᵉ classe n’ont pas survécu.
  • 1st – Yes = 203 → 203 passagers de 1ʳᵉ classe ont survécu.
  • 2nd – No = 167 → 167 passagers de 2ᵉ classe n’ont pas survécu.
  • 2nd – Yes = 118 → 118 passagers de 2ᵉ classe ont survécu.
  • 3rd – No = 528 → 528 passagers de 3ᵉ classe n’ont pas survécu.
  • 3rd – Yes = 178 → 178 passagers de 3ᵉ classe ont survécu.
  • Crew – No = 673 → 673 membres d’équipage n’ont pas survécu.
  • Crew – Yes = 212 → 212 membres d’équipage ont survécu.

Croisements Sex × Survived

  • Male – No = 1364 → 1364 hommes n’ont pas survécu.
  • Male – Yes = 367 → 367 hommes ont survécu.
  • Female – No = 126 → 126 femmes n’ont pas survécu.
  • Female – Yes = 344 → 344 femmes ont survécu.
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.

Axe 1

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

Axe 2

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.

Axe 3

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

Conclusion

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.