Institut : 2iE – Institut International d’Ingénierie de l’Eau et de l’Environnement, Ouagadougou, Burkina Faso
Filière : Master S8 – Génie Civil, Bâtiment et Travaux Publics (GC-BTP)
UE : Recherche scientifique et analyse de données assistée par IA
ECUE : STI812 – Statistique et analyse de données
Travaux dirigés : TD1 – Initiation à R/RStudio et statistique descriptive et exploratoire
Date de rédaction : 25 septembre 2026
L’analyse de données occupe une place croissante dans les métiers du génie civil et du bâtiment. Que ce soit pour contrôler la qualité d’un béton, suivre des indicateurs environnementaux sur un chantier, ou encore analyser des enquêtes de terrain, l’ingénieur civil est de plus en plus amené à manipuler des jeux de données, à en extraire des indicateurs pertinents et à en tirer des conclusions rigoureuses.
Ce rapport constitue le compte-rendu du premier travail dirigé (TD1)
du cours STI812 Statistique et analyse de données. Ce TD a pour
vocation de poser les bases de la statistique descriptive et
exploratoire sous l’environnement R/RStudio, à travers des jeux de
données classiques (airquality, HairEyeColor)
puis à travers un jeu de données propre au génie civil (essais sur
béton).
Le rapport suit fidèlement la structure et l’ordre des exercices proposés dans le recueil de travaux dirigés, et présente pour chaque exercice : le rappel des objectifs, le code R commenté, les résultats obtenus (tableaux et graphiques), ainsi qu’une interprétation statistique et, lorsque cela est pertinent, une lecture en lien avec le génie civil ou l’environnement.
Le TD1 poursuit quatre objectifs pédagogiques principaux :
ggplot2 ;Ce rapport mobilise trois jeux de données :
airquality : jeu de données fourni
nativement avec R, contenant des mesures quotidiennes de qualité de
l’air (ozone, rayonnement solaire, vent, température) relevées à New
York entre mai et septembre 1973. Il permet d’illustrer la statistique
univariée et bivariée sur des variables quantitatives, dans une logique
proche des problématiques environnementales ;HairEyeColor : jeu de données fourni
avec R, croisant la couleur des cheveux et la couleur des yeux d’un
échantillon d’étudiants. Il sert à illustrer le test d’indépendance du
khi-deux entre deux variables qualitatives ;TD_genie_civil.xlsx (feuille
beton) : jeu de données propre à la filière
GC-BTP, décrivant des éprouvettes de béton (dosage en ciment, rapport
eau/ciment, âge, affaissement, porosité, résistance à la compression,
type de granulat, présence de pathologie). Il est importé avec la
fonction read_excel() du package readxl et
sert de support à l’exercice appliqué de génie civil (Exercice 7).L’ensemble des traitements est réalisé sous R
(environnement RStudio), à l’aide des packages tidyverse
(dont dplyr et ggplot2), readxl,
knitr et kableExtra. Le chargement de ces
packages est réalisé dans le bloc de configuration (setup)
ci-dessus.
Le code ci-dessous importe la feuille beton du fichier
TD_genie_civil.xlsx. Le fichier doit être placé dans le
même dossier que ce document .Rmd (ou le chemin doit être
adapté). Si le fichier n’est pas disponible au moment de la compilation,
l’import échouera de façon silencieuse grâce à tryCatch(),
et les sections concernées (Exercice 7) ne s’exécuteront pas tant que le
fichier ne sera pas fourni.
# Import du jeu de données de génie civil (feuille "beton")
# tryCatch permet de ne pas interrompre la compilation du rapport
# si le fichier n'est pas encore présent dans le dossier de travail
beton <- tryCatch(
read_excel("TD_genie_civil.xlsx", sheet = "beton"),
error = function(e) {
message("Fichier TD_genie_civil.xlsx introuvable : les sections béton ",
"ne s'afficheront qu'une fois le fichier placé dans le dossier du projet.")
NULL
}
)
# Indicateur logique utilisé plus loin pour conditionner l'exécution
# des blocs de code relatifs au jeu de données béton
donnees_beton_disponibles <- !is.null(beton)
airqualityIl s’agit de prendre en main l’environnement RStudio (projet, script)
et de découvrir la structure du jeu de données airquality,
fourni nativement avec R.
# Chargement du jeu de donnees airquality, fourni avec R
data(airquality)
# Structure et types des variables
glimpse(airquality)
## Rows: 153
## Columns: 6
## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, 18, 14, …
## $ Solar.R <int> 190, 118, 149, 313, NA, NA, 299, 99, 19, 194, NA, 256, 290, 27…
## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6, 6.9, 9…
## $ Temp <int> 67, 72, 74, 62, 56, 66, 65, 59, 61, 69, 74, 69, 66, 68, 58, 64…
## $ Month <int> 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,…
## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,…
# Premiers indicateurs descriptifs par variable
summary(airquality)
## Ozone Solar.R Wind Temp
## Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
## 1st Qu.: 18.00 1st Qu.:115.8 1st Qu.: 7.400 1st Qu.:72.00
## Median : 31.50 Median :205.0 Median : 9.700 Median :79.00
## Mean : 42.13 Mean :185.9 Mean : 9.958 Mean :77.88
## 3rd Qu.: 63.25 3rd Qu.:258.8 3rd Qu.:11.500 3rd Qu.:85.00
## Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
## NAs :37 NAs :7
## Month Day
## Min. :5.000 Min. : 1.0
## 1st Qu.:6.000 1st Qu.: 8.0
## Median :7.000 Median :16.0
## Mean :6.993 Mean :15.8
## 3rd Qu.:8.000 3rd Qu.:23.0
## Max. :9.000 Max. :31.0
##
n_individus <- nrow(airquality)
n_variables <- ncol(airquality)
data.frame(
Indicateur = c("Nombre d'individus (jours de mesure)", "Nombre de variables"),
Valeur = c(n_individus, n_variables)
) %>%
kable(caption = "Dimensions du jeu de données airquality") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Indicateur | Valeur |
|---|---|
| Nombre d’individus (jours de mesure) | 153 |
| Nombre de variables | 6 |
Interprétation : le jeu de données
airquality comporte 153 individus (correspondant à des
jours d’observation) et 6 variables. Les variables Ozone,
Solar.R, Wind et Temp sont
quantitatives continues, tandis que Month et
Day sont des variables entières qui codent respectivement
le mois et le jour d’observation ; elles seront traitées comme facteurs
lorsque nécessaire (voir Exercice 5).
# Nombre de valeurs manquantes par variable
na_par_variable <- colSums(is.na(airquality))
data.frame(
Variable = names(na_par_variable),
Valeurs_manquantes = as.integer(na_par_variable)
) %>%
kable(caption = "Nombre de valeurs manquantes par variable") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Variable | Valeurs_manquantes |
|---|---|
| Ozone | 37 |
| Solar.R | 7 |
| Wind | 0 |
| Temp | 0 |
| Month | 0 |
| Day | 0 |
Interprétation : les valeurs manquantes se
concentrent essentiellement sur les variables Ozone et
Solar.R, ce qui est cohérent avec des difficultés de mesure
ou d’enregistrement fréquentes sur des capteurs environnementaux. Ces
valeurs manquantes devront être gérées explicitement (option
na.rm = TRUE ou na.omit()) dans la suite des
analyses, afin d’éviter que R ne renvoie des résultats non définis
(NA).
Calculer les indicateurs de position et de dispersion de la variable
Ozone, comparer moyenne et médiane pour juger de la
symétrie de la distribution, et repérer d’éventuelles valeurs atypiques
à l’aide de représentations graphiques.
# Calcul des indicateurs descriptifs sur Ozone (na.rm = TRUE pour ignorer les NA)
moyenne_ozone <- mean(airquality$Ozone, na.rm = TRUE)
mediane_ozone <- median(airquality$Ozone, na.rm = TRUE)
ecart_type_ozone <- sd(airquality$Ozone, na.rm = TRUE)
quantiles_ozone <- quantile(airquality$Ozone, na.rm = TRUE)
cv_ozone <- ecart_type_ozone / moyenne_ozone * 100 # coefficient de variation en %
tab_indicateurs <- data.frame(
Indicateur = c("Moyenne", "Médiane", "Écart-type",
"1er quartile (Q1)", "3e quartile (Q3)",
"Coefficient de variation (%)"),
Valeur = round(c(moyenne_ozone, mediane_ozone, ecart_type_ozone,
quantiles_ozone[["25%"]], quantiles_ozone[["75%"]], cv_ozone), 2)
)
tab_indicateurs %>%
kable(caption = "Indicateurs descriptifs de la variable Ozone") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Indicateur | Valeur |
|---|---|
| Moyenne | 42.13 |
| Médiane | 31.50 |
| Écart-type | 32.99 |
| 1er quartile (Q1) | 18.00 |
| 3e quartile (Q3) | 63.25 |
| Coefficient de variation (%) | 78.30 |
Interprétation statistique : la comparaison entre la moyenne et la médiane calculées ci-dessus permet de juger de la symétrie de la distribution : si la moyenne est nettement supérieure à la médiane, la distribution présente une asymétrie à droite (présence de valeurs fortes qui « tirent » la moyenne vers le haut), typique des variables de concentration de polluants qui ne peuvent pas prendre de valeurs négatives et présentent occasionnellement des pics élevés. Un coefficient de variation élevé traduit une forte dispersion relative des concentrations d’ozone au cours de la période d’observation.
ggplot(airquality, aes(x = Ozone)) +
geom_histogram(bins = 15, fill = "#1E7A3D", colour = "white", na.rm = TRUE) +
labs(title = "Distribution de la concentration en ozone",
x = "Ozone (ppb)", y = "Effectif") +
theme_minimal()
Histogramme de la concentration en ozone
Interprétation : l’histogramme confirme l’asymétrie à droite évoquée précédemment : la majorité des observations se concentre sur des valeurs modérées d’ozone, avec une traîne étalée vers les fortes concentrations.
ggplot(airquality, aes(y = Ozone)) +
geom_boxplot(fill = "#DEEAF1", na.rm = TRUE) +
labs(title = "Boîte à moustaches de l'ozone", y = "Ozone (ppb)") +
theme_minimal()
Boîte à moustaches de la concentration en ozone
Interprétation : la boîte à moustaches permet de repérer d’éventuelles valeurs atypiques (points situés au-delà des moustaches). Leur présence renforce la recommandation d’utiliser la médiane et l’écart interquartile (IQR) plutôt que la moyenne et l’écart-type pour décrire le centre et la dispersion de cette variable, ces indicateurs étant plus robustes aux valeurs extrêmes.
Étudier la liaison entre la température (Temp) et la
concentration en ozone (Ozone) à l’aide d’un nuage de
points, du coefficient de corrélation de Pearson et de celui de
Spearman, puis élargir l’analyse à la matrice de corrélation des
variables quantitatives.
ggplot(airquality, aes(Temp, Ozone)) +
geom_point(colour = "#1F4E79", na.rm = TRUE) +
geom_smooth(method = "lm", na.rm = TRUE, se = TRUE) +
labs(title = "Relation entre température et ozone",
x = "Température (°F)", y = "Ozone (ppb)") +
theme_minimal()
Nuage de points Temp vs Ozone
cor_pearson <- cor(airquality$Temp, airquality$Ozone, use = "complete.obs")
cor_spearman <- cor(airquality$Temp, airquality$Ozone, use = "complete.obs", method = "spearman")
data.frame(
Méthode = c("Pearson", "Spearman"),
Coefficient = round(c(cor_pearson, cor_spearman), 3)
) %>%
kable(caption = "Coefficients de corrélation entre Temp et Ozone") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Méthode | Coefficient |
|---|---|
| Pearson | 0.698 |
| Spearman | 0.774 |
Interprétation : le coefficient de Pearson mesure l’intensité d’une liaison linéaire entre les deux variables, tandis que le coefficient de Spearman mesure une liaison monotone (pas nécessairement linéaire), en travaillant sur les rangs. Un écart notable entre les deux coefficients suggère que la relation entre température et ozone n’est pas parfaitement linéaire, ce qui est cohérent avec les mécanismes photochimiques de formation de l’ozone troposphérique (effet de seuil, saturation). Il est important de rappeler qu’une corrélation, même forte, ne démontre pas une relation de causalité : d’autres facteurs (rayonnement solaire, vent) interviennent simultanément.
matrice_cor <- cor(airquality[, 1:4], use = "complete.obs")
matrice_cor %>%
round(3) %>%
kable(caption = "Matrice de corrélation des variables quantitatives de airquality") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Ozone | Solar.R | Wind | Temp | |
|---|---|---|---|---|
| Ozone | 1.000 | 0.348 | -0.612 | 0.699 |
| Solar.R | 0.348 | 1.000 | -0.127 | 0.294 |
| Wind | -0.612 | -0.127 | 1.000 | -0.497 |
| Temp | 0.699 | 0.294 | -0.497 | 1.000 |
Interprétation : la matrice de corrélation permet de
situer la relation Temp–Ozone parmi l’ensemble des liaisons deux à deux.
On peut notamment examiner si le vent (Wind) est corrélé
négativement à l’ozone (effet de dispersion des polluants) et si le
rayonnement solaire (Solar.R) est positivement corrélé à
l’ozone (rôle du rayonnement dans les réactions photochimiques), sans
toutefois en tirer de conclusion causale directe.
HairEyeColorLe test du khi-deux d’indépendance permet de tester l’hypothèse nulle H0 : les deux variables qualitatives sont indépendantes, contre l’hypothèse alternative H1 : il existe une association entre les deux variables. Le test repose sur la comparaison entre les effectifs observés et les effectifs théoriques attendus sous l’hypothèse d’indépendance, et suppose que les effectifs théoriques ne soient pas trop faibles (règle usuelle : au moins 80 % des effectifs théoriques supérieurs à 5).
# Tableau de contingence couleur des cheveux x couleur des yeux
tab_hair_eye <- margin.table(HairEyeColor, c(1, 2))
tab_hair_eye %>%
as.data.frame.matrix() %>%
kable(caption = "Tableau de contingence : couleur des cheveux x couleur des yeux") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Brown | Blue | Hazel | Green | |
|---|---|---|---|---|
| Black | 68 | 20 | 15 | 5 |
| Brown | 119 | 84 | 54 | 29 |
| Red | 26 | 17 | 14 | 14 |
| Blond | 7 | 94 | 10 | 16 |
test_chisq_hairEye <- chisq.test(tab_hair_eye)
test_chisq_hairEye
##
## Pearson's Chi-squared test
##
## data: tab_hair_eye
## X-squared = 138.29, df = 9, p-value < 2.2e-16
data.frame(
Statistique = round(test_chisq_hairEye$statistic, 2),
ddl = test_chisq_hairEye$parameter,
p_valeur = format.pval(test_chisq_hairEye$p.value, digits = 3)
) %>%
kable(caption = "Résultat synthétique du test du khi-deux") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Statistique | ddl | p_valeur | |
|---|---|---|---|
| X-squared | 138.29 | 9 | <2e-16 |
Interprétation : la p-valeur obtenue est comparée au
seuil de risque fixé à 5 %. Si la p-valeur est inférieure à 0,05, on
rejette l’hypothèse d’indépendance H0 et on conclut à une association
statistiquement significative entre la couleur des cheveux et la couleur
des yeux ; dans le cas contraire, les données ne permettent pas de
rejeter l’indépendance. La condition de validité du test (effectifs
théoriques suffisants) peut être vérifiée en inspectant l’objet
test_chisq_hairEye$expected.
L’ANOVA à un facteur teste l’hypothèse nulle H0 : les moyennes de la variable quantitative sont égales entre tous les groupes (ici, les mois), contre H1 : au moins une moyenne diffère des autres. Ce test suppose la normalité des résidus au sein de chaque groupe, l’homogénéité des variances entre groupes (homoscédasticité) et l’indépendance des observations.
# Transformation de Month en facteur pour l'ANOVA et les graphiques
airquality_mois <- airquality
airquality_mois$Month <- factor(airquality_mois$Month,
labels = c("Mai", "Juin", "Juillet", "Août", "Septembre"))
ggplot(airquality_mois, aes(Month, Temp)) +
geom_boxplot(fill = "#E2EFDA") +
labs(title = "Température par mois", x = "Mois", y = "Température (°F)") +
theme_minimal()
Répartition de la température par mois
Interprétation graphique : les boîtes à moustaches suggèrent déjà visuellement si les niveaux de température diffèrent d’un mois à l’autre, ce que l’ANOVA permettra de confirmer statistiquement.
mod_anova <- aov(Temp ~ Month, data = airquality_mois)
summary(mod_anova)
## Df Sum Sq Mean Sq F value Pr(>F)
## Month 4 7061 1765.3 39.85 <2e-16 ***
## Residuals 148 6557 44.3
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
resume_anova <- summary(mod_anova)[[1]]
data.frame(
Source = "Month",
ddl = resume_anova["Month", "Df"],
F_valeur = round(resume_anova["Month", "F value"], 2),
p_valeur = format.pval(resume_anova["Month", "Pr(>F)"], digits = 3)
) %>%
kable(caption = "Résultat synthétique de l'ANOVA (Temp ~ Month)") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Source | ddl | F_valeur | p_valeur |
|---|---|---|---|
| Month | 4 | 39.85 | <2e-16 |
Interprétation : la statistique de Fisher et la
p-valeur associée permettent de conclure, au risque de 5 %, sur
l’égalité ou non des températures moyennes selon les mois. Une p-valeur
inférieure à 0,05 conduit à rejeter H0 et à conclure que la température
moyenne varie significativement selon le mois, ce qui est cohérent avec
le cycle saisonnier attendu entre mai et septembre. Ce résultat ne
permet toutefois pas d’identifier précisément quels mois diffèrent entre
eux : un test post-hoc (par exemple TukeyHSD()) serait
nécessaire pour une comparaison deux à deux.
Cet exercice invite chaque étudiant à transposer la démarche de statistique descriptive développée dans ce TD à ses propres données de projet. La méthode générale, indépendamment du jeu de données considéré, se décline en quatre étapes reproductibles sous R :
# Demarche generale transposable a d'autres jeux de donnees :
# 1. Identifier le type de chaque variable (quantitative ou qualitative)
glimpse(mes_donnees)
# 2. Produire des indicateurs univaries pertinents
# - pour une variable quantitative : moyenne, mediane, ecart-type
# - pour une variable qualitative : tableau d'effectifs et de frequences
summary(mes_donnees)
# 3. Mesurer une liaison bivariee adaptee aux types de variables
# - deux variables quantitatives : correlation (Pearson / Spearman)
# - deux variables qualitatives : test du khi-deux
# - une quantitative x une qualitative : ANOVA a un facteur
# 4. Rediger une interpretation statistique, puis, si pertinent,
# une lecture metier (genie civil, environnement, etc.)
Remarque méthodologique : ce bloc de code n’est pas
exécuté (eval = FALSE) car il constitue un canevas
générique destiné à être adapté par chaque étudiant à ses propres
données de projet, et non un traitement appliqué au jeu
airquality. L’application concrète de cette démarche à un
jeu de données de génie civil est développée dans l’Exercice 7
ci-après.
Cet exercice applique la démarche de statistique descriptive et exploratoire à un jeu de données propre au génie civil, portant sur des essais réalisés sur des éprouvettes de béton. Il s’agit de : (i) décrire la résistance à la compression et le rapport eau/ciment ; (ii) étudier la corrélation entre ces deux variables ; (iii) tester l’association entre la présence de pathologies et le type de granulat.
Remarque : le fichier
TD_genie_civil.xlsx n’a pas été trouvé lors de la
compilation de ce document. Le code ci-dessous reste présent et
s’exécutera automatiquement, avec les résultats numériques calculés par
R, dès que le fichier sera placé dans le dossier du projet.
resistance_MPa et
rapport_eau_cimentif (donnees_beton_disponibles) {
summary(beton[, c("resistance_MPa", "rapport_eau_ciment")])
}
if (donnees_beton_disponibles) {
tab_beton_indic <- beton %>%
summarise(
Moyenne_resistance = mean(resistance_MPa, na.rm = TRUE),
Mediane_resistance = median(resistance_MPa, na.rm = TRUE),
Ecart_type_resistance = sd(resistance_MPa, na.rm = TRUE),
Moyenne_EC = mean(rapport_eau_ciment, na.rm = TRUE),
Mediane_EC = median(rapport_eau_ciment, na.rm = TRUE),
Ecart_type_EC = sd(rapport_eau_ciment, na.rm = TRUE)
) %>%
round(2)
tab_beton_indic %>%
kable(caption = "Indicateurs descriptifs : résistance (MPa) et rapport E/C") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
}
if (donnees_beton_disponibles) {
p1 <- ggplot(beton, aes(y = resistance_MPa)) +
geom_boxplot(fill = "#DEEAF1", na.rm = TRUE) +
labs(title = "Résistance à la compression", y = "Résistance (MPa)") +
theme_minimal()
p2 <- ggplot(beton, aes(y = rapport_eau_ciment)) +
geom_boxplot(fill = "#E2EFDA", na.rm = TRUE) +
labs(title = "Rapport eau/ciment", y = "E/C") +
theme_minimal()
gridExtra_disponible <- requireNamespace("gridExtra", quietly = TRUE)
if (gridExtra_disponible) {
gridExtra::grid.arrange(p1, p2, ncol = 2)
} else {
print(p1)
print(p2)
}
}
Interprétation génie civil : la résistance à la compression est l’indicateur principal de performance mécanique du béton, tandis que le rapport eau/ciment (E/C) est un paramètre de formulation déterminant de cette résistance et de la durabilité de l’ouvrage. Une dispersion importante de la résistance au sein d’un même chantier peut signaler une hétérogénéité de fabrication (dosage, mise en œuvre, cure) à investiguer.
if (donnees_beton_disponibles) {
test_cor_beton <- cor.test(beton$resistance_MPa, beton$rapport_eau_ciment)
test_cor_beton
}
if (donnees_beton_disponibles) {
ggplot(beton, aes(x = rapport_eau_ciment, y = resistance_MPa)) +
geom_point(colour = "#1F4E79", na.rm = TRUE) +
geom_smooth(method = "lm", se = TRUE, na.rm = TRUE) +
labs(title = "Résistance vs rapport eau/ciment",
x = "Rapport eau/ciment (E/C)", y = "Résistance (MPa)") +
theme_minimal()
}
Interprétation génie civil : la loi de Feret / Abrams prévoit une décroissance de la résistance du béton lorsque le rapport eau/ciment augmente (excès d’eau générant une porosité capillaire plus importante). Le coefficient de corrélation calculé ci-dessus, s’il est négatif et significatif (p-valeur inférieure à 0,05), est cohérent avec cette relation de formulation bien établie dans la littérature. Il convient toutefois de rappeler qu’une corrélation, même conforme aux attentes théoriques, ne constitue pas à elle seule une preuve de causalité statistique : elle est ici corroborée par un mécanisme physico-chimique connu, ce qui renforce mais ne remplace pas l’interprétation statistique.
if (donnees_beton_disponibles) {
tab_patho_granulat <- table(beton$pathologie, beton$granulat)
tab_patho_granulat %>%
as.data.frame.matrix() %>%
kable(caption = "Tableau de contingence : pathologie x type de granulat") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
test_chisq_beton <- chisq.test(tab_patho_granulat)
test_chisq_beton
}
Interprétation en termes de formulation et de durabilité : si le test révèle une association significative entre la présence de pathologies et le type de granulat utilisé, cela invite à examiner de plus près la compatibilité de certains granulats avec la formulation retenue (réactivité alcali-granulat, propreté des granulats, porosité). À l’inverse, une absence d’association significative suggère que, sur cet échantillon, le type de granulat n’est pas le facteur discriminant des pathologies observées, d’autres causes (cure, rapport E/C, conditions d’exposition) devant alors être recherchées en priorité.
Les analyses conduites dans ce TD1 illustrent la complémentarité des outils de statistique descriptive et exploratoire : les indicateurs de position et de dispersion résument l’information univariée, les représentations graphiques (histogramme, boîte à moustaches, nuage de points) permettent une lecture visuelle rapide des distributions et des liaisons, tandis que les tests statistiques (corrélation, khi-deux, ANOVA) apportent une validation formelle des observations graphiques, assortie d’un niveau de confiance quantifié.
Appliquée au jeu airquality, cette démarche met en
évidence les liens attendus entre conditions météorologiques et
concentration en ozone, tout en rappelant la prudence nécessaire dans
l’interprétation causale. Transposée aux données de génie civil (essais
sur béton), la même méthodologie permet de retrouver des relations de
formulation connues (résistance et rapport eau/ciment) et d’objectiver,
par un test statistique, l’existence ou non d’une association entre
pathologies et granulats — une question directement utile à la maîtrise
de la qualité et de la durabilité des ouvrages en béton armé.
Plusieurs limites doivent être soulignées :
airquality porte sur une seule station de mesure
et une seule année (1973), ce qui limite la portée générale des
conclusions environnementales ;na.rm = TRUE, réduisent la taille effective de
l’échantillon utilisé dans certains calculs, ce qui peut affecter la
puissance des tests ;Ce TD1 a permis de mettre en œuvre, sur des exemples concrets,
l’ensemble des étapes fondamentales de la statistique descriptive et
exploratoire sous R : prise en main de l’environnement RStudio, calcul
et interprétation d’indicateurs de position et de dispersion, production
de représentations graphiques avec ggplot2, et mesure de
liaisons statistiques par la corrélation, le test du khi-deux et l’ANOVA
à un facteur. L’application successive de cette démarche à un jeu de
données environnemental (airquality) puis à un jeu de
données de génie civil (essais sur béton) illustre le caractère
transposable de la méthodologie statistique à des problématiques métier
variées.