2  Caractéristiques socio-démographiques des ménages

Le ménage est l’unité de base de l’enquête. Cette section décrit la composition des ménages, les caractéristiques des chefs de ménage et de leurs membres, ainsi que l’évolution de ces indicateurs.

WarningTravail de vérification en cours

Les résultats présentés ci-dessous sont provisoires, et sont susceptibles de faire l’objet de corrections.

À Marovoay, la structure des ménages est marquée par l’hétérogénéité des stratégies économiques et des structures familiales. La proximité de la ville de Marovoay et de la route nationale RN4 reliant Antananarivo à Mahajanga facilite les échanges et influence les activités non agricoles des ménages.

Dans l’Alaotra, la riziculture irriguée constitue le socle de l’économie domestique, et la taille des exploitations rizicoles influence directement la structure et les revenus des ménages. Les fokontany proches des périmètres irrigués (Avaradrano, Feramanga Atsimo) présentent des profils économiques distincts de ceux situés en périphérie de la cuvette (Analamiranga, Maritampona), où la dépendance au riz pluvial et à l’élevage est plus marquée.

Les indicateurs démographiques présentés dans cette section sont calculés à partir du fichier ménage (res_deb) et du fichier des membres (res_m_a). La classification des activités principales s’appuie sur une nomenclature sectorielle inspirée de la CITI Rév. 4. Les effectifs inférieurs à cinq sont masqués par souci de confidentialité statistique. Les comparaisons entre les deux observatoires doivent tenir compte de la différence de taille des échantillons et de la structure spatiale des zones enquêtées.

Code
library(tidyverse)
library(haven)
library(gt)
library(labelled)

source("utils/helpers_report.R")
source("utils/sites.R")
source("utils/downloadable_output.R")

res_deb <- read_dta("data/ROS_MDG_microdata/2025/res_deb.dta")
res_m_a <- read_dta("data/ROS_MDG_microdata/2025/res_m_a.dta")

# Merged dataset: all household members with observatory labels
members <- res_deb |>
  left_join(res_m_a, by = "j5") |>
  add_obs() |>
  assign_site() |>
  filter_for_profile()

# Expanded version: observatory aggregate + per-site breakdowns
# (no-op in consolidated mode, expands in observatory-specific profiles)
members_site <- members |> expand_sites_for_profile()

2.1 Description des ménages

L’enquête a permis de recenser 4272 individus répartis dans 1026 ménages au sein des deux observatoires.

A Alaotra, on a recensé 1975 individus répartis dans 507 ménages. La taille moyenne des ménages s’établit à 3.9 personnes.

A Marovoay, on a recensé 2297 individus répartis dans 519 ménages. La taille moyenne des ménages s’établit à 4.4 personnes.

2.1.1 Taille des ménages par observatoire

Code
hh_size_obs <- members_site |>
  summarise(hh_size = n(), .by = c(Observatory, j5)) |>
  summarise(mean_hh_size = mean(hh_size), .by = Observatory)

obs_gt(hh_size_obs) |>
  tab_header(title = obs_title("Taille moyenne des ménages")) |>
  fmt_number(columns = mean_hh_size, decimals = 2) |>
  cols_label(mean_hh_size = "Taille moyenne") |>
  style_table()
Table 2.1: Taille moyenne des ménages par observatoire
Taille moyenne des ménages par observatoire
Taille moyenne
Alaotra
3.90
Marovoay
4.43
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire

2.1.2 Taille des ménages par hameau et par observatoire

Code
hh_size_hameau <- members |>
  mutate(j4bis = fix_hameau(j4)) |>
  summarise(hh_size = n(), .by = c(Observatory, j4bis, j5)) |>
  summarise(
    n_hh = n(),
    mean_hh_size = mean(hh_size),
    .by = c(Observatory, j4bis)
  )

obs_gt(hh_size_hameau) |>
  tab_header(title = obs_title("Taille moyenne des ménages par hameau")) |>
  fmt_number(columns = mean_hh_size, decimals = 2) |>
  cols_hide(columns = n_hh) |>
  cols_label(mean_hh_size = "Taille moyenne", j4bis = "Hameau") |>
  style_table()
