This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
library(tidyverse)
data(airquality)
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,…
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
##
mean(airquality$Ozone, na.rm = TRUE)
## [1] 42.12931
median(airquality$Ozone, na.rm = TRUE)
## [1] 31.5
sd(airquality$Ozone, na.rm = TRUE)
## [1] 32.98788
quantile(airquality$Ozone, na.rm = TRUE)
## 0% 25% 50% 75% 100%
## 1.00 18.00 31.50 63.25 168.00
Le jeu airquality contient 153 individus (jours) et 6 variables numériques (Ozone, Solar.R, Wind, Temp, Month, Day). On relève 37 valeurs manquantes pour Ozone et 7 pour Solar.R, ce qui justifie l’usage systématique de na.rm = TRUE et use = “complete.obs” dans les analyses suivantes. La moyenne (42,13) est nettement supérieure à la médiane (31,5), signe d’une distribution asymétrique à droite, confirmée par l’histogramme (forte concentration entre 0 et 50 µg/m³ puis longue traîne jusqu’à 170) et par la boîte à moustaches, qui fait apparaître deux valeurs atypiques au-delà de 135. Le coefficient de variation élevé (sd/moyenne ≈ 78 %) traduit une forte dispersion relative. Sur une variable aussi dissymétrique, la médiane et l’IQR restent des indicateurs plus robustes que la moyenne et l’écart-type.
You can also embed plots, for example:
library(tidyverse)
ggplot(airquality, aes(x = Ozone)) +
geom_histogram(bins = 15, fill = "#1E7A3D", colour = "white")
ggplot(airquality, aes(y = Ozone)) + geom_boxplot(fill = "#DEEAF1")
Les coefficients de Pearson (r = 0,698) et de Spearman (ρ = 0,774)
indiquent tous deux une relation positive forte entre température et
ozone, cohérente avec la chimie photochimique de l’ozone troposphérique.
L’écart entre les deux s’explique par la sensibilité de Pearson à
l’asymétrie et aux valeurs extrêmes déjà relevées sur Ozone : Spearman,
basé sur les rangs, capte mieux une relation monotone. Le nuage de
points confirme la tendance croissante, avec une dispersion qui
s’accentue aux températures élevées. La matrice de corrélation montre
par ailleurs une association négative marquée entre Ozone et Wind (r =
−0,61), le vent contribuant à disperser la pollution.
library(tidyverse)
ggplot(airquality, aes(Temp, Ozone)) +
geom_point(colour = "#1F4E79") + geom_smooth(method = "lm")
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.
cor(airquality$Temp, airquality$Ozone, use = "complete.obs")
## [1] 0.6983603
# Pearson
cor(airquality$Temp, airquality$Ozone, use = "complete.obs", method = "spearman")
## [1] 0.774043
cor(airquality[,1:4], use = "complete.obs")
## Ozone Solar.R Wind Temp
## Ozone 1.0000000 0.3483417 -0.6124966 0.6985414
## Solar.R 0.3483417 1.0000000 -0.1271835 0.2940876
## Wind -0.6124966 -0.1271835 1.0000000 -0.4971897
## Temp 0.6985414 0.2940876 -0.4971897 1.0000000
tab <- margin.table(HairEyeColor, c(1, 2)) # cheveux x yeux
tab
## Eye
## Hair Brown Blue Hazel Green
## Black 68 20 15 5
## Brown 119 84 54 29
## Red 26 17 14 14
## Blond 7 94 10 16
chisq.test(tab)
##
## Pearson's Chi-squared test
##
## data: tab
## X-squared = 138.29, df = 9, p-value < 2.2e-16
Le test donne χ² = 138,29, ddl = 9, p-value < 2,2×10⁻¹⁶. La p-value étant très largement inférieure à 0,05, on rejette l’hypothèse d’indépendance : la couleur des cheveux et la couleur des yeux sont fortement associées. Les effectifs observés étant élevés (total > 500 individus), la condition de validité du test (effectifs théoriques ≥ 5) est largement respectée.
airquality$Month <- factor(airquality$Month)
ggplot(airquality, aes(Month, Temp)) + geom_boxplot(fill = "#E2EFDA")
mod <- aov(Temp ~ Month, data = airquality)
summary(mod)
## 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
F = 39,85 (ddl 4 et 148), p-value < 2×10⁻¹⁶. On rejette l’hypothèse d’égalité des températures moyennes entre les mois. Les boîtes à moustaches confirment un effet saisonnier net : la température progresse de mai (médiane ≈ 66°F) à juillet-août (médiane ≈ 82-84°F), puis diminue légèrement en septembre (≈ 76°F).
library(readxl)
library(tidyverse)
d <- read_excel("TD_eau_assainissement.xlsx", sheet = "menages")
Le fichier contient 80 ménages et 9 variables (zone, revenu_kFCFA, taille_menage, distance_point_eau_km, consommation_eau_L_j, turbidite_NTU, type_latrine, acces_assainissement). Le revenu moyen est de 111,6 kFCFA (médiane 118,5), la distance moyenne au point d’eau de 0,82 km (médiane 0,39 km), et la consommation moyenne de 139,5 L/jour (médiane 145).
str(d) # types de chaque colonne
## tibble [80 × 9] (S3: tbl_df/tbl/data.frame)
## $ id : num [1:80] 1 2 3 4 5 6 7 8 9 10 ...
## $ zone : chr [1:80] "rurale" "urbaine" "urbaine" "rurale" ...
## $ revenu_kFCFA : num [1:80] 71 138 130 105 94 150 146 189 118 121 ...
## $ taille_menage : num [1:80] 4 5 8 3 9 3 4 2 5 9 ...
## $ distance_point_eau_km: num [1:80] 1.19 1.47 0.16 1.84 1.22 0.32 0.43 0.16 0.15 0.34 ...
## $ consommation_eau_L_j : num [1:80] 59 161 164 61 274 84 99 59 147 197 ...
## $ turbidite_NTU : num [1:80] 7.5 9.2 1.4 7.8 9.5 4 4.6 8.8 14.6 4.6 ...
## $ type_latrine : chr [1:80] "privee" "privee" "partagee" "privee" ...
## $ acces_assainissement : chr [1:80] "non" "oui" "non" "non" ...
head(d) # les premières lignes
## # A tibble: 6 × 9
## id zone revenu_kFCFA taille_menage distance_point_eau_km
## <dbl> <chr> <dbl> <dbl> <dbl>
## 1 1 rurale 71 4 1.19
## 2 2 urbaine 138 5 1.47
## 3 3 urbaine 130 8 0.16
## 4 4 rurale 105 3 1.84
## 5 5 rurale 94 9 1.22
## 6 6 urbaine 150 3 0.32
## # ℹ 4 more variables: consommation_eau_L_j <dbl>, turbidite_NTU <dbl>,
## # type_latrine <chr>, acces_assainissement <chr>
summary(d)
## id zone revenu_kFCFA taille_menage
## Min. : 1.00 Length :80 Min. : 21.00 Min. : 2.0
## 1st Qu.:20.75 N.unique : 2 1st Qu.: 70.75 1st Qu.: 4.0
## Median :40.50 N.blank : 0 Median :118.50 Median : 6.0
## Mean :40.50 Min.nchar: 6 Mean :111.61 Mean : 5.9
## 3rd Qu.:60.25 Max.nchar: 7 3rd Qu.:146.25 3rd Qu.: 8.0
## Max. :80.00 Max. :233.00 Max. :10.0
## distance_point_eau_km consommation_eau_L_j turbidite_NTU type_latrine
## Min. :0.0100 Min. : 28.00 Min. : 1.30 Length :80
## 1st Qu.:0.1875 1st Qu.: 89.75 1st Qu.: 4.95 N.unique : 3
## Median :0.3900 Median :145.00 Median : 7.95 N.blank : 0
## Mean :0.8219 Mean :139.53 Mean : 7.56 Min.nchar: 6
## 3rd Qu.:1.3375 3rd Qu.:186.75 3rd Qu.: 9.80 Max.nchar: 8
## Max. :4.1100 Max. :274.00 Max. :14.90
## acces_assainissement
## Length :80
## N.unique : 2
## N.blank : 0
## Min.nchar: 3
## Max.nchar: 3
##
ggplot(d, aes(x = revenu_kFCFA)) +
geom_histogram(bins = 15, fill = "steelblue", color = "white") +
labs(title = "Distribution du revenu (kFCFA)")
ggplot(d, aes(x = distance_point_eau_km)) +
geom_histogram(bins = 15, fill = "seagreen", color = "white") +
labs(title = "Distance au point d'eau (km)")
ggplot(d, aes(x = consommation_eau_L_j)) +
geom_histogram(bins = 15, fill = "darkorange", color = "white") +
labs(title = "Consommation d'eau (L/jour)")
Revenu : distribution étalée, légèrement asymétrique à droite, avec un
pic marqué autour de 140-150 kFCFA — probablement la superposition des
sous-groupes urbain (revenus plus élevés) et rural (revenus plus
faibles). Distance au point d’eau : très fortement asymétrique à droite
(médiane 0,39 km, max 4,11 km) — la majorité des ménages vit à proximité
d’un point d’eau, mais une minorité doit parcourir jusqu’à 4 km,
révélant une inégalité d’accès physique à l’eau. Consommation d’eau :
distribution plus régulière, centrée autour de 140-180 L/jour.
tab <- table(d$type_latrine, d$zone)
tab
##
## rurale urbaine
## aucune 2 7
## partagee 17 19
## privee 8 27
chisq.test(tab)
##
## Pearson's Chi-squared test
##
## data: tab
## X-squared = 5.3145, df = 2, p-value = 0.07014
chisq.test(tab)$residuals
##
## rurale urbaine
## aucune -0.5952919 0.4248875
## partagee 1.3914051 -0.9931104
## privee -1.1092743 0.7917406
χ² = 5,3145, ddl = 2, p-value = 0,0701. Au seuil de 5 %, la p-value étant supérieure à 0,05, on ne rejette pas l’hypothèse d’indépendance entre le type de latrine et la zone. Les résidus indiquent une tendance (latrines partagées légèrement sur-représentées en zone rurale, latrines privées sous-représentées en zone rurale), mais celle-ci n’est pas confirmée statistiquement à 5 % — le résultat étant proche du seuil, un échantillon plus large pourrait faire apparaître une association significative. Avec seulement 80 observations réparties en 6 cases, certains effectifs théoriques (catégorie « aucune ») sont probablement proches de 5, ce qui fragilise la condition de validité du test ; un test exact de Fisher serait plus prudent.
modele <- aov(revenu_kFCFA ~ zone, data = d)
summary(modele)
## Df Sum Sq Mean Sq F value Pr(>F)
## zone 1 96457 96457 72.33 9.89e-13 ***
## Residuals 78 104024 1334
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggplot(d, aes(x = zone, y = revenu_kFCFA)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Revenu par zone")
shapiro.test(residuals(modele)) # normalité
##
## Shapiro-Wilk normality test
##
## data: residuals(modele)
## W = 0.96759, p-value = 0.0399
bartlett.test(revenu_kFCFA ~ zone, data = d) # homogénéité des variances
##
## Bartlett test of homogeneity of variances
##
## data: revenu_kFCFA by zone
## Bartlett's K-squared = 8.0301, df = 1, p-value = 0.004601
wilcox.test(revenu_kFCFA ~ zone, data = d)
##
## Wilcoxon rank sum test with continuity correction
##
## data: revenu_kFCFA by zone
## W = 108.5, p-value = 6.756e-10
## alternative hypothesis: true location shift is not equal to 0
F = 72,33 (ddl 1 et 78), p-value = 9,89×10⁻¹³ : le revenu moyen diffère fortement selon la zone, avec une médiane rurale ≈ 65 kFCFA contre ≈ 140 kFCFA en zone urbaine.
La vérification des hypothèses de l’ANOVA montre toutefois des fragilités : le test de Shapiro-Wilk (W = 0,968, p = 0,0399) indique une légère déviation à la normalité des résidus, et le test de Bartlett (K² = 8,03, p = 0,0046) révèle une hétérogénéité des variances entre zones, cohérente avec la dispersion plus marquée et les valeurs atypiques observées en zone urbaine sur le boxplot. Le test non-paramétrique de Wilcoxon (W = 108,5, p = 6,76×10⁻¹⁰), qui ne repose pas sur ces hypothèses, confirme néanmoins une différence significative de revenu entre zones — la conclusion de l’ANOVA est donc robuste malgré la violation de ses conditions d’application.
Synthèse — accès à l’eau et à l’assainissement
Interprétation globale. Trois enseignements se dégagent de cette enquête. D’abord, l’accès à l’eau : si la majorité des ménages est proche d’un point d’eau, une minorité rurale en est significativement éloignée, révélant une inégalité territoriale. Ensuite, l’assainissement : aucune association statistiquement prouvée à 5 % entre type de latrine et zone n’a été établie, bien qu’un signal (p ≈ 0,07) suggère que les ménages ruraux ont un peu moins souvent accès à une latrine privée. Enfin, le revenu : nettement plus élevé en zone urbaine, il peut expliquer indirectement de meilleures conditions d’assainissement en ville — la capacité à financer une latrine privée — même si ce lien n’est pas confirmé directement par le test du khi-deux sur cet échantillon.