---
title: "Analyse d'une enquête pondérée complète"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Analyse d'une enquête pondérée complète}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment  = "#>",
  warning  = FALSE,
  message  = FALSE,
  fig.width  = 7,
  fig.height = 5
)
```

## 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).

```{r charger}
library(statAfrikR)
library(dplyr)
```

## 1. Données simulées d'une enquête ménages

```{r donnees-simulees}
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é

```{r validation}
qualite <- valider_qualite_donnees(
  donnees_eds,
  vars_cles = "id_menage",
  seuil_na  = 0.05
)
```

## 3. Nettoyage et harmonisation

```{r nettoyage}
# 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

```{r plan-sondage}
plan <- appliquer_ponderations(
  data       = donnees_eds,
  var_poids  = "poids_final",
  var_strate = "strate",
  var_grappe = "grappe"
)
```

## 5. Statistiques descriptives pondérées

```{r stats-descriptives}
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

```{r tableau-croise}
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é

```{r ipm}
indicateurs_ipm <- list(
  sante      = c("acces_eau"),
  education  = c("scolarisation"),
  niveau_vie = c("electricite")
)

resultat_ipm <- calcul_ipm(
  donnees_eds,
  indicateurs_ipm,
  seuil_pauvrete = 1/3,
  var_poids      = "poids_final"
)
```

## 8. Mesures d'inégalité

```{r inegalite}
inegalites <- decomposer_inegalite(
  donnees_eds,
  var_revenu = "depense_totale",
  var_groupe = "milieu",
  var_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

```{r pyramide, fig.cap="Pyramide des âges des chefs de ménage"}
library(ggplot2)
pyramide_ages(
  donnees_eds,
  var_age   = "age_chef",
  var_sexe  = "sexe_chef",
  var_poids = "poids_final",
  titre     = "Pyramide des âges — Chefs de ménage",
  largeur_classe = 10L
)
```

```{r barres, fig.cap="Dépense moyenne par région"}
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

```{r regression}
# 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

```{r diffusion, eval=FALSE}
# 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"
)
```
