8  Cataclysmes et catastrophes

Les ménages ruraux de Madagascar sont régulièrement exposés à des aléas climatiques et biologiques : sécheresse, cyclones, inondations, invasions de criquets ou de rats, etc. Ce chapitre analyse la prévalence et la sévérité des cataclysmes subis par les ménages des observatoires d’Alaotra et de Marovoay au cours de la campagne 2025 (octobre 2024-septembre 2025).

Deux fichiers de données sont mobilisés :

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.

Code
options(encoding = "UTF-8")

library(tidyverse)
library(haven)
library(gt)

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

# Données observatoires
res_deb <- read_dta("data/ROS_MDG_microdata/2025/res_deb.dta")
# Données cataclysmes (ménage × type)
res_cc <- read_dta("data/ROS_MDG_microdata/2025/res_cc.dta")
# Données dégâts agricoles (ménage × culture)
res_cca <- read_dta("data/ROS_MDG_microdata/2025/res_cca.dta")

# Préparer les variables d'observatoire et de hameau
res_deb <- res_deb %>%
  mutate(
    Observatory = case_when(
      j0 == 3  ~ "Marovoay",
      j0 == 21 ~ "Alaotra",
      TRUE     ~ as.character(j0)
    ),
    j4bis = case_when(
      str_starts(str_to_lower(j4), "bepako")        ~ "Bepako",
      str_starts(str_to_lower(j4), "ampijoroa")     ~ "Ampijoroa",
      str_starts(str_to_lower(j4), "maroala")        ~ "Maroala",
      str_starts(str_to_lower(j4), "madiromiongana") ~ "Madiromiongana",
      TRUE ~ j4
    )
  )

res_deb <- assign_site(res_deb)
res_deb <- res_deb %>% filter_for_profile()

res_deb_site <- res_deb |> expand_sites_for_profile()

# Harmoniser les labels des types de cataclysmes (nettoyage des doublons de saisie)
res_cc <- res_cc %>%
  mutate(
    cc1_a_clean = case_when(
      str_to_lower(cc1_a) %in% c("afo / varatra", "afo/varatra") ~ "Afo / Varatra",
      str_to_lower(cc1_a) %in% c("hafa", "")                     ~ "Hafa",
      str_to_lower(cc1_a) == "misy voahitsaka"                    ~ "Olona",
      str_to_lower(cc1_a) == "olona (halatra fanim"               ~ "Olona",
      str_to_lower(cc1_a) == "andiam-biby"                        ~ "Bibikely hafa",
      TRUE ~ cc1_a
    )
  )

# Labels en français pour les types de cataclysmes
cata_labels <- c(
  "Haintany"      = "Sécheresse",
  "Tondra-drano"  = "Inondation",
  "Rivo-doza"     = "Cyclone",
  "Havandra"      = "Grêle",
  "Valan'aretina" = "Maladie des cultures/élevage",
  "Valala"        = "Criquets",
  "Voalavo"       = "Rats",
  "Bibikely hafa" = "Autres bestioles",
  "Vorona"        = "Oiseaux",
  "Afo / Varatra" = "Incendie / Foudre",
  "Olona"         = "Facteur humain",
  "Hafa"          = "Autre"
)

res_cc <- res_cc %>%
  mutate(
    Catastrophe = if_else(
      cc1_a_clean %in% names(cata_labels),
      cata_labels[cc1_a_clean],
      cc1_a_clean
    )
  )

# Filtrer les événements survenus
events <- res_cc %>% filter(cc11 == 1)

# --- Préparation pour les variantes téléchargeables ---
n_hh_site <- res_deb %>% count(Observatory, Site, name = "n_hh_site")
n_hh_obs  <- res_deb %>% count(Observatory, name = "n_hh_obs")

hh_cata <- res_deb %>%
  select(j5, Observatory, Site, j4bis) %>%
  left_join(
    events %>% group_by(j5) %>% summarise(nb_events = n(), .groups = "drop"),
    by = "j5"
  ) %>%
  mutate(nb_events = replace_na(nb_events, 0), touched = nb_events > 0)

events_full <- events %>%
  inner_join(res_deb %>% select(j5, Observatory, Site, j4bis), by = "j5") %>%
  left_join(n_hh_site, by = c("Observatory", "Site")) %>%
  left_join(n_hh_obs, by = "Observatory")

cca_full <- res_cca %>%
  inner_join(res_deb %>% select(j5, Observatory, Site), by = "j5")

8.1 Prévalence des cataclysmes

L’exposition aux aléas climatiques et biologiques est très élevée dans les deux observatoires.

Dans l’Alaotra, 73 % des ménages déclarent avoir été touchés par au moins un événement. Les ménages affectés subissent en moyenne 1.8 événements. Le cataclysme le plus fréquemment cité est « Sécheresse ».

