# Calcul des indicateurs ODD : IDH, IPM et inégalités

## Introduction

Cette vignette présente le calcul des indicateurs de développement humain conformes aux méthodologies internationales PNUD/OPHI, directement utilisables pour les rapports nationaux sur les ODD.

    library(statAfrikR)
    library(dplyr)
    library(ggplot2)

## 1. Indice de Développement Humain (IDH)

### Calcul national

    idh_benin <- calcul_idh(
      esperance_vie   = 61.8,
      annees_scol_moy = 4.5,
      annees_scol_att = 13.1,
      rnb_habitant    = 3360,
      annee           = 2023
    )

    cat("IDH Bénin 2023 :\n")
    #> IDH Bénin 2023 :
    cat("  IDH global    :", idh_benin$idh, "\n")
    #>   IDH global    : 0.56
    cat("  Santé         :", idh_benin$indice_sante, "\n")
    #>   Santé         : 0.6431
    cat("  Éducation     :", idh_benin$indice_education, "\n")
    #>   Éducation     : 0.5139
    cat("  Revenu        :", idh_benin$indice_revenu, "\n")
    #>   Revenu        : 0.5309
    cat("  Catégorie     :", idh_benin$categorie, "\n")
    #>   Catégorie     : Moyen

### Comparaison régionale

    pays_afrique <- tibble::tibble(
      pays            = c("Bénin", "Burkina Faso", "Sénégal",
                           "Côte d'Ivoire", "Mali", "Niger",
                           "Togo", "Guinée"),
      esperance_vie   = c(61.8, 61.6, 68.7, 59.1, 59.3, 62.4, 61.5, 58.9),
      annees_scol_moy = c(4.5,  2.0,  3.5,  5.3,  2.4,  2.1,  5.5,  3.1),
      annees_scol_att = c(13.1, 9.3, 14.5, 12.1, 7.5,  9.9, 13.1, 11.2),
      rnb_habitant    = c(3360, 2310, 3690, 5510, 2200, 1340, 2780, 2420)
    )

    idh_regional <- pays_afrique |>
      dplyr::rowwise() |>
      dplyr::mutate(
        res           = list(calcul_idh(esperance_vie, annees_scol_moy,
                                        annees_scol_att, rnb_habitant)),
        idh           = res$idh,
        indice_sante  = res$indice_sante,
        indice_educ   = res$indice_education,
        indice_revenu = res$indice_revenu,
        categorie     = res$categorie
      ) |>
      dplyr::select(-res) |>
      dplyr::ungroup() |>
      dplyr::arrange(dplyr::desc(idh))

    knitr::kable(
      idh_regional[, c("pays", "idh", "categorie",
                        "indice_sante", "indice_educ", "indice_revenu")],
      caption = "IDH — Comparaison régionale Afrique de l'Ouest",
      digits  = 3
    )

IDH — Comparaison régionale Afrique de l’Ouest
pays | idh | categorie | indice_sante | indice_educ | indice_revenu
--- | --- | --- | --- | --- | ---
Sénégal | 0.596 | Moyen | 0.749 | 0.519 | 0.545
Côte d’Ivoire | 0.572 | Moyen | 0.602 | 0.513 | 0.606
Bénin | 0.560 | Moyen | 0.643 | 0.514 | 0.531
Togo | 0.560 | Moyen | 0.638 | 0.547 | 0.502
Guinée | 0.492 | Faible | 0.599 | 0.414 | 0.481
Burkina Faso | 0.462 | Faible | 0.640 | 0.325 | 0.474
Niger | 0.445 | Faible | 0.652 | 0.345 | 0.392
Mali | 0.433 | Faible | 0.605 | 0.288 | 0.467

    idh_long <- idh_regional |>
      tidyr::pivot_longer(
        cols      = c(indice_sante, indice_educ, indice_revenu),
        names_to  = "composante",
        values_to = "valeur"
      ) |>
      dplyr::mutate(
        composante = dplyr::recode(composante,
          indice_sante  = "Santé",
          indice_educ   = "Éducation",
          indice_revenu = "Revenu"
        ),
        pays = forcats::fct_reorder(pays, idh)
      )

    graphique_barres(
      idh_long,
      var_x      = "pays",
      var_y      = "valeur",
      var_groupe = "composante",
      position   = "stack",
      titre      = "Composantes de l'IDH — Afrique de l'Ouest",
      label_y    = "Valeur de l'indice"
    ) + ggplot2::coord_flip()

IDH et composantes — Afrique de l’Ouest

## 2. Indice de Pauvreté Multidimensionnelle (IPM)

    set.seed(2024)
    n <- 3000
    donnees_menages <- tibble::tibble(
      id_menage       = 1:n,
      region          = sample(c("Nord", "Sud", "Est", "Ouest"), n, replace = TRUE),
      milieu          = sample(c("Urbain", "Rural"), n, replace = TRUE,
                                prob = c(0.35, 0.65)),
      poids           = runif(n, 0.5, 2.5),
      # Dimension Santé
      malnutrition    = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.72, 0.28)),
      mortalite_enf   = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.88, 0.12)),
      # Dimension Éducation
      scol_adulte     = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.62, 0.38)),
      scol_enfants    = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.71, 0.29)),
      # Dimension Niveau de vie
      electricite     = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.52, 0.48)),
      eau_potable     = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.58, 0.42)),
      assainissement  = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.55, 0.45)),
      combustible     = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.60, 0.40)),
      logement        = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.75, 0.25)),
      actifs          = sample(c(0L, 1L), n, replace = TRUE, prob = c(0.68, 0.32))
    )

    # Définition des dimensions IPM standard OPHI
    indicateurs_ipm <- list(
      sante      = c("malnutrition", "mortalite_enf"),
      education  = c("scol_adulte", "scol_enfants"),
      niveau_vie = c("electricite", "eau_potable", "assainissement",
                      "combustible", "logement", "actifs")
    )

    resultat_ipm <- calcul_ipm(
      donnees_menages,
      indicateurs      = indicateurs_ipm,
      seuil_pauvrete   = 1/3,
      var_poids        = "poids"
    )

    contrib_df <- tibble::tibble(
      dimension    = names(resultat_ipm$contributions),
      contribution = resultat_ipm$contributions
    )

    knitr::kable(
      contrib_df,
      caption = "Contributions des dimensions à l'IPM",
      col.names = c("Dimension", "Contribution (%)")
    )

