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

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

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")
cat("  IDH global    :", idh_benin$idh, "\n")
cat("  Santé         :", idh_benin$indice_sante, "\n")
cat("  Éducation     :", idh_benin$indice_education, "\n")
cat("  Revenu        :", idh_benin$indice_revenu, "\n")
cat("  Catégorie     :", idh_benin$categorie, "\n")

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_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()

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,
  var_nutrition      = 'malnutrition',
  var_mortalite_inf  = 'mortalite_enf',
  var_scolarisation  = 'scol_enfants',
  var_annees_scol    = 'scol_adulte',
  var_electricite    = 'electricite',
  var_eau            = 'eau_potable',
  var_assainissement = 'assainissement',
  var_combustible    = 'combustible',
  var_logement       = 'logement',
  var_actifs         = 'actifs',
  poids   = 'poids',
  seuil_k = 1/3
)

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")
)

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",
  poids = "poids"
)
knitr::kable(
  inegalites$decomposition,
  caption = "Décomposition des inégalités par milieu",
  digits  = 3
)
# 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()

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")


Try the statAfrikR package in your browser

Any scripts or data that you put into this service are public.

statAfrikR documentation built on Sept. 20, 2026, 5:07 p.m.