A Marovoay, 71.1 % des ménages déclarent avoir été touchés par au moins un événement. Les ménages affectés subissent en moyenne 1.5 événements. Le cataclysme le plus fréquemment cité est « Sécheresse ».

8.1.1 Taux d’exposition global

Quelle part des ménages enquêtés ont été touchés par au moins une catastrophe au cours de la campagne ?

Code
# T1 : % de ménages touchés par au moins une catastrophe, par observatoire
menages_touches <- events %>%
  inner_join(res_deb, by = "j5") %>%
  group_by(Observatory) %>%
  summarise(n_touches = n_distinct(j5), .groups = "drop") %>%
  left_join(
    res_deb %>% count(Observatory, name = "n_total"),
    by = "Observatory"
  ) %>%
  mutate(
    pct = round(n_touches / n_total * 100, 1)
  )

# Ajouter une ligne "Ensemble"
menages_touches_all <- menages_touches %>%
  summarise(
    Observatory = "Ensemble",
    n_touches = sum(n_touches),
    n_total = sum(n_total),
    pct = round(n_touches / n_total * 100, 1)
  ) %>%
  bind_rows(menages_touches, .)

menages_touches_all %>%
  gt() %>%
  tab_header(
    title = "Ménages ayant subi au moins une catastrophe"
  ) %>%
  cols_label(
    Observatory = "Observatoire",
    n_touches = "Ménages touchés",
    n_total = "Total ménages",
    pct = "% touchés"
  ) %>%
  fmt_number(columns = pct, decimals = 1) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#F0F0F0")),
    locations = cells_body(rows = Observatory == "Ensemble")
  )
Ménages ayant subi au moins une catastrophe
Observatoire Ménages touchés Total ménages % touchés
Alaotra 370 507 73.0
Marovoay 369 519 71.1
Ensemble 739 1026 72.0
📥 Télécharger par hameau et par observatoire

Le taux d’exposition aux cataclysmes est très élevé dans les deux observatoires.

8.1.2 Prévalence par type de catastrophe

La sécheresse est de loin le Catastrophe le plus fréquemment cité, suivi des maladies (cultures/élevage), des rats et des facteurs humains (vol, dégradation). Les cyclones et inondations ont touché un nombre plus limité de ménages dans ces deux observatoires pour cette campagne.

Code
# G1 : Barres horizontales — types de cataclysmes les plus fréquents
prev_type |>
  expand_sites_for_profile() |>
  make_bar_obs(x = Catastrophe, y_label = "% des ménages")

📥 Télécharger par hameau et par observatoire

8.1.3 Nombre moyen de catastrophes par ménage

Un ménage peut être touché par plusieurs types de catastrophes au cours de la même campagne. Le tableau suivant indique le nombre moyen de catastrophes subies.

Code
# T3 : Nombre moyen de catastrophes par ménage, par hameau et observatoire
nb_cata <- events %>%
  group_by(j5) %>%
  summarise(nb_events = n(), .groups = "drop") %>%
  right_join(res_deb %>% select(j5, Observatory, j4bis), by = "j5") %>%
  mutate(nb_events = replace_na(nb_events, 0))

nb_cata_hameau <- nb_cata %>%
  group_by(Observatory, j4bis) %>%
  summarise(
    n_hh = n(),
    mean_events = round(mean(nb_events), 1),
    .groups = "drop"
  )

# Lignes "Ensemble"
nb_cata_combined <- nb_cata_hameau %>%
  group_by(Observatory) %>%
  summarise(
    j4bis = "Ensemble",
    mean_events = round(weighted.mean(mean_events, n_hh), 1),
    n_hh = sum(n_hh),
    .groups = "drop"
  ) %>%
  bind_rows(nb_cata_hameau, .) %>%
  arrange(Observatory, j4bis == "Ensemble", j4bis)

nb_cata_combined %>%
  expand_sites_for_profile() %>%
  obs_gt() %>%
  tab_header(
    title = "Nombre moyen de catastrophes subies par ménage",
    subtitle = "Par hameau et observatoire"
  ) %>%
  cols_label(
    j4bis = "Hameau",
    n_hh = "Nb ménages",
    mean_events = "Nb moyen de catastrophes"
  ) %>%
  cols_hide(columns = n_hh) %>%
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#F0F0F0")),
    locations = cells_body(rows = j4bis == "Ensemble")
  ) %>%
  tab_options(row_group.font.weight = "bold") %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_column_labels()
  )