Contributions des dimensions à l’IPM
Dimension | Contribution (%)
--- | ---
sante | 25.43
education | 39.06
niveau_vie | 35.52

### IPM par région

    donnees_enrichies <- resultat_ipm$donnees_enrichies

    ipm_region <- donnees_enrichies |>
      dplyr::group_by(region) |>
      dplyr::summarise(
        n_menages        = dplyr::n(),
        taux_pauvrete_md = round(mean(.est_pauvre_multi) * 100, 1),
        score_moyen      = round(mean(.score_privation), 3),
        .groups          = "drop"
      ) |>
      dplyr::arrange(dplyr::desc(taux_pauvrete_md))

    knitr::kable(
      ipm_region,
      caption = "Pauvreté multidimensionnelle par région",
      col.names = c("Région", "Ménages", "Taux pauvreté (%)", "Score moyen")
    )

Pauvreté multidimensionnelle par région
Région | Ménages | Taux pauvreté (%) | Score moyen
--- | --- | --- | ---
Nord | 779 | 47.5 | 0.300
Ouest | 752 | 47.2 | 0.307
Sud | 753 | 46.9 | 0.309
Est | 716 | 45.8 | 0.303

## 3. Inégalités

    set.seed(2024)
    donnees_revenus <- tibble::tibble(
      menage         = 1:2000,
      milieu         = sample(c("Urbain", "Rural"), 2000, replace = TRUE,
                               prob = c(0.4, 0.6)),
      quintile       = sample(1:5, 2000, replace = TRUE),
      depense_totale = exp(rnorm(2000, log(500000), 0.8)),
      poids          = runif(2000, 0.5, 2.0)
    )

    inegalites <- decomposer_inegalite(
      donnees_revenus,
      var_revenu = "depense_totale",
      var_groupe = "milieu",
      var_poids  = "poids"
    )

    knitr::kable(
      inegalites$decomposition,
      caption = "Décomposition des inégalités par milieu",
      digits  = 3
    )

Décomposition des inégalités par milieu
groupe | n | moyenne | gini_interne | part_pop | part_revenu
--- | --- | --- | --- | --- | ---
Urbain | 795 | 686206.9 | 0.437 | 0.392 | 0.395
Rural | 1205 | 677273.3 | 0.421 | 0.608 | 0.605

    # Construction manuelle de la courbe de Lorenz
    x_sorted <- sort(donnees_revenus$depense_totale)
    n         <- length(x_sorted)
    lorenz_df <- tibble::tibble(
      pop_cumulee = c(0, seq_len(n) / n),
      rev_cumulee = c(0, cumsum(x_sorted) / sum(x_sorted))
    )

    ggplot2::ggplot(lorenz_df, ggplot2::aes(pop_cumulee, rev_cumulee)) +
      ggplot2::geom_line(color = "#1B6CA8", linewidth = 1.2) +
      ggplot2::geom_abline(intercept = 0, slope = 1,
                            linetype = "dashed", color = "#888888") +
      ggplot2::annotate("text", x = 0.7, y = 0.35,
                         label = paste0("Gini = ", inegalites$gini),
                         color = "#1B6CA8", fontface = "bold", size = 4) +
      ggplot2::labs(
        title = "Courbe de Lorenz — Dépenses des ménages",
        x     = "Part cumulée de la population",
        y     = "Part cumulée des dépenses"
      ) +
      theme_ins()

Courbe de Lorenz — Dépenses des ménages

## Synthèse

    tibble::tibble(
      Indicateur = c("IDH Bénin 2023", "IPM (H × A)", "Incidence (H)",
                      "Intensité (A)", "Gini"),
      Valeur = c(
        idh_benin$idh,
        resultat_ipm$ipm,
        round(resultat_ipm$H, 3),
        round(resultat_ipm$A, 3),
        inegalites$gini
      ),
      Interpretation = c(
        idh_benin$categorie,
        paste0(round(resultat_ipm$ipm * 100, 1), "% de pauvreté multidim."),
        paste0(round(resultat_ipm$H * 100, 1), "% de ménages pauvres"),
        paste0(round(resultat_ipm$A * 100, 1), "% de privations en moyenne"),
        dplyr::case_when(
          inegalites$gini < 0.3 ~ "Inégalités faibles",
          inegalites$gini < 0.4 ~ "Inégalités modérées",
          TRUE                  ~ "Inégalités élevées"
        )
      )
    ) |>
    knitr::kable(caption = "Tableau de bord des indicateurs ODD")

Tableau de bord des indicateurs ODD
Indicateur | Valeur | Interpretation
--- | --- | ---
IDH Bénin 2023 | 0.5600 | Moyen
IPM (H × A) | 0.2066 | 20.7% de pauvreté multidim.
Incidence (H) | 0.4700 | 47% de ménages pauvres
Intensité (A) | 0.4400 | 44% de privations en moyenne
Gini | 0.4277 | Inégalités élevées