Taille moyenne des ménages par hameau par observatoire
Hameau Taille moyenne
Alaotra
Ambatoharanana 4.03
Analamiranga 3.98
Ambodivoara 3.86
Ambohidrony 3.81
Ambatomanga 4.03
Mangabe 4.03
Avaradrano 3.76
Feramanga Atsimo 3.81
Marovoay
Ampijoroa 4.81
Maroala 4.70
Madiromiongana 3.86
Bepako 4.35
Source : Enquête auprès des OR 2025

2.1.3 Structure par âge

La structure démographique des ménages enquêtés révèle une population jeune. Cette distribution, caractéristique des populations rurales malgaches, implique un fort taux de dépendance.

A Alaotra, 37 % des individus ont moins de 15 ans. La population en âge de travailler (15–64 ans) représente 57.9 %, tandis que les personnes de 65 ans et plus ne constituent que 5.1 %.

A Marovoay, 40.7 % des individus ont moins de 15 ans. La population en âge de travailler (15–64 ans) représente 54.7 %, tandis que les personnes de 65 ans et plus ne constituent que 4.6 %.

2.1.3.1 Au niveau des observatoires

Code
hh_age |> ror_bar_v(x = AgeGroup, y = Percent, y_label = "%", x_angle = 45)

Répartition des membres des ménages par tranche d’âge selon les observatoires
📥 Télécharger par hameau et par observatoire
Code
hh_age_sex <- members_site |>
  mutate(AgeGroup = classify_age_group(m5), Sexe = classify_sex(m4)) |>
  filter(!is.na(Sexe), !is.na(AgeGroup)) |>
  count(Observatory, AgeGroup, Sexe, name = "n") |>
  mutate(
    Percent = round(n / sum(n) * 100, 1),
    Percent = if_else(Sexe == "Homme", -Percent, Percent),
    .by = c(Observatory, Sexe)
  )
Code
hh_age_sex |> ror_pyramid(age_col = AgeGroup, sex_col = Sexe, y = Percent)

Pyramide des âges des membres des ménages enquêtés par observatoire
📥 Télécharger par hameau et par observatoire

2.1.4 Origine des CM et conjoints

L’origine géographique des chefs de ménage et de leurs conjoints renseigne sur les dynamiques migratoires et le degré d’ancrage local des familles. La classification distingue les tompon-tany (autochtones), les zana-tany (nés sur place de parents migrants), les valivotaka (migrants installés durablement) et les mpihavy (arrivants récents). La répartition de ces catégories diffère sensiblement entre les deux observatoires.

Code
make_origin_histogram(members_site, m3, classify_origin, "Origine",
                      obs_title("Distribution de l'origine des CM et conjoints"))

📥 Télécharger par hameau et par observatoire

2.1.5 Région d’origine

La provenance régionale des CM et conjoints qui ne sont pas natifs de la localité permet d’identifier les principaux bassins migratoires alimentant chaque observatoire.

Code
homeland_labels |>
  mutate(Member_Type = if_else(m6 == 1, "Chef de ménage", "Conjoint")) |>
  count(Observatory, Member_Type, Homeland) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = c(Observatory, Member_Type)) |>
  ror_bar_grouped(x = Homeland, fill = Member_Type, y = pct,
                  title = "Région d'origine des CM et conjoints",
                  y_label = "%", direction = "horizontal")

📥 Télécharger par hameau et par observatoire

2.1.6 Raison d’installation

Les raisons d’installation des CM et conjoints non originaires du lieu éclairent les motivations migratoires. Elles distinguent notamment les installations liées au mariage de celles motivées par les opportunités économiques (travail agricole ou non agricole).

Code
make_origin_histogram(members_site, mg4a, classify_reason, "Raison",
                      obs_title("Distribution des raisons d'implantation des CM et conjoints"))

📥 Télécharger par hameau et par observatoire

2.2 Caractéristiques des chefs de ménages

Le profil des chefs de ménage (CM) est décrit ci-dessous.

Dans l’Alaotra, 78.3 % des CM sont des hommes, soit 21.7 % de ménages dirigés par des femmes. L’âge moyen des CM est de 45.4 ans. Sur le plan conjugal, 74.2 % des CM vivent en couple (mariés ou en concubinage).