Nombre moyen de catastrophes subies par ménage
Par hameau et observatoire
Hameau Nb moyen de catastrophes
Alaotra
Ambatoharanana 1.3
Ambatomanga 0.9
Ambodivoara 1.4
Ambohidrony 1.0
Analamiranga 1.2
Avaradrano 1.7
Feramanga Atsimo 1.2
Mangabe 1.5
Ensemble 1.3
Marovoay
Ampijoroa 0.7
Bepako 0.9
Madiromiongana 1.5
Maroala 1.1
Ensemble 1.0
📥 Télécharger par hameau et par observatoire

8.2 Sévérité des dégâts

Au-delà de la simple survenance, il est essentiel d’évaluer l’ampleur des dégâts causés. Trois domaines sont documentés : le logement, l’élevage et les conséquences sur les personnes du ménage.

Les niveaux de dégâts sont codés ainsi :

  • Logement et élevage : 1 = Rien, 2 = Un peu, 3 = Beaucoup (plus de la moitié), 4 = Destruction totale
  • Personnes : 1 = Aucun, 2 = Blessure/Maladie, 3 = Décès/Porté disparu, 4 = Manque de vivres

8.2.1 Dégâts sur le logement

Les dégâts sur le logement sont évalués selon quatre niveaux de gravité, du plus bénin (« Rien ») à la destruction totale. Le croisement avec le type de catastrophe permet d’identifier les aléas les plus destructeurs pour l’habitat.

Dégâts sur le logement par type de catastrophe
📥 Télécharger par hameau et par observatoire

8.2.2 Dégâts sur l’élevage

Les dégâts sur l’élevage sont particulièrement importants pour certains aléas : les maladies et la sécheresse peuvent entraîner des pertes significatives (catégorie « Beaucoup » ou « Destruction totale »).

8.2.3 Conséquences sur les personnes

Conséquences des cataclysmes sur les personnes
📥 Télécharger par hameau et par observatoire

La conséquence la plus répandue est le manque de vivres, directement lié aux pertes agricoles. Les décès et disparitions, bien que rares, sont signalés pour certains cataclysmes (inondations, cyclones).

8.2.4 Profil de sévérité des principaux cataclysmes

Code
# G2 : Barres empilées — sévérité des dégâts pour les 5 cataclysmes les plus fréquents
top5_cata <- events %>%
  count(Catastrophe, sort = TRUE) %>%
  slice_head(n = 5) %>%
  pull(Catastrophe)

# Dégâts élevage pour les top 5
severite_plot <- events %>%
  inner_join(res_deb, by = "j5") %>%
  filter(Catastrophe %in% top5_cata, !is.na(cc1a3)) %>%
  mutate(
    Niveau = factor(
      degats_labels[as.character(cc1a3)],
      levels = c("Destruction totale", "Beaucoup", "Un peu", "Rien")
    )
  ) %>%
  count(Observatory, Catastrophe, Niveau) %>%
  group_by(Observatory, Catastrophe) %>%
  mutate(pct = round(n / sum(n) * 100, 1)) %>%
  ungroup()

severite_plot |>
  expand_sites_for_profile() |>
  ror_bar_stacked(
    x = Catastrophe, y = pct, fill = Niveau,
    y_label = "% des ménages", proportion = FALSE,
    direction = "horizontal",
    palette = c(
      "Destruction totale" = "#d62728", "Beaucoup" = "#ff7f0e",
      "Un peu" = "#ffbb78", "Rien" = "#aec7e8"
    )
  )

📥 Télécharger par hameau et par observatoire

Le graphique précédent révèle que la sévérité des dégâts sur l’élevage varie fortement selon le type de catastrophe. Les destructions totales sont surtout associées aux événements les plus violents (cyclones, inondations), tandis que les sécheresses et les maladies animales engendrent des pertes plus diffuses mais néanmoins significatives.

8.3 Saisonnalité des cataclysmes

Les événements peuvent survenir en période de soudure (lorsque les stocks sont déjà bas) ou hors soudure. La coïncidence avec la soudure aggrave considérablement l’impact sur la sécurité alimentaire.

Code
# G3 : Barres groupées hors soudure vs pendant soudure
saisonnalite_plot <- saisonnalite %>%
  pivot_longer(
    cols = c(pct_hors, pct_pendant),
    names_to = "Période",
    values_to = "pct"
  ) %>%
  mutate(
    Période = if_else(Période == "pct_hors", "Hors soudure", "Pendant soudure")
  )

saisonnalite_plot |>
  expand_sites_for_profile() |>
  ror_bar_grouped(
    x = Catastrophe, fill = Période,
    y_label = "% des ménages",
    direction = "horizontal",
    palette = c("Hors soudure" = "#2ca02c", "Pendant soudure" = "#d62728")
  )

📥 Télécharger par hameau et par observatoire

