taux_2A <- bdd_bloc_1A_2A %>%select(bloc_an, annee_ecole,contains("nb_")) %>%filter(annee_ecole =="2A") %>%arrange(desc(bloc_an)) %>%# calcul du total lignemutate(Total =rowSums(select(., where(is.numeric)), na.rm =TRUE)) %>%# calcul des pourcentages (sauf bloc_an, annee_ecole, Total)mutate(across(-c(bloc_an, annee_ecole, Total), ~round(.x / Total *100, 1))) %>%select(-Total)taux_2A %>%arrange(desc(bloc_an)) %>%# tri inverse sur bloc_ankable(format ="html", caption ="Répartition selon la filière d'entrée",align ="c") %>%# toutes les colonnes centréeskable_styling(bootstrap_options =c("striped", "hover", "condensed"),full_width =FALSE,position ="center",fixed_thead =TRUE ) %>%column_spec(1, width ="8em")
Code
# On part de taux_1A et on repasse en format longtaux_2A_long <- taux_2A %>%pivot_longer(cols =-c(bloc_an, annee_ecole),names_to ="spe_entree",values_to ="pct" )# Graphique : barres empilées en % par annéeggplot(taux_2A_long, aes(x = bloc_an, y = pct, fill = spe_entree)) +geom_col(position ="stack") +geom_text(aes(label =paste0(pct, "%")),position =position_stack(vjust =0.5),size =3, color ="white") +labs(title ="Répartition des élèves de 1A par filière d'entrée (%)",x ="Année",y ="Part des élèves (%)",fill ="Filière d'entrée" ) +theme_minimal(base_size =12) +theme(legend.position ="right")
0.3 2.2. Moyenne des élèves selon la spécialité à l’entrée
0.5.1 2.1. Évolution des écarts de rang d’intégration entre attachés et ingénieurs (filière mathématiques)
Afin de comparer les rangs année par année et par filière, un rang standardisé est calculé pour chaque année. Il correspond à son rang au concours commun divisé par le rang maximum d’intégration à l’Ensai au concours commun.
Chaque année, les étudiants redoublants (1) ont un rang harmonisé plus élevé (moins bon classement) que les non-redoublants (0).
Exemple 2015 : non-redoublants ≈ 64 vs redoublants ≈ 78. Exemple 2019 : non-redoublants ≈ 57 vs redoublants ≈ 64.
Le décalage moyen est d’environ +7 à +15 points pour les redoublants.
L’écart-type est un peu plus petit chez les redoublants → leur distribution est plus concentrée.
La médiane suit la même logique que la moyenne.
Toutefois, la relation semble se modifier dans le temps, avec un contexte particulier en 2023-2024 (effet CCNIP et logique de classement différente, à creuser).
Sur la période d’ensemble, le lien est hautement significatif mais la corrélation est plutôt faible (coefficient de corrélation linéaire de Pearson de ), autour de 12, mais tend à baisser (voire même s’inverser en 2024 - un étudiant bien classé a dû redoubler)
newdata <-data.frame(ccc_ran_com_standard =seq(0, 1, length.out =100))newdata$pred <-predict(mod_logit, newdata, type ="response")bdd_plot <- bdd_math %>%mutate(bin =cut(ccc_ran_com_standard, breaks =20)) %>%group_by(bin) %>%summarise(x =mean(ccc_ran_com_standard, na.rm =TRUE),prop_redouble =mean(redoublement, na.rm =TRUE) )ggplot() +geom_point(data = bdd_plot, aes(x = x, y = prop_redouble), color ="blue") +geom_line(data = newdata, aes(x = ccc_ran_com_standard, y = pred), color ="red", size =1) +labs(x ="Rang harmonisé standardisé",y ="Proportion / Probabilité de redoublement",title ="Redoublement observé vs modèle logistique") +theme_minimal()
Code
library(pROC)pred <-predict(mod_logit, type ="response")roc_obj <-roc(bdd_math$redoublement, pred)auc(roc_obj) # entre 0.5 (hasard) et 1 (parfait)
1 4. Les matières mathématiques et la filière d’origine
1.1 4.2. En statique
Code
######Étudier la réussite aux matières mathématiques en fonction de la filière d'origine / mode d'intégration###bdd_spécial_mat <- bdd_1A_2A_unique %>%filter(!is.na(MSS1), annee_ecole=="1A") %>%# on enlève les NAmutate(spe_entree =factor(spe_entree))ggplot(bdd_spécial_mat, aes(x = spe_entree, y = MSS1, fill = spe_entree)) +geom_boxplot() +labs(title ="Réussite en mathématiques du semestre 1 selon la filière d'origine",x ="Filière d'origine",y ="Note en mathématiques") +theme_minimal()
Code
anova_filiere <-aov(MSS1 ~ spe_entree, data = bdd_spécial_mat)summary(anova_filiere)TukeyHSD(anova_filiere)
Code
bdd_spécial_mat_periode <- bdd_1A_2A_unique %>%filter(!is.na(MSS1), annee_ecole=="1A") %>%mutate(across(c(spe_entree, bloc_an), as.factor))ggplot(bdd_spécial_mat_periode, aes(x = spe_entree, y = MSS1, fill = bloc_an)) +geom_boxplot() +labs(title ="Réussite en mathématiques selon la filière d'origine",x ="Filière d'origine",y ="Note en mathématiques") +theme_minimal()
Il existe une différence significative entre les semestres (p=8.32e-13), le semestre 2 ayant des notes plus élevées en moyenne.en moyenne, les notes de MSS sont significativement plus hautes au semestre 2 qu’au semestre 1.
Les résultats évoluent aussi significativement selon les blocs d’années (2.84e-13), indiquant une amélioration globale au fil du temps.les performances changent selon les périodes (meilleures dans les blocs récents).
Enfin, l’interaction est significative (p=6.01e-05), ce qui montre que l’écart entre semestre 1 et semestre 2 varie selon les périodes : faible avant 2020, plus marqué après 2022.la différence entre S1 et S2 n’est pas la même selon les périodes.
3 5. Niveau d’anglais et scolarité à l’ENSAI
Code
#effet du niveau d'anglais sur les résultats scolairesdonnees_anglais <- bdd_1A_2A_unique %>%select(annee_ecole, certif_anglais_org, certif_anglais_score, moyenne_generale, AV, sexe, filiere_1A, concours_origine, bac_mention, paysnai, nationalite, redoublement,spe_entree,bloc_an) %>%mutate(# Nettoyage du score TOEICscore_anglais =case_when(!is.na(certif_anglais_score) & certif_anglais_score !=""~as.numeric(certif_anglais_score),TRUE~NA_real_ ),# Indicateur de certificationa_certification =case_when(!is.na(certif_anglais_org) & certif_anglais_org !=""~"Oui",TRUE~"Non" ),# Catégorisation du niveau TOEICniveau_toeic =case_when(is.na(score_anglais) ~"Non renseigné", score_anglais >=900~"Excellent (≥900)", score_anglais >=800~"Très bien (800-899)", score_anglais >=700~"Bien (700-799)", score_anglais >=600~"Correct (600-699)", score_anglais <600~"Insuffisant (<600)",TRUE~"Non renseigné" ),# Indicateur d'étudiant étrangeretudiant_etranger =case_when( nationalite !="Français"| paysnai !="FRANCE"~"Étranger",TRUE~"Français" ),# Indicateur de réussitereussite =case_when( AV =="1"~"Réussite", AV =="0"~"Échec",TRUE~"Non renseigné" ),# Niveau de performance généraleniveau_performance =case_when( moyenne_generale >=16~"Excellent", moyenne_generale >=14~"Très bien", moyenne_generale >=12~"Bien", moyenne_generale >=10~"Assez bien", moyenne_generale <10~"Insuffisant",TRUE~"Non évalué" ) )
3.1 5.1. Niveau d’anglais des élèves à l’ENSAI
Code
cat("=== APERÇU DES DONNÉES ANGLAIS ===\n")cat("Nombre total d'observations:", nrow(donnees_anglais), "\n")cat("Étudiants avec certification anglais:", sum(donnees_anglais$a_certification =="Oui", na.rm =TRUE), "\n")cat("Scores TOEIC disponibles:", sum(!is.na(donnees_anglais$score_anglais)), "\n")
Code
# Distribution des certificationsdistrib_certif <- donnees_anglais %>%count(annee_ecole, certif_anglais_org) %>%filter(!is.na(certif_anglais_org)) %>%arrange(annee_ecole, desc(n))cat("\n=== DISTRIBUTION DES CERTIFICATIONS ===\n")print(distrib_certif)
Code
# Statistiques des scores TOEIC par annéestats_toeic_annee <- donnees_anglais %>%filter(!is.na(score_anglais)) %>%group_by(annee_ecole,bloc_an) %>%summarise(n_scores =n(),score_moyen =round(mean(score_anglais), 0),score_median =round(median(score_anglais), 0),score_min =min(score_anglais),score_max =max(score_anglais),ecart_type =round(sd(score_anglais), 0),.groups ='drop' )cat("\n=== STATISTIQUES SCORES TOEIC PAR ANNÉE ===\n")print(stats_toeic_annee)
3.2 5.2. Niveau d’anglais et réussite
3.2.1 5.2.1 Certification et moyenne générale
Code
# Comparaison moyenne générale selon la certificationimpact_certification <- donnees_anglais %>%group_by(annee_ecole, a_certification) %>%summarise(n =n(),moyenne_gen =round(mean(moyenne_generale, na.rm =TRUE), 2),mediane_gen =round(median(moyenne_generale, na.rm =TRUE), 2),taux_reussite =round(mean(AV =="1", na.rm =TRUE) *100, 1),.groups ='drop' )cat("\n=== IMPACT DE LA CERTIFICATION SUR LA PERFORMANCE ===\n")print(impact_certification)
3.2.2 5.2.2. Niveau d’anglais et moyenne générale
Code
# Analyse par niveau de TOEICimpact_niveau_toeic <- donnees_anglais %>%filter(!is.na(score_anglais)) %>%group_by(annee_ecole, niveau_toeic,bloc_an) %>%summarise(n =n(),moyenne_gen =round(mean(moyenne_generale, na.rm =TRUE), 2),taux_reussite =round(mean(AV =="1", na.rm =TRUE) *100, 1),score_toeic_moyen =round(mean(score_anglais), 0),.groups ='drop' ) %>%filter(n >=3)cat("\n=== IMPACT DU NIVEAU TOEIC SUR LA PERFORMANCE ===\n")print(impact_niveau_toeic)
Les coefficients (~0.11) indiquent une relation très faible mais positive entre les deux variables.
Autrement dit, les étudiants avec un meilleur score TOEIC ont tendance à avoir une meilleure moyenne générale, mais cette tendance est loin d’être forte.
Les résultats mettent en évidence une corrélation positive mais faible entre le score TOEIC et la moyenne générale, aussi bien en 1A (r = 0.11, p < 0.01) qu’en 2A (r = 0.113, p < 0.001). Bien que statistiquement significative en raison du grand nombre d’observations, la force de la relation reste limitée : le score TOEIC n’explique qu’environ 1% de la variance des résultats académiques. Cela suggère que la maîtrise de l’anglais est associée aux performances générales, mais qu’elle n’en constitue pas un facteur déterminant.
L’analyse met en évidence une corrélation globalement faible entre score TOEIC et moyenne générale, variant selon les périodes et les années d’école. En 1A, la relation est le plus souvent non significative, ce qui suggère que la maîtrise de l’anglais n’est pas un facteur déterminant de la réussite académique au début du cursus. En revanche, en 2A, la corrélation devient significative dans certains blocs (notamment 2018–2020 avec r = 0.212, p < 0.001), indiquant qu’un meilleur score TOEIC est associé à une moyenne générale légèrement plus élevée. Toutefois, même dans ces cas, la part de variance expliquée reste faible (<5%), soulignant que la performance académique dépend principalement d’autres facteurs.