A Marovoay, 78 % des CM sont des hommes, soit 22 % de ménages dirigés par des femmes. L’âge moyen des CM est de 46.1 ans. Sur le plan conjugal, 73 % des CM vivent en couple (mariés ou en concubinage).

2.2.1 Caractéristiques socio-démographiques

Code
cm <- members |> filter(m6 == 1)
cm_site <- members_site |> filter(m6 == 1)

# --- Sexe ---
sexe_table <- cm |>
  mutate(Sexe = classify_sex(m4)) |>
  count(Observatory, Sexe) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory) |>
  mutate(Valeur = paste0(pct, "%")) |>
  select(Observatory, Sexe, Valeur) |>
  pivot_wider(names_from = Observatory, values_from = Valeur, values_fill = "-") |>
  mutate(Caractéristique = "Sexe", .before = Sexe) |>
  rename(Catégorie = Sexe)

# --- Âge ---
age_table <- cm |>
  summarise(
    Médiane = median(m5, na.rm = TRUE),
    Moyenne = round(mean(m5, na.rm = TRUE), 1),
    Mode = as.numeric(names(sort(table(m5), decreasing = TRUE)[1])),
    Minimum = min(m5, na.rm = TRUE),
    Maximum = max(m5, na.rm = TRUE),
    .by = Observatory
  ) |>
  pivot_longer(-Observatory, names_to = "Statistique", values_to = "Valeur") |>
  pivot_wider(names_from = Observatory, values_from = Valeur) |>
  mutate(
    Statistique = factor(Statistique, levels = c("Minimum", "Mode", "Médiane", "Moyenne", "Maximum"))
  ) |>
  arrange(Statistique) |>
  mutate(across(any_of(c("Alaotra", "Marovoay")), \(x) as.character(round(x, 0)))) |>
  mutate(Caractéristique = "Âge", .before = Statistique) |>
  rename(Catégorie = Statistique)

# --- Statut matrimonial ---
statut_table <- cm |>
  mutate(Statut = classify_marital(m7)) |>
  count(Observatory, Statut) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory) |>
  select(Observatory, Statut, pct) |>
  pivot_wider(names_from = Observatory, values_from = pct, values_fill = 0) |>
  mutate(across(any_of(c("Alaotra", "Marovoay")), \(x) paste0(x, "%"))) |>
  mutate(Caractéristique = "Statut matrimonial", .before = Statut) |>
  rename(Catégorie = Statut)

# --- Combined table ---
hh_combined <- bind_rows(sexe_table, age_table, statut_table)

gt(hh_combined, groupname_col = "Caractéristique") |>
  tab_header(title = "Caractéristiques des chefs de ménage") |>
  safe_cols_label(Catégorie = "Catégorie", Alaotra = "Alaotra", Marovoay = "Marovoay") |>
  tab_footnote(
    footnote = "Sexe et Statut matrimonial : effectifs et pourcentages. Âge : statistiques descriptives.",
    locations = cells_title(groups = "title")
  ) |>
  style_table()
Caractéristiques des chefs de ménage1
Catégorie Alaotra Marovoay
Sexe
Femme 21.7% 22%
Homme 78.3% 78%
Âge
Minimum 16 18
Mode 27 36
Médiane 43 45
Moyenne 45 46
Maximum 90 96
Statut matrimonial
Célibataire 2.2% 1.3%
Divorcé(e) 11% 16.2%
En concubinage 3.7% 6.2%
Marié(e) civil / religieux / polygame 20.9% 5.8%
Marié(e) selon la tradition 49.5% 61.1%
Veuf(ve) 12.6% 9.4%
1 Sexe et Statut matrimonial : effectifs et pourcentages. Âge : statistiques descriptives.
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire

2.2.2 Niveau d’éducation

Le niveau d’éducation des chefs de ménage constitue un déterminant majeur de la capacité d’adaptation et de la vulnérabilité des ménages ruraux. L’analyse croisée par sexe met en évidence des disparités supplémentaires.