La majorité des cataclysmes surviennent pendant la période de soudure, ce qui amplifie leur impact sur la sécurité alimentaire des ménages. La sécheresse et les maladies, notamment, frappent souvent lorsque les stocks sont déjà au plus bas.

8.4 Dégâts agricoles par culture

Le fichier res_cca détaille les dégâts subis par chaque culture, en distinguant les pertes sur les champs (en cours de croissance) et sur les stocks (après récolte). Cette information est cruciale pour évaluer l’impact réel sur la production alimentaire.

8.4.1 Cultures les plus touchées

Top 10 des cultures les plus touchées
📥 Télécharger par hameau et par observatoire

Le riz, culture vivrière dominante, est de loin la culture la plus exposée aux cataclysmes. Le haricot, le maïs et le manioc figurent également parmi les cultures les plus touchées.

8.4.2 Dégâts sur les champs de riz par type de catastrophe

Le riz étant la culture la plus exposée, il est utile de décomposer la gravité des dégâts sur les champs de riz selon le type de catastrophe. La lecture croisée de la sévérité et du type d’événement permet de hiérarchiser les risques pour la production rizicole.

Gravité des dégâts sur les champs de riz
📥 Télécharger par hameau et par observatoire

8.4.3 Dégâts sur les stocks de riz par type de catastrophe

Gravité des dégâts sur les stocks de riz
📥 Télécharger par hameau et par observatoire

Les dégâts sur les stocks, bien que moins fréquents que sur les champs, affectent directement les réserves alimentaires du ménage, en particulier lorsqu’ils surviennent en période de soudure. Les rats et les insectes nuisibles constituent les principales causes de pertes post-récolte, auxquelles s’ajoutent les conditions de stockage précaires face aux intempéries.

8.4.4 Comparaison dégâts champs vs stocks pour les principales cultures

Code
# G4 : Comparaison dégâts champs vs stocks pour les 5 cultures principales
top5_cultures <- res_cca %>%
  filter(!is.na(cc1a0) & cc1a0 != 0) %>%
  count(cc1a0, sort = TRUE) %>%
  slice_head(n = 5) %>%
  pull(cc1a0)

# Calculer le % de ménages avec dégâts (niveau >= 2) sur champs et stocks
champs_vs_stocks <- res_cca %>%
  inner_join(res_deb, by = "j5") %>%
  filter(cc1a0 %in% top5_cultures) %>%
  mutate(
    Culture = iconv(
      culture_labels[as.character(cc1a0)],
      from = "latin1", to = "UTF-8"
    )
  ) %>%
  rowwise() %>%
  mutate(
    any_champs = any(c_across(starts_with("cc1a5_")) >= 2, na.rm = TRUE),
    any_stocks = any(c_across(starts_with("cc1a6_")) >= 2, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  group_by(Observatory, Culture) %>%
  summarise(
    n = n(),
    pct_champs = round(sum(any_champs) / n() * 100, 1),
    pct_stocks = round(sum(any_stocks) / n() * 100, 1),
    .groups = "drop"
  )

champs_vs_stocks_plot <- champs_vs_stocks %>%
  pivot_longer(
    cols = c(pct_champs, pct_stocks),
    names_to = "Type",
    values_to = "pct"
  ) %>%
  mutate(Type = if_else(Type == "pct_champs", "Champs", "Stocks"))

champs_vs_stocks_plot |>
  expand_sites_for_profile() |>
  ror_bar_grouped(
    x = Culture, fill = Type,
    y_label = "% des ménages",
    direction = "vertical", x_angle = 45,
    palette = c("Champs" = "#1f77b4", "Stocks" = "#ff7f0e")
  )

📥 Télécharger par hameau et par observatoire

Les dégâts sur les champs (cultures en cours) sont systématiquement plus fréquents que les pertes de stocks. Toutefois, les pertes de stocks, même si elles concernent moins de ménages, ont un impact direct sur les réserves alimentaires disponibles.

8.5 Évolution de la prévalence des catastrophes (2003–2025)

Le module « catastrophes » (res_cc) est disponible depuis 2003. On retrace ici la proportion de ménages ayant déclaré au moins un aléa climatique ou biologique au cours de la campagne.

Code
cata_trends |>
  make_trend_plot(y_var = pct_cata, y_label = "% de ménages touchés", gap_year = 2015)

Évolution du pourcentage de ménages ayant subi au moins une catastrophe (2003–2025)

L’évolution de la prévalence des catastrophes sur la période 2003–2025 met en évidence des fluctuations interannuelles importantes, avec des pics correspondant aux passages cycloniques majeurs et aux épisodes de sécheresse prolongée. La tendance de long terme, difficile à isoler des aléas ponctuels, mérite d’être mise en regard de l’évolution des pratiques d’adaptation décrites dans les chapitres précédents.