The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

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

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.