Dans l’Alaotra, le niveau le plus fréquemment atteint est « Primaire » (61.9 % des CM).

A Marovoay, le niveau le plus fréquemment atteint est « Primaire » (52.4 % des CM).

2.2.2.1 Niveau d’éducation du Chef de ménage

Niveau d’éducation des chefs de ménage
📥 Télécharger par hameau et par observatoire

2.2.2.2 Niveau d’éducation des chefs de ménages par sexe

Niveau d’éducation des CM par sexe
📥 Télécharger par hameau et par observatoire

2.2.3 Alphabétisation des chefs de ménage

L’aptitude à lire et écrire conditionne l’accès à l’information, aux services publics et aux opportunités économiques. Les sections suivantes détaillent les compétences en lecture et en écriture séparément, en distinguant trois niveaux : lecture/écriture aisée, avec effort, ou absente.

Dans l’Alaotra, 84.4 % des CM savent lire aisément.

A Marovoay, 74 % des CM savent lire aisément.

2.2.3.1 Savoir lire

Code
literacy_3level(cm_site, s1a, "Aptitude à la lecture des chefs de ménage")
Aptitude à la lecture des chefs de ménage
Niveau Alaotra Marovoay
Oui 84.4% 74%
Avec effort 6.3% 6%
Non 9.3% 20%
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire
Code
literacy_3level_bar(cm_site, s1a, "Aptitude à la lecture des CM selon le sexe")

Aptitude à la lecture des CM selon le sexe

2.2.3.2 Savoir écrire

Code
literacy_3level(cm_site, s1b, "Aptitude à l'écriture des chefs de ménage")
Aptitude à l'écriture des chefs de ménage
Niveau Alaotra Marovoay
Oui 84.4% 72.8%
Avec effort 5.3% 6.7%
Non 10.3% 20.4%
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire
Code
literacy_3level_bar(cm_site, s1b, "Aptitude à l'écriture des CM selon le sexe")

Aptitude à l’écriture des CM selon le sexe

2.2.4 Activités principales des Chefs de ménage

L’activité économique principale des chefs de ménage traduit la structure productive de chaque observatoire. Les activités sont regroupées en catégories sectorielles inspirées de la CITI Rév. 4 afin de garantir un effectif suffisant dans chaque classe et de préserver la confidentialité statistique.

Dans l’Alaotra, l’activité dominante est « Cultivateur exploitant » (60.4 % des CM).

A Marovoay, l’activité dominante est « Cultivateur exploitant » (58.6 % des CM).

Code
cm_act |> make_bar_obs(x = Act_principal, y = Percent,
                  y_label = "%")
Figure 2.1: Activités principales des chefs de ménages
📥 Télécharger par hameau et par observatoire

2.2.4.1 Activités principales des CM par sexe

Code
cm_act_sex_plt |> ror_bar_grouped(x = Act_principal, fill = Sexe, y = Percent,
                                  title = "Activit\u00e9s principales des CM par observatoire et sexe (%)",
                                  y_label = "%", direction = "horizontal")

Activités principales des CM par observatoire et sexe
📥 Télécharger par hameau et par observatoire

2.3 Caractéristiques des autres membres de ménages

Les autres membres du ménage (conjoints, enfants, dépendants) constituent la majorité de la population recensée. Leur profil démographique, éducatif et économique complète celui des chefs de ménage et permet de dresser un portrait plus complet du capital humain des familles rurales.

2.3.1 Caractéristiques socio-démographiques

Code
others <- members |> filter(m6 != 1)
others_site <- members_site |> filter(m6 != 1)

# --- Sexe ---
sexe_table2 <- others |>
  mutate(Sexe = classify_sex(m4)) |>
  filter(!is.na(Sexe)) |>
  count(Observatory, Sexe) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory) |>
  mutate(Valeur = paste0(pct, "%")) |>
  select(Observatory, Sexe, Valeur) |>
  pivot_wider(names_from = Observatory, values_from = Valeur, values_fill = "-") |>
  mutate(Caractéristique = "Sexe", .before = Sexe) |>
  rename(Catégorie = Sexe)

