Introduction
Cette vignette illustre le pipeline complet d’analyse d’une Enquête Démographique et de Santé (EDS) ou d’une Enquête sur les Conditions de Vie (EMOP/EMICOV), avec pondération complexe (strates + grappes).
1. Données simulées d’une enquête ménages
set.seed(2024)
n <- 5000
donnees_eds <- tibble::tibble(
id_menage = paste0("MEN_", stringr::str_pad(1:n, 5, pad = "0")),
strate = sample(c("Urbain_Nord", "Urbain_Sud", "Rural_Nord",
"Rural_Sud"), n, replace = TRUE),
grappe = sample(1:250, n, replace = TRUE),
poids_final = runif(n, 0.4, 3.2),
region = sample(c("Alibori", "Atacora", "Atlantique",
"Borgou", "Collines", "Couffo",
"Donga", "Littoral"), n, replace = TRUE),
milieu = sample(c("Urbain", "Rural"), n, replace = TRUE,
prob = c(0.4, 0.6)),
age_chef = sample(25:75, n, replace = TRUE),
sexe_chef = sample(c("Masculin", "Féminin"), n, replace = TRUE,
prob = c(0.75, 0.25)),
taille_menage = sample(1:12, n, replace = TRUE,
prob = c(0.05, 0.1, 0.15, 0.2, 0.18,
0.12, 0.08, 0.05, 0.03,
0.02, 0.01, 0.01)),
depense_totale = abs(rnorm(n, 850000, 420000)),
acces_eau = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.35, 0.65)),
electricite = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.45, 0.55)),
scolarisation = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.28, 0.72))
)
cat("Ménages :", nrow(donnees_eds), "\n")
cat("Régions :", length(unique(donnees_eds$region)), "\n")2. Validation de la qualité
qualite <- valider_qualite_donnees(
donnees_eds,
vars_cles = "id_menage",
seuil_na = 0.05
)3. Nettoyage et harmonisation
# Harmonisation des régions
donnees_eds <- harmoniser_regions(
donnees_eds,
var_region = "region",
pays = "BJ",
var_sortie = "region_std",
signaler_non_trouves = FALSE
)
# Journal de traitement
etape <- tracer_flux_traitement(
donnees_eds,
"Harmonisation des régions"
)4. Plan de sondage complexe
plan <- appliquer_ponderations(
data = donnees_eds,
poids = "poids_final",
"Harmonisation des régions"
)4. Plan de sondage complexe
plan <- appliquer_ponderations(
data = donnees_eds,
poids = "poids_final",
"Harmonisation des régions"
)4. Plan de sondage complexe
plan <- appliquer_ponderations(
data = donnees_eds,
poids = "poids_final",
"Harmonisation des régions"
)4. Plan de sondage complexe
plan <- appliquer_ponderations(
data = donnees_eds,
poids = "poids_final",
"Harmonisation des régions"
)4. Plan de sondage complexe
plan <- appliquer_ponderations(
data = donnees_eds,
poids = "poids_final",
"Harmonisation des régions"
)4. Plan de sondage complexe
plan <- appliquer_ponderations(
data = donnees_eds,
poids = "poids_final",
plan <- survey::svydesign(
ids = ~grappe,
strata = ~strate,
weights = ~poids_final,
data = donnees_eds
)
)5. Statistiques descriptives pondérées
stats <- stat_descr(
plan,
vars = c("depense_totale", "taille_menage", "age_chef"),
ic = TRUE
)
knitr::kable(stats, caption = "Statistiques descriptives pondérées")6. Tableaux croisés
tab <- tab_croisee(
plan,
var_ligne = "milieu",
var_col = "region_std",
pourcentage = "colonne",
format_sortie = "tibble"
)
knitr::kable(
head(tab, 16),
caption = "Répartition par milieu et région (%)"
)7. Calcul des indicateurs de pauvreté
indicateurs_ipm <- list(
sante = c("acces_eau"),
education = c("scolarisation"),
niveau_vie = c("electricite")
)
resultat_ipm <- calcul_ipm(
donnees_eds,
indicateurs_ipm,
seuil_k = 1/3,
poids = "poids_final"
)8. Mesures d’inégalité
inegalites <- decomposer_inegalite(
donnees_eds,
var_revenu = "depense_totale",
var_groupe = "milieu",
poids = "poids_final"
)
cat("Indice de Gini :", inegalites$gini, "\n")
knitr::kable(
inegalites$decomposition,
caption = "Décomposition des inégalités par milieu"
)9. Visualisation
library(ggplot2)
pyramide_ages(
donnees_eds,
var_age = "age_chef",
var_sexe = "sexe_chef",
poids = "poids_final",
titre = "Pyramide des âges — Chefs de ménage",
largeur_classe = 10L
)
stats_region <- stat_descr(
donnees_eds,
vars = "depense_totale",
groupe = "region_std",
ic = TRUE
)
graphique_barres(
stats_region,
var_x = "region_std",
var_y = "moyenne",
var_ic_bas = "ic_bas",
var_ic_haut = "ic_haut",
titre = "Dépense moyenne par région (FCFA)",
label_y = "Dépense moyenne (FCFA)",
trier = TRUE
) + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, hjust = 1))10. Régression
# Déterminants de la dépense
modele <- analyse_regression(
log(depense_totale) ~ age_chef + taille_menage + electricite + acces_eau,
data = donnees_eds,
type = "lineaire",
format_sortie = "tibble"
)
knitr::kable(
modele[, c("terme", "estimateur", "ic_bas", "ic_haut",
"p_valeur", "significatif")],
caption = "Déterminants de la dépense des ménages"
)11. Export et diffusion
# Anonymisation
donnees_anon <- anonymiser_donnees(
donnees_eds,
vars_supprimer = c("id_menage"),
vars_generaliser = list(age_chef = 10, depense_totale = 100000),
rapport = FALSE
)
# Métadonnées DDI
generer_metadonnees_ddi(
data = donnees_anon,
titre = "Enquête Démographique et de Santé — 2024",
pays = "Bénin",
annee = 2024,
institution = "INSAE",
fichier_sortie = "outputs/eds_2024_ddi.xml"
)
# Package de diffusion
compresser_package_diffusion(
donnees = donnees_anon,
repertoire_sortie = "diffusion/",
nom_package = "EDS_BEN_2024_v1"
)