| Classe | Personnes | Survivants | Décès | Proportion de survie |
|---|---|---|---|---|
| 1re | 87 | 36 | 51 | 0.414 |
| 2e | 253 | 48 | 205 | 0.190 |
| 3e | 717 | 133 | 584 | 0.185 |
- Ajout
- Mise à jour
Empress of Ireland : compter les personnes derrière les tableaux
Comment comparer la survie selon la classe et les catégories historiques sans confondre lignes, personnes et proportions ?
Préparation enseignante
Explorer la survie selon la classe et les catégories historiques d’âge et de sexe, en utilisant correctement des effectifs regroupés. Durée indicative : 60 à 90 minutes; le prolongement de régression est facultatif. L’activité est exécutée techniquement, mais n’a pas été testée en classe.
- Extraire entièrement la trousse et ouvrir
Donnees-bleues.Rprojdans RStudio. - Avant la séance, ouvrir
installer-packages.Ret cliquer sur Source avec Internet. - Ouvrir
datasets/empress-of-ireland/activite-courte.R, puis cliquer sur Source. Les CSV sont inclus; l’activité fonctionne ensuite hors ligne. Les tableaux apparaissent dans Console et les graphiques dans Plots. Les fichiers de sortie sont dansoutputs/.
Télécharger la trousse avec les données
13 Ko. Préparation : 07/09/2026 à 10:22 (heure du Québec).
Les fichiers de données sont inclus dans la trousse.
Conditions de la source · Provenance et empreinte du ZIP
Fichiers inclus
-
empress_passengers.csv: 24 lignes, 7 colonnes. -
empress_passenger_groups.csv: 12 lignes, 7 colonnes. -
empress_crew_groups.csv: 6 lignes, 5 colonnes. -
empress_sources_comparison.csv: 4 lignes, 7 colonnes.
Contexte et unité d’observation
Le rapport final de la Commission d’enquête sur le naufrage de l’Empress of Ireland fournit des tableaux par classe, sexe et catégorie adulte/enfant. Nous reprenons leurs catégories, sans leur attribuer un seuil d’âge numérique non documenté. Le rapport concerne un événement historique dans le Saint-Laurent, le 29 mai 1914. Ses comptes ne décrivent pas un échantillon aléatoire de traversées.
Le fichier principal a 24 lignes, soit les combinaisons de trois classes, deux sexes, deux catégories d’âge et deux statuts. La somme de frequency représente 1 057 passagers. Ce format est analogue au tableau Titanic de R, en se limitant ici aux passagers. L’équipage est décrit dans une autre table, selon les groupes effectivement fournis par la source.
Les décès sont obtenus par différence entre le total et les survivants dans chaque groupe du rapport. Cette opération n’attribue aucun statut aux noms dont la survie reste inconnue dans les listes nominatives du musée.
Résultat attendu
Remettre un tableau de contingence, les deux premiers graphiques et les six réponses. Les résultats ci-dessous sont recalculés à partir de la trousse distribuée.
Effectifs et proportions
La troisième classe compte le plus de survivants en nombre, alors que la première classe a la proportion de survie la plus élevée. Les dénominateurs expliquent cette différence. Ces comparaisons décrivent le rapport; elles ne prouvent pas un effet causal de la classe.
Comparer les groupes
| Classe | Sexe | Âge | Personnes | Survivants | Décès | Proportion de survie |
|---|---|---|---|---|---|---|
| 1re | Masculin | Adulte | 49 | 24 | 25 | 0.490 |
| 1re | Masculin | Enfant | 0 | 0 | 0 | NA |
| 1re | Féminin | Adulte | 34 | 11 | 23 | 0.324 |
| 1re | Féminin | Enfant | 4 | 1 | 3 | 0.250 |
| 2e | Masculin | Adulte | 114 | 33 | 81 | 0.289 |
| 2e | Masculin | Enfant | 11 | 0 | 11 | 0.000 |
| 2e | Féminin | Adulte | 107 | 13 | 94 | 0.121 |
| 2e | Féminin | Enfant | 21 | 2 | 19 | 0.095 |
| 3e | Masculin | Adulte | 446 | 115 | 331 | 0.258 |
| 3e | Masculin | Enfant | 54 | 1 | 53 | 0.019 |
| 3e | Féminin | Adulte | 169 | 17 | 152 | 0.101 |
| 3e | Féminin | Enfant | 48 | 0 | 48 | 0.000 |
Le groupe des garçons de première classe est vide dans le rapport : sa proportion est indéfinie. En revanche, les 11 garçons de deuxième classe forment un groupe non vide avec zéro survivant. Une cellule nulle et une proportion nulle n’ont donc pas toujours le même sens.
Consignes : six exercices
- Le fichier contient 24 lignes. Combien de personnes représente-t-il et quelle commande faut-il employer ?
- Quelle classe compte le plus de survivants ? Quelle classe présente la proportion de survie la plus élevée ? Donner les effectifs et les dénominateurs.
- Construire le tableau classe × survie avec
xtabs(frequency ~ classe + statut, data = passagers). Expliquer pourquoitable(passagers$classe, passagers$statut)donne une autre réponse. - Calculer la proportion globale de survivants. Pourquoi la moyenne simple des trois proportions par classe donne-t-elle une autre valeur ?
- Comparer les garçons des première et deuxième classes. Dans quel cas la proportion de survie est-elle indéfinie ?
- Peut-on développer les effectifs en 1 057 lignes puis les joindre aux noms du musée ou en déduire un effet causal de la classe ? Justifier les deux réponses.
Point d’arrêt : remettre un tableau de contingence, les deux premiers graphiques et six réponses courtes. Les sections suivantes sont facultatives.
Prolongement : modèle binomial sur les comptes
Le code ajuste glm(cbind(survivants, deces) ~ classe + sexe + age, family = binomial(), data = ...) sur les 11 groupes non vides. Chaque groupe contribue avec son nombre de personnes. Une régression non pondérée sur les 24 lignes traiterait à tort les cellules comme autant de personnes.
| Terme | Coefficient logit | Rapport de cotes |
|---|---|---|
| (Intercept) | 0.109 | 1.115 |
| classe2e | -1.007 | 0.365 |
| classe3e | -1.208 | 0.299 |
| sexeFéminin | -0.989 | 0.372 |
| ageEnfant | -2.083 | 0.125 |
Les références sont la première classe, la catégorie masculine et les adultes. Les rapports de cotes ne sont pas des rapports de probabilités. Le modèle suppose des effets additifs sur l’échelle logit et une structure binomiale conditionnelle. Il s’agit d’un résumé descriptif de cet événement. La convergence numérique et la concordance des comptes ajustés avec le total ne démontrent ni indépendance historique des personnes, ni performance prédictive sur un autre naufrage. Aucune validation prédictive externe n’est revendiquée.
Prolongement : comparer les sources
| Liste | Classe/type | Personnes listées | Survivants marqués | Statuts inconnus | Personnes dans l’enquête | Survivants dans l’enquête |
|---|---|---|---|---|---|---|
| nml_crew_pdf | crew | 418 | 234 | 184 | 420 | 248 |
| nml_first_pdf | first | 87 | 33 | 54 | 87 | 36 |
| nml_second_pdf | second | 254 | 50 | 204 | 253 | 48 |
| nml_third_pdf | third | 713 | 136 | 577 | 717 | 133 |
Les listes nominatives NML ont 1 472 entrées et 453 survivants marqués après correction de l’astérisque placé dans le nom de George Joshua Metcalfe. Les 1 019 autres statuts restent inconnus dans ce corpus. L’écart avec le rapport final ne désigne pas automatiquement un ensemble de personnes manquantes : certaines classes dépassent les comptes de référence tandis que d’autres sont en dessous. Ces sources ne sont pas fusionnées par ajustement forcé des totaux.
Corrigé commenté
sum(passagers$frequency)donne 1 057;nrow(passagers)donne 24 cellules.- La troisième classe compte 133 survivants sur 717 personnes. La première classe présente la proportion la plus élevée : 36 sur 87, soit environ 41,4 %.
xtabs()additionne les effectifs.table()compte les lignes du fichier et ne tient pas compte defrequency.- La proportion globale est 217/1 057, soit environ 20,5 %. La moyenne simple par classe vaut environ 26,3 % et donne le même poids à des classes de tailles différentes.
- Première classe : 0/0 est indéfini. Deuxième classe : 0/11 vaut zéro. Le code préserve cette distinction.
- Une expansion mécanique ne produit ni noms, ni liens familiaux, ni âges exacts. Aucune correspondance individuelle n’est établie. Une association de survie selon la classe ne démontre pas une causalité.
Limites à faire nommer
- Les comptes décrivent un événement historique; ils ne forment pas un échantillon aléatoire de traversées.
- Les catégories adulte/enfant du rapport ne donnent pas d’âges exacts ni de seuil numérique établi ici.
- L’équipage utilise une autre table et d’autres regroupements. La forme longue et la forme en 12 groupes représentent les mêmes passagers.
- Une cellule vide n’est pas une personne sans renseignement. Les statuts inconnus des listes nominatives ne deviennent pas des décès.
- Les associations et le modèle ajusté ne constituent ni une preuve causale ni une validation prédictive externe.
Code complet
Le script affiche les résultats et enregistre les sorties dans outputs/. Il ne télécharge aucune donnée.
# Ouvrir Donnees-bleues.Rproj, puis cliquer sur Source dans RStudio.
# Les CSV sont inclus. Aucun téléchargement n'est effectué pendant l'activité.
library(readr)
library(dplyr)
library(tidyr)
library(ggplot2)
passagers <- read_csv("data/processed/empress-of-ireland/empress_passengers.csv", show_col_types = FALSE)
equipage <- read_csv("data/processed/empress-of-ireland/empress_crew_groups.csv", show_col_types = FALSE)
stopifnot(nrow(passagers) == 24L, sum(passagers$frequency) == 1057L,
sum(passagers$frequency[passagers$survived == 1L]) == 217L)
passagers <- passagers |>
mutate(classe = factor(class, c("first", "second", "third"), c("1re", "2e", "3e")),
sexe = factor(sex, c("male", "female"), c("Masculin", "Féminin")),
age = factor(age_group, c("adult", "child"), c("Adulte", "Enfant")),
statut = factor(survived, c(0, 1), c("Décès", "Survie")))
groupes_source <- read_csv("data/processed/empress-of-ireland/empress_passenger_groups.csv", show_col_types = FALSE)
comparaison <- read_csv("data/processed/empress-of-ireland/empress_sources_comparison.csv", show_col_types = FALSE)
stopifnot(nrow(groupes_source) == 12L, sum(groupes_source$total) == 1057L,
sum(groupes_source$survivors) == 217L, sum(comparaison$listed_people) == 1472L,
sum(comparaison$unknown_status) == 1019L)
# Une ligne représente une cellule de tableau; il faut additionner frequency.
portrait <- passagers |>
group_by(classe) |>
summarise(personnes = sum(frequency), survivants = sum(frequency[survived == 1L]),
deces = personnes - survivants, proportion_survie = survivants / personnes, .groups = "drop")
strates <- passagers |>
group_by(classe, sexe, age) |>
summarise(personnes = sum(frequency), survivants = sum(frequency[survived == 1L]),
deces = personnes - survivants, .groups = "drop") |>
mutate(proportion_survie = if_else(personnes > 0L, survivants / personnes, NA_real_))
contingence <- xtabs(frequency ~ classe + statut, data = passagers)
theme_set(theme_minimal(base_size = 12))
graphique_effectifs <- ggplot(passagers, aes(classe, frequency, fill = statut)) +
geom_col(width = .65) +
scale_fill_manual(values = c("#667785", "#0072B2")) +
labs(x = "Classe des passagers", y = "Nombre de personnes", fill = NULL) +
theme(legend.position = "bottom")
graphique_proportions <- ggplot(portrait, aes(classe, proportion_survie)) +
geom_col(fill = "#0072B2", width = .65) +
geom_text(aes(label = sprintf("%d / %d", survivants, personnes)), vjust = -.5) +
scale_y_continuous(labels = function(x) paste0(round(100 * x), " %"), limits = c(0, .5)) +
labs(x = "Classe des passagers", y = "Proportion de survivants")
graphique_strates <- ggplot(filter(strates, personnes > 0L),
aes(classe, proportion_survie, colour = sexe, size = personnes)) +
geom_point(position = position_dodge(width = .3)) +
facet_wrap(~ age) +
scale_colour_manual(values = c("#0072B2", "#D55E00")) +
scale_y_continuous(labels = function(x) paste0(round(100 * x), " %"), limits = c(0, .55)) +
labs(x = "Classe des passagers", y = "Proportion de survivants",
colour = "Sexe dans le rapport", size = "Effectif") +
theme(legend.position = "bottom")
# Prolongement facultatif : modèle binomial de comptes regroupés.
# La cellule vide est exclue de l'ajustement, sans inventer de personne.
# L'âge est la catégorie historique; son seuil numérique n'est pas établi ici.
modele <- glm(cbind(survivants, deces) ~ classe + sexe + age,
family = binomial(), data = filter(strates, personnes > 0L))
coefficients <- tibble(terme = names(coef(modele)), log_rapport_cotes = unname(coef(modele)),
rapport_cotes = exp(unname(coef(modele))))
ajustement <- filter(strates, personnes > 0L) |>
mutate(proportion_ajustee = unname(predict(modele, type = "response")))
stopifnot(modele$converged, all(is.finite(coef(modele))),
abs(sum(ajustement$personnes * ajustement$proportion_ajustee) - 217) < 1e-5)
# Le tableau de l'équipage utilise des départements et rôles, sans inventer
# un croisement sexe-âge absent des tableaux examinés.
bilan <- tibble(groupe = c("Passagers", "Équipage"),
personnes = c(sum(passagers$frequency), sum(equipage$total)),
survivants = c(sum(passagers$frequency[passagers$survived == 1L]), sum(equipage$survivors))) |>
mutate(deces = personnes - survivants, proportion_survie = survivants / personnes)
dir.create("outputs", showWarnings = FALSE)
write_csv(portrait, "outputs/portrait_classes.csv")
write_csv(strates, "outputs/portrait_strates.csv")
write_csv(coefficients, "outputs/regression_logistique.csv")
write_csv(ajustement, "outputs/ajustement_strates.csv")
write_csv(bilan, "outputs/bilan_passagers_equipage.csv")
ggsave("outputs/effectifs.png", graphique_effectifs, width = 7, height = 4.5, dpi = 160)
ggsave("outputs/proportions.png", graphique_proportions, width = 7, height = 4.5, dpi = 160)
ggsave("outputs/strates.png", graphique_strates, width = 8, height = 4.8, dpi = 160)
print(portrait)
print(contingence)
print(strates)
print(bilan)
print(coefficients)
print(graphique_effectifs)
print(graphique_proportions)
print(graphique_strates)Sources et réutilisation
Commission d’enquête (1914), rapport final, partie VI, questions 1 et 17, dans les documents de la session de 1915, no 21b, pages 608, 610 et 611. Volume numérisé. Les trois pages sont dans la trousse source 1.0.0, sous references/inquiry_tables_excerpt.pdf, et consultables dans cet extrait du rapport. Le document imprimé lui-même contient « 1,417 » à la page 610; les sous-totaux donnent 1 477. La valeur 36 de première classe a été vérifiée dans l’image, car l’OCR la lit erronément comme 30.
National Museums Liverpool, listes des passagers et de l’équipage, compilées par Geoffrey E. Whitfield et Chris Stringer; copies locales documentées de 2026. Elles servent ici à une comparaison de comptes, sans redistribution des listes dans la trousse. Les URLs et empreintes sont dans le dépôt source.
R Core Team, documentation de Titanic. Le rapprochement porte sur le format de tableau, sans supposer que les catégories historiques ou contextes sont parfaitement identiques.
Le dictionnaire et les conditions de réutilisation sont inclus. Contribution pédagogique : Aurélien Nicosia, 2026.
Contribution pédagogique : Aurélien Nicosia. Cours : usage non documenté
Fiche de mise en œuvre
Repères pédagogiques
Les objectifs et critères ci-dessous permettent d’adapter la séance. La disponibilité des ressources ne constitue pas une validation de leur efficacité en classe.
- Objectifs d'apprentissage
-
- Reconnaître une cellule de tableau comme unité de ligne et additionner ses effectifs.
- Construire un tableau de contingence pondéré par les effectifs.
- Comparer des proportions en explicitant leurs dénominateurs.
- Distinguer un groupe vide, un groupe sans survivant et un statut individuel inconnu.
- Interpréter une association sans en déduire un effet causal.
- Prérequis
-
- Ouvrir un projet RStudio et exécuter un script.
- Reconnaître une variable catégorielle, un effectif et une proportion.
- Critères de réussite
-
- Les 24 cellules totalisent 1 057 passagers et 217 survivants.
- Le tableau classe × survie additionne frequency au lieu de compter les lignes.
- La conclusion distingue 133/717 en troisième classe et 36/87 en première classe.
- Le groupe vide conserve une proportion indéfinie.
- Aucun nom ni statut individuel n’est attribué à partir des comptes regroupés.
- Adaptations possibles
-
- Lire les résultats et discuter les exercices collectivement.
- Approfondir avec le modèle binomial sur les 11 groupes non vides et la comparaison des sources.
Ressources : Fichiers inclus