# --- Âge ---
age_table2 <- others |>
  summarise(
    Médiane = median(m5, na.rm = TRUE),
    Moyenne = round(mean(m5, na.rm = TRUE), 1),
    Mode = as.numeric(names(sort(table(m5), decreasing = TRUE)[1])),
    Minimum = min(m5, na.rm = TRUE),
    Maximum = max(m5, na.rm = TRUE),
    .by = Observatory
  ) |>
  pivot_longer(-Observatory, names_to = "Statistique", values_to = "Valeur") |>
  pivot_wider(names_from = Observatory, values_from = Valeur) |>
  mutate(
    Statistique = factor(Statistique, levels = c("Minimum", "Mode", "Médiane", "Moyenne", "Maximum"))
  ) |>
  arrange(Statistique) |>
  mutate(across(any_of(c("Alaotra", "Marovoay")), \(x) as.character(round(x, 0)))) |>
  mutate(Caractéristique = "Âge", .before = Statistique) |>
  rename(Catégorie = Statistique)

# --- Statut matrimonial ---
statut_table2 <- others |>
  mutate(Statut = classify_marital(m7)) |>
  filter(!is.na(Statut)) |>
  count(Observatory, Statut) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory) |>
  select(Observatory, Statut, pct) |>
  pivot_wider(names_from = Observatory, values_from = pct, values_fill = 0) |>
  mutate(across(any_of(c("Alaotra", "Marovoay")), \(x) paste0(x, "%"))) |>
  mutate(Caractéristique = "Statut matrimonial", .before = Statut) |>
  rename(Catégorie = Statut)

# --- Combined table ---
hh_combined2 <- bind_rows(sexe_table2, age_table2, statut_table2)

gt(hh_combined2, groupname_col = "Caractéristique") |>
  tab_header(title = "Caractéristiques des autres membres de ménage") |>
  safe_cols_label(Catégorie = "Catégorie", Alaotra = "Alaotra", Marovoay = "Marovoay") |>
  tab_footnote(
    footnote = "Sexe et Statut matrimonial : pourcentages. Âge : statistiques descriptives.",
    locations = cells_title(groups = "title")
  ) |>
  style_table()
Caractéristiques des autres membres de ménage1
Catégorie Alaotra Marovoay
Sexe
Femme 60% 58.9%
Homme 40% 41.1%
Âge
Minimum 0 0
Mode 0 12
Médiane 15 14
Moyenne 19 18
Maximum 93 99
Statut matrimonial
Célibataire 38.2% 41.3%
Divorcé(e) 5% 6.8%
En concubinage 3.4% 5.5%
Marié(e) civil / religieux / polygame 14.9% 3.7%
Marié(e) selon la tradition 36.6% 40.3%
Veuf(ve) 2% 2.5%
1 Sexe et Statut matrimonial : pourcentages. Âge : statistiques descriptives.
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire

2.3.2 Éducation et scolarisation

Le niveau d’éducation des autres membres de ménage complète le portrait éducatif des familles. Les disparités entre sexes et entre observatoires donnent un aperçu des inégalités d’accès à l’éducation.

2.3.2.1 Niveau d’éducation des autres membres

Niveau d’éducation des autres membres
📥 Télécharger par hameau et par observatoire

2.3.2.2 Niveau d’éducation des autres membres par sexe

Niveau d’éducation des autres membres par sexe
📥 Télécharger par hameau et par observatoire

2.3.2.3 Alphabétisation des autres membres

2.3.2.3.1 Savoir lire
Code
literacy_3level_bar(others_site, s1a, "Aptitude à la lecture des autres membres selon le sexe")

Aptitude à la lecture des autres membres selon le sexe
2.3.2.3.2 Savoir écrire
Code
literacy_3level(others_site, s1b, "Aptitude à l'écriture des autres membres")
Aptitude à l'écriture des autres membres
Niveau Alaotra Marovoay
Oui 73.9% 56.8%
Avec effort 8.2% 15%
Non 18% 28.3%
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire
Code
literacy_3level_bar(others_site, s1b, "Aptitude à l'écriture des autres membres selon le sexe")

Aptitude à l’écriture des autres membres selon le sexe

2.3.3 Scolarisation

Le taux de scolarisation des enfants de 6 à 14 ans constitue un indicateur clé du développement humain et de l’investissement des ménages dans l’éducation.

Dans l’Alaotra, le taux de scolarisation s’élève à 93.7 %.

Dans Marovoay, le taux de scolarisation s’élève à 81.7 %.

2.3.3.1 Taux de scolarisation des enfants de 6 à 14 ans

Code
school_rate <- members_site |>
  filter(m5 >= 6, m5 <= 14, s2 %in% c(1, 2)) |>
  mutate(Scolarise = if_else(s2 == 1, "Oui", "Non")) |>
  count(Observatory, Scolarise, name = "n") |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory) |>
  select(-n) |>
  pivot_wider(names_from = Scolarise, values_from = pct,
              names_glue = "{Scolarise}_pct")

obs_gt(school_rate) |>
  tab_header(title = obs_title("Taux de scolarisation des enfants de 6 à 14 ans")) |>
  cols_label(Oui_pct = "Scolarisés (%)",
             Non_pct = "Non scolarisés (%)") |>
  fmt_number(columns = c(Oui_pct, Non_pct), decimals = 1) |>
  style_table()
Taux de scolarisation des enfants de 6 à 14 ans par observatoire
Non scolarisés (%) Scolarisés (%)
Alaotra
6.3 93.7
Marovoay
18.3 81.7
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire

2.3.3.2 Classe suivie 2024-2025

Code
class_data <- members_site |>
  filter(m5 >= 3, m5 <= 25, s2 == 1, !is.na(s3a)) |>
  mutate(
    Cat_age = case_when(
      m5 <= 5  ~ "3-5 ans",
      m5 <= 10 ~ "6-10 ans",
      m5 <= 14 ~ "11-14 ans",
      m5 <= 17 ~ "15-17 ans",
      TRUE     ~ "18-25 ans"
    ),
    Niv_educ = classify_education(s3a) |> replace_na("Inconnu")
  ) |>
  count(Observatory, Cat_age, Niv_educ) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = c(Observatory, Cat_age))

class_wide <- class_data |>
  select(Observatory, Cat_age, Niv_educ, pct) |>
  pivot_wider(names_from = Niv_educ, values_from = pct, values_fill = 0) |>
  arrange(Observatory, Cat_age)

obs_gt(class_wide) |>
  tab_header(title = "Classe suivie en 2024-2025 par catégorie d'âge") |>
  cols_label(Cat_age = "Catégorie d'âge") |>
  style_table()
Classe suivie en 2024-2025 par catégorie d'âge
Catégorie d'âge Primaire Secondaire 1er cycle Secondaire 2ème cycle & sup. Inconnu
Alaotra
11-14 ans 70.4 29.0 0.6 0.0
15-17 ans 49.5 41.2 9.3 0.0
18-25 ans 46.3 34.5 19.2 0.0
3-5 ans 43.6 2.6 53.8 0.0
6-10 ans 85.3 1.8 12.0 0.9
Marovoay
11-14 ans 84.1 13.6 1.4 0.9
15-17 ans 58.5 36.6 4.9 0.0
18-25 ans 51.1 33.8 15.1 0.0
3-5 ans 44.4 0.0 51.9 3.7
6-10 ans 85.2 0.7 12.6 1.4
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire

2.3.3.3 Raisons de non fréquentation de l’école pour les 6 à 15 ans

La Figure 2.2 détaille l’ensemble des motifs de non-scolarisation cités.

Dans l’Alaotra, parmi les enfants de 6 à 15 ans non scolarisés, la première raison invoquée est « Autre » (33.3 %).

A Marovoay, parmi les enfants de 6 à 15 ans non scolarisés, la première raison invoquée est « Frais trop élevés » (52.1 %).

Code
raisons_labs <- c(
  "1"  = "Niveau suffisant",
  "2"  = "Main-d'oeuvre exploitation",
  "3"  = "Besoin revenu",
  "4"  = "Frais scolarité trop élevés",
  "5"  = "Sans intérêt (famille)",
  "6"  = "Échec scolaire",
  "7"  = "Grossesse / mariage",
  "8"  = "Handicap / maladie",
  "9"  = "École en mauvais état",
  "10" = "Instituteur absent",
  "11" = "École trop éloignée",
  "12" = "Trop jeune",
  "16" = "Autre raison",
  "17" = "Famine",
  "19" = "Paresse"
)

non_scol <- members |>
  filter(m5 >= 6, m5 <= 15, m6 != 1, s2 == 2, !is.na(s5)) |>
  mutate(
    Raison = if_else(
      as.character(as.integer(s5)) %in% names(raisons_labs),
      raisons_labs[as.character(as.integer(s5))],
      "Autre"
    )
  ) |>
  count(Observatory, Raison) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory)

non_scol |>
  filter(pct >= 2) |>
  ror_bar_grouped(x = Raison, fill = Observatory, y = pct,
                  y_label = "% des enfants non scolarisés",
                  direction = "horizontal", facet = FALSE)
Figure 2.2: Principales raisons de non-scolarisation ou d’arrêt des études (6-15 ans)
📥 Télécharger par hameau et par observatoire

2.3.4 Activités principales des autres membres de ménages

La répartition sectorielle des activités des autres membres de ménage reflète la diversification économique au sein des familles et le rôle des conjoints et enfants dans l’économie du ménage. Les activités sont regroupées selon la même nomenclature sectorielle que pour les CM.

Code
other_act |> make_bar_obs(x = Act_principal, y = Percent,
                     title = obs_title("Activités principales des autres membres (%)"),
                     y_label = "%")
Figure 2.3
📥 Télécharger par hameau et par observatoire

2.3.4.1 Activités principales des autres membres par sexe

Code
other_act_sex_plt |> ror_bar_grouped(x = Act_principal, fill = Sexe, y = Percent,
                                     title = "Activités des autres membres par observatoire et sexe (%)",
                                     y_label = "%", direction = "horizontal")

📥 Télécharger par hameau et par observatoire

2.4 Évolution des indicateurs démographiques (1996-2025)

Les observatoires disposent de données démographiques depuis les années 1990. Cette section retrace l’évolution de quatre indicateurs clés : la taille moyenne des ménages, la proportion de chefs de ménage femmes, le taux de scolarisation des 6-14 ans et l’âge moyen du chef de ménage.

CautionInterprétation : effet du panel et de l’échantillonnage

Les tendances présentées dans cette section doivent être interprétées avec prudence. Les observatoires suivaient un dispositif de panel : la première année, les ménages sont tirés au sort dans la localités, puis ils sont réinterrogés chaque année (avec remplacement partiel si le ménage a disparu ou refuse de répondre). En 2025, après dix ans d’interruption, un nouveau tirage a été effectué à partir du dénombrement. Les évolutions observées reflètent donc à la fois des dynamiques réelles dans les localités et des changements de composition de l’échantillon (vieillissement du panel, attrition sélective, renouvellement complet en 2025).

Code
demog_trends |> make_trend_plot(y_var = taille_moy,
                          y_label = "Taille moyenne du ménage",
                          gap_year = 2015)

Évolution de la taille moyenne des ménages (1996-2025)
Code
if ("pct_fem_cm" %in% names(demog_trends)) {
  demog_trends |> filter(!is.na(pct_fem_cm)) |>
    make_trend_plot(y_var = pct_fem_cm,
              y_label = "% de chefs de ménage femmes",
              gap_year = 2015)
}

Évolution du pourcentage de chefs de ménage femmes (1996-2025)
Code
if ("taux_scol" %in% names(demog_trends)) {
  demog_trends |> filter(!is.na(taux_scol)) |>
    make_trend_plot(y_var = taux_scol,
              y_label = "Taux de scolarisation 6-14 ans (%)",
              gap_year = 2015)
}

Évolution du taux de scolarisation des 6-14 ans (1996-2025)
Code
if ("age_cm_moy" %in% names(demog_trends)) {
  demog_trends |> filter(!is.na(age_cm_moy)) |>
    make_trend_plot(y_var = age_cm_moy,
              y_label = "Âge moyen du chef de ménage",
              gap_year = 2015)
}

Évolution de l’âge moyen du chef de ménage (1996-2025)