7  Rapport des ménages ruraux avec l’environnement

Les deux observatoires sont situés à proximité d’aires protégées majeures : Pour Alaotra la Nouvelle Aire Protégée du lac Alaotra et le Corridor Ankeniheny Zahamena et pour Marovoay le Parc National d’Ankarafantsika. Ce chapitre analyse les représentations, les usages, les pratiques (notamment le feu) et les opinions des ménages concernant la protection de l’environnement.

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.

7.1 Représentation de la zone protégée par les ménages

7.1.1 Caractérisation de la zone : disponibilité des ressources

Les ménages ont été interrogés sur la disponibilité de dix catégories de ressources naturelles dans la zone protégée à proximité de leur village. La Figure 7.1 résume les réponses, distinguant les ressources jugées abondantes, en quantité normale ou rares.

Code
res_labels <- tribble(
  ~rm2_lig, ~Ressource,
  1,  "Animaux (sauvages)",
  2,  "Plantes (comestibles)",
  3,  "Plantes (médicinales)",
  4,  "Forêt (surface)",
  5,  "Bois",
  6,  "Eau",
  7,  "Terre de culture",
  8,  "Terre de pâturage",
  9,  "Autre",
  10, "Ensemble (global)"
)

dispo <- res_ap_def |>
  filter(rm2_lig %in% 1:10) |>
  left_join(res_labels, by = "rm2_lig") |>
  mutate(
    Disponibilité = case_when(
      rm2_a == 1 ~ "Abondant",
      rm2_a == 2 ~ "Normal",
      rm2_a == 3 ~ "Peu ou pas"
    ),
    Disponibilité = factor(Disponibilité, levels = c("Abondant", "Normal", "Peu ou pas"))
  ) |>
  filter(!is.na(Disponibilité)) |>
  count(Observatory, Ressource, Disponibilité) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = c(Observatory, Ressource))

dispo |>
  ror_bar_stacked(
    x = Ressource, y = pct, fill = Disponibilité,
    direction = "horizontal",
    palette = c("Abondant" = "#2ca02c", "Normal" = "#ffbf00", "Peu ou pas" = "#d62728")
  )
Figure 7.1: Disponibilité perçue des ressources naturelles dans la zone protégée, par observatoire
📥 Télécharger par hameau et par observatoire

7.1.2 Évolution perçue des ressources

Les ménages estiment l’évolution de ces ressources sur les trois et cinq dernières années. La Figure 7.2 présente la tendance à 3 ans.

Code
evol <- res_ap_def |>
  filter(rm2_lig %in% 1:10) |>
  left_join(res_labels, by = "rm2_lig") |>
  mutate(
    Évolution = case_when(
      rm2_b == 1 ~ "En augmentation",
      rm2_b == 2 ~ "Stable",
      rm2_b == 3 ~ "En diminution"
    ),
    Évolution = factor(Évolution, levels = c("En augmentation", "Stable", "En diminution"))
  ) |>
  filter(!is.na(Évolution)) |>
  count(Observatory, Ressource, Évolution) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = c(Observatory, Ressource))

evol |>
  ror_bar_stacked(
    x = Ressource, y = pct, fill = Évolution,
    direction = "horizontal",
    palette = c("En augmentation" = "#2ca02c", "Stable" = "#ffbf00", "En diminution" = "#d62728")
  )
Figure 7.2: Évolution perçue des ressources naturelles au cours des 3 dernières années
📥 Télécharger par hameau et par observatoire

7.1.3 Appartenance perçue de la zone

La question RM3 demande à qui appartient la zone protégée (réponses multiples). La Figure 7.3 montre les réponses par observatoire.

Code
rm3_items <- tribble(
  ~var,    ~label,
  "rm3_1", "État (Fanjakana)",
  "rm3_2", "Riverains",
  "rm3_3", "Riverains non migrants",
  "rm3_4", "Étrangers",
  "rm3_5", "Gestionnaire",
  "rm3_6", "Esprits / ancêtres"
)

appart <- rm3_items |>
  pmap_dfr(\(var, label) {
    pct_oui(res_op_env, var, label)
  }) |>
  pivot_longer(any_of(c("Alaotra", "Marovoay")), names_to = "Observatory", values_to = "pct")
Code
appart |>
  make_bar_obs(x = Item, y = pct, y_label = "% de ménages")
Figure 7.3: À qui appartient la zone protégée ? (% de Oui, réponses multiples)
📥 Télécharger par hameau et par observatoire

7.1.4 Menaces perçues et responsables

Les ménages ont été interrogés sur les menaces qu’ils perçoivent vis-à-vis de l’environnement local et sur les responsables qu’ils identifient. Ces perceptions reflètent la conscience environnementale des populations et orientent les stratégies de sensibilisation.

Code
menace_global <- pct_oui(res_op_env, "rm4", "Considèrent que l'environnement est menacé")

# Filtrer ceux qui considèrent menacé (rm4 == 1)
op_menace <- res_op_env |> filter(rm4 == 1)

menace_items <- tribble(
  ~var,      ~label,
  "rm4a_e",  "Feux",
  "rm4a_a",  "Défrichage",
  "rm4a_c",  "Prélèvement (faune)",
  "rm4a_d",  "Prélèvement (flore)",
  "rm4a_h",  "Prospection minière",
  "rm4a_g",  "Nomadisme (passage non-résidents)",
  "rm4a_b",  "Zébu / pâturage",
  "rm4a_f",  "Tourisme"
)

resp_items <- tribble(
  ~var,      ~label,
  "rm4b_a",  "L'ensemble des riverains",
  "rm4b_b",  "Les riverains migrants",
  "rm4b_c",  "L'État (Fanjakana)",
  "rm4b_h",  "Les braconniers",
  "rm4b_e",  "Le gestionnaire",
  "rm4b_i",  "Les nomades ou semi-nomades",
  "rm4b_d",  "Les ONG ou entreprises",
  "rm4b_g",  "Les chercheurs",
  "rm4b_f",  "Les touristes"
)

menaces <- menace_items |>
  pmap_dfr(\(var, label) pct_oui(op_menace, var, label))
resps <- resp_items |>
  pmap_dfr(\(var, label) pct_oui(op_menace, var, label))

bind_rows(
  menace_global |> mutate(Section = "Perception globale"),
  menaces |> mutate(Section = "Principales menaces (parmi ceux qui déclarent menacé)"),
  resps |> mutate(Section = "Principaux responsables")
) |>
  select(Section, Item, any_of(c("Alaotra", "Marovoay"))) |>
  gt(groupname_col = "Section") |>
  safe_cols_label(Item = "", Alaotra = "Alaotra", Marovoay = "Marovoay") |>
  fmt_number(columns = any_of(c("Alaotra", "Marovoay")), decimals = 0, pattern = "{x} %") |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#B0E0E6")),
    locations = cells_row_groups()
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 7.1: Menaces perçues sur l’environnement et responsables identifiés (% de Oui)
Alaotra Marovoay
Perception globale
Considèrent que l'environnement est menacé 82 % 79 %
Principales menaces (parmi ceux qui déclarent menacé)
Feux 84 % 95 %
Défrichage 56 % 52 %
Prélèvement (faune) 40 % 20 %
Prélèvement (flore) 40 % 21 %
Prospection minière 29 % 6 %
Nomadisme (passage non-résidents) 16 % 16 %
Zébu / pâturage 20 % 10 %
Tourisme 2 % 3 %
Principaux responsables
L'ensemble des riverains 87 % 70 %
Les riverains migrants 47 % 37 %
L'État (Fanjakana) 10 % 8 %
Les braconniers 30 % 10 %
Le gestionnaire 9 % 3 %
Les nomades ou semi-nomades 22 % 17 %
Les ONG ou entreprises 3 % 4 %
Les chercheurs 0 % 2 %
Les touristes 1 % 2 %
Source : Enquête auprès des OR 2025
Code
menaces_long <- bind_rows(
  menaces |> mutate(Section = "Menaces"),
  resps |> mutate(Section = "Responsables")
) |>
  pivot_longer(cols = any_of(c("Alaotra", "Marovoay")),
               names_to = "Observatory", values_to = "pct") |>
  filter(!is.na(pct))

menaces_long |>
  mutate(Item = reorder(Item, pct)) |>
  ror_bar_grouped(
    x = Item, fill = Observatory,
    y_label = "%", direction = "horizontal", facet = FALSE
  ) +
  facet_wrap(~Section, scales = "free_y", ncol = 1)

Menaces perçues et responsables identifiés (% de Oui)
📥 Télécharger par hameau et par observatoire
📥 Télécharger par hameau et par observatoire

7.1.5 Ce que représente la zone pour les ménages

La question RM5 interroge les ménages sur ce que la zone protégée représente pour eux (réponses multiples).

Code
rm5_items <- tribble(
  ~var,    ~label,
  "rm5_a", "Source d'alimentation",
  "rm5_b", "Activités agricoles",
  "rm5_c", "Élevage",
  "rm5_d", "Source de bois",
  "rm5_e", "Source d'eau",
  "rm5_f", "Plantes médicinales",
  "rm5_g", "Source de revenus",
  "rm5_h", "Lieu touristique",
  "rm5_i", "Espace sauvage",
  "rm5_j", "Lieu sacré",
  "rm5_k", "Lieu interdit",
  "rm5_l", "Loisir / détente / beauté"
)

repr <- rm5_items |>
  pmap_dfr(\(var, label) pct_oui(res_op_env, var, label)) |>
  pivot_longer(any_of(c("Alaotra", "Marovoay")), names_to = "Observatory", values_to = "pct")
Code
repr |>
  make_bar_obs(x = Item, y = pct, y_label = "% de ménages")
Figure 7.4: Que représente la zone protégée pour les ménages ? (% de Oui)
📥 Télécharger par hameau et par observatoire

7.2 Exploitation forestière et usage de l’Aire protégée

7.2.1 Collecte de bois et charbon

Le fichier res_ef recense les produits forestiers collectés par les ménages : charbon (saribao), bois de chauffe (kitay) et bois d’oeuvre. La Figure 7.5 présente le pourcentage de ménages concernés par chaque produit et la Figure 7.6 distingue l’origine (dans ou hors aire protégée).

Code
ef_labels <- tribble(
  ~ef_lig, ~Produit,
  1, "Charbon (saribao)",
  2, "Bois de chauffe (kitay)",
  3, "Bois d'œuvre"
)

ef_men <- res_ef |>
  filter(ef_lig %in% 1:3) |>
  left_join(ef_labels, by = "ef_lig") |>
  distinct(j5, Observatory, Produit)

ef_pct <- ef_men |>
  count(Observatory, Produit) |>
  left_join(res_deb |> count(Observatory, name = "n_tot"), by = "Observatory") |>
  mutate(pct = round(n / n_tot * 100, 1))

ef_pct |>
  ror_bar_v(x = Produit, y = pct, y_label = "% des ménages", show_pct = TRUE)
Figure 7.5: Pourcentage de ménages pratiquant la collecte de produits forestiers, par observatoire
📥 Télécharger par hameau et par observatoire
Code
ef_orig <- res_ef |>
  filter(ef_lig %in% 1:3, efb %in% c(1, 2)) |>
  left_join(ef_labels, by = "ef_lig") |>
  mutate(
    Origine = case_when(
      efb == 1 ~ "Dans l'AP",
      efb == 2 ~ "Hors AP"
    )
  ) |>
  count(Observatory, Produit, Origine) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = c(Observatory, Produit))

ef_orig |>
  ror_bar_stacked(
    x = Produit, y = pct, fill = Origine,
    proportion = FALSE, direction = "vertical",
    palette = c("Dans l'AP" = "#d62728", "Hors AP" = "#2ca02c")
  )
Figure 7.6: Origine des produits forestiers collectés (dans ou hors Aire Protégée)
📥 Télécharger par hameau et par observatoire

7.2.2 Saisonnalité de la collecte forestière

La collecte de produits forestiers suit un calendrier saisonnier lié aux besoins énergétiques des ménages et aux contraintes climatiques. La période de préparation de la campagne agricole et la saison sèche correspondent généralement aux pics d’activité.

Code
mois_cols <- paste0("efe_", sprintf("%02d", 1:12))

ef_saison <- res_ef |>
  filter(ef_lig %in% 1:3) |>
  left_join(ef_labels, by = "ef_lig") |>
  pivot_longer(cols = all_of(mois_cols), names_to = "mois_var", values_to = "actif") |>
  mutate(
    mois_num = as.integer(str_extract(mois_var, "\\d+$")),
    Mois = factor(mois_labs[mois_num], levels = mois_labs),
    actif = if_else(actif == 1, 1, 0, missing = 0)
  ) |>
  summarise(n_actif = sum(actif), n_total = n(), .by = c(Observatory, Produit, Mois)) |>
  mutate(pct = round(n_actif / n_total * 100, 1))

ggplot(ef_saison, aes(x = Mois, y = pct, color = Produit, group = Produit)) +
  geom_line(linewidth = 0.8) +
  geom_point(size = 1.5) +
  facet_wrap(~Observatory) +
  labs(x = NULL, y = "% actifs", color = "Produit") +
  theme_ror() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Figure 7.7: Saisonnalité de la collecte de produits forestiers (% de ménages actifs par mois)
📥 Télécharger par hameau et par observatoire

7.2.3 Commercialisation des produits forestiers

Une partie des produits forestiers collectés (charbon, bois de chauffe, bois d’œuvre) fait l’objet d’une commercialisation. La proportion de ménages qui vendent et les montants moyens de vente donnent une indication de l’importance économique de cette activité.

Code
ef_vente <- res_ef |>
  filter(ef_lig %in% 1:3) |>
  left_join(ef_labels, by = "ef_lig") |>
  mutate(vend = if_else(efc > 0 & !is.na(efc), TRUE, FALSE)) |>
  summarise(
    pct_vendeurs = round(sum(vend) / n() * 100, 0),
    pct_vente_moyen = round(mean(efc[vend], na.rm = TRUE), 0),
    montant_moyen = round(mean(efd[vend], na.rm = TRUE), 0),
    .by = c(Observatory, Produit)
  )

ef_vente |>
  obs_gt() |>
  cols_label(
    Produit = "Produit",
    pct_vendeurs = "% de vendeurs",
    pct_vente_moyen = "% vendu (moyen)",
    montant_moyen = "Montant moyen (Ar)"
  ) |>
  fmt_number(columns = montant_moyen, decimals = 0, sep_mark = " ") |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#B0E0E6")),
    locations = cells_row_groups()
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 7.2: Part des ménages vendant les produits forestiers et montant moyen de vente (Ar)
Produit % de vendeurs % vendu (moyen) Montant moyen (Ar)
Alaotra
Charbon (saribao) 5 93 596 720
Bois de chauffe (kitay) 17 60 323 667
Bois d'œuvre 3 89 2 182 571
Marovoay
Charbon (saribao) 11 73 309 638
Bois de chauffe (kitay) 4 59 292 857
Bois d'œuvre 2 99 16 180
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire

7.2.4 Fréquentation de l’Aire protégée

La variable UM1 indique si le ménage se rend dans la zone protégée. Le Table 7.3 résume la fréquentation et ses caractéristiques.

Code
freq_items <- bind_rows(
  pct_oui(res_um1, "um1", "Se rend dans l'Aire protégée"),
  # Parmi ceux qui y vont
  pct_oui(res_um1 |> filter(um1 == 1), "um1c", "Considère vital / nécessaire d'y aller")
)

# Connaissance du lieu (um1a) — distribution parmi usagers
conn_all <- res_um1 |>
  filter(um1 == 1, !is.na(um1a)) |>
  mutate(Conn = case_when(
    um1a == 1 ~ "Très peu",
    um1a == 2 ~ "Plus ou moins",
    um1a == 3 ~ "Très bien"
  ))

conn_by_obs <- conn_all |>
  count(Observatory, Conn) |>
  mutate(pct = round(n / sum(n) * 100, 0), .by = Observatory) |>
  select(-n) |>
  pivot_wider(names_from = Observatory, values_from = pct, values_fill = 0)

conn_tbl <- conn_by_obs |>
  rename(Item = Conn) |>
  mutate(Item = paste0("  - ", Item))

bind_rows(
  freq_items,
  tibble(Item = "Connaissance du lieu (parmi usagers) :") |>
    bind_cols(setNames(as.list(rep(NA_real_, length(intersect(c("Alaotra", "Marovoay"), names(freq_items))))),
                       intersect(c("Alaotra", "Marovoay"), names(freq_items)))),
  conn_tbl
) |>
  gt() |>
  safe_cols_label(Item = "", Alaotra = "Alaotra", Marovoay = "Marovoay") |>
  fmt_number(columns = any_of(c("Alaotra", "Marovoay")), decimals = 0, pattern = "{x} %") |>
  sub_missing(missing_text = "") |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 7.3: Fréquentation et connaissance de l’Aire protégée
Alaotra Marovoay
Se rend dans l'Aire protégée 44 % 27 %
Considère vital / nécessaire d'y aller 31 % 21 %
Connaissance du lieu (parmi usagers) :

- Plus ou moins 45 % 33 %
- Très bien 11 % 14 %
- Très peu 44 % 53 %
Source : Enquête auprès des OR 2025
📥 Télécharger par hameau et par observatoire

7.2.5 Raisons de non-fréquentation

Pour les ménages qui ne se rendent pas dans l’AP, les raisons invoquées sont les suivantes.

Code
um1_non <- res_um1 |> filter(um1 == 2)

non_items <- tribble(
  ~var,      ~label,
  "um1d_a",  "Interdit par la loi",
  "um1d_b",  "Fady (interdit coutumier)",
  "um1d_c",  "Rien d'intéressant",
  "um1d_d",  "Dangereux",
  "um1d_e",  "Autre raison"
)

non_freq <- non_items |>
  pmap_dfr(\(var, label) pct_oui(um1_non, var, label)) |>
  pivot_longer(any_of(c("Alaotra", "Marovoay")), names_to = "Observatory", values_to = "pct")
Code
non_freq |>
  make_bar_obs(x = Item, y = pct, y_label = "% de ménages")
Figure 7.8: Raisons de ne pas se rendre dans l’Aire protégée (% de Oui parmi ceux qui n’y vont pas)
📥 Télécharger par hameau et par observatoire

7.2.6 Usages de l’Aire protégée

Parmi les ménages qui se rendent dans l’AP, la Figure 7.9 détaille les raisons et la Figure 7.10 la fréquence des déplacements.

Code
um2_labels <- tribble(
  ~um2_lig, ~Raison,
  1,  "Cueillette plantes (comestibles)",
  2,  "Cueillette plantes (médicinales)",
  3,  "Cultiver",
  4,  "Chasser / pêcher",
  5,  "Faire paître (herbe)",
  6,  "Faire passer les zébus",
  7,  "Couper du bois",
  8,  "Produits pour artisanat",
  9,  "Rituel / cérémonie / funérailles",
  10, "Accompagner touristes / chercheurs",
  11, "Promenade / loisir",
  12, "Autre"
)

usages <- res_um2 |>
  filter(um2_lig %in% 1:12, um2_a == 1) |>
  left_join(um2_labels, by = "um2_lig") |>
  count(Observatory, Raison) |>
  left_join(
    res_um1 |> filter(um1 == 1) |> count(Observatory, name = "n_usagers"),
    by = "Observatory"
  ) |>
  mutate(pct = round(n / n_usagers * 100, 0))
Code
usages |>
  make_bar_obs(x = Raison, y = pct, y_label = "% des usagers de l'AP")
Figure 7.9: Raisons de se rendre dans l’Aire protégée (% de Oui parmi les usagers)
📥 Télécharger par hameau et par observatoire
Code
freq_labels <- c(
  "1" = "Quelques fois par an",
  "2" = "Quelques fois par mois",
  "3" = "Une fois par semaine",
  "4" = "Plusieurs fois par semaine"
)

freq_usage <- res_um2 |>
  filter(um2_lig %in% 1:12, um2_a == 1, um2_b %in% 1:4) |>
  left_join(um2_labels, by = "um2_lig") |>
  mutate(Fréquence = factor(freq_labels[as.character(um2_b)],
                            levels = rev(freq_labels)))

freq_pct <- freq_usage |>
  count(Observatory, Raison, Fréquence) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = c(Observatory, Raison))

freq_pct |>
  mutate(Raison = fct_reorder(Raison, n, .fun = sum)) |>
  ror_bar_stacked(
    x = Raison, y = pct, fill = Fréquence,
    direction = "horizontal"
  ) +
  scale_fill_brewer(palette = "YlOrRd", direction = -1)
Figure 7.10: Fréquence des déplacements dans l’AP selon l’usage, par observatoire
📥 Télécharger par hameau et par observatoire

7.2.7 Saisonnalité de la fréquentation de l’AP

La fréquentation de l’Aire protégée n’est pas uniforme au cours de l’année. Les variations saisonnières reflètent les besoins en ressources naturelles, le calendrier agricole et l’accessibilité physique de la zone.

Code
um2_mois <- paste0("um2_d_", sprintf("%02d", 1:12))

top_raisons <- res_um2 |>
  filter(um2_lig %in% 1:12, um2_a == 1) |>
  count(um2_lig, sort = TRUE) |>
  head(5) |>
  pull(um2_lig)

ap_saison <- res_um2 |>
  filter(um2_lig %in% top_raisons, um2_a == 1) |>
  left_join(um2_labels, by = "um2_lig") |>
  pivot_longer(cols = all_of(um2_mois), names_to = "mois_var", values_to = "actif") |>
  mutate(
    mois_num = as.integer(str_extract(mois_var, "\\d+$")),
    Mois = factor(mois_labs[mois_num], levels = mois_labs),
    actif = if_else(actif == 1, 1, 0, missing = 0)
  ) |>
  summarise(n_actif = sum(actif), n_total = n(), .by = c(Observatory, Raison, Mois)) |>
  mutate(pct = round(n_actif / n_total * 100, 1))

ggplot(ap_saison, aes(x = Mois, y = pct, color = Raison, group = Raison)) +
  geom_line(linewidth = 0.8) +
  geom_point(size = 1.5) +
  facet_wrap(~Observatory) +
  labs(x = NULL, y = "% actifs", color = "Raison") +
  theme_ror() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Figure 7.11: Saisonnalité des usages de l’AP (% d’usagers actifs par mois, principales raisons), par observatoire
📥 Télécharger par hameau et par observatoire

7.3 Feux de brousse

7.3.1 Opinions sur les raisons des feux

Les ménages ont été interrogés sur les raisons pour lesquelles les gens font des feux dans la région (question S16, réponses multiples).

Code
feu_items <- tribble(
  ~var,      ~label,
  "s16_01",  "Augmenter surfaces cultivées",
  "s16_02",  "Augmenter surfaces pâturages",
  "s16_03",  "Protéger",
  "s16_04",  "Nettoyer",
  "s16_05",  "Chasser",
  "s16_06",  "Marquer son territoire",
  "s16_07",  "Pratique traditionnelle / rituel",
  "s16_08",  "Mécontentement (autorités locales)",
  "s16_09",  "Mécontentement (autorités nationales)",
  "s16_10",  "Vengeance"
)

feu_raisons <- feu_items |>
  pmap_dfr(\(var, label) pct_oui(res_feubrousse, var, label)) |>
  pivot_longer(any_of(c("Alaotra", "Marovoay")), names_to = "Observatory", values_to = "pct")
Code
feu_raisons |>
  make_bar_obs(x = Item, y = pct, y_label = "% de ménages")
Figure 7.12: Raisons perçues de faire des feux (% de Oui)
📥 Télécharger par hameau et par observatoire

7.3.2 Pratique du feu

Au-delà des opinions, une partie des ménages déclarent avoir eux-mêmes pratiqué le brûlis. Le taux de pratique et les motivations avancées permettent de mesurer l’écart entre les discours et les comportements effectifs.

Code
feu_tbl <- bind_rows(
  pct_oui(res_feubrousse, "s17",   "Faire des feux est une pratique normale"),
  pct_oui(res_feubrousse, "s17_a", "Faire des feux est vital / nécessaire"),
  pct_oui(res_feubrousse, "s18",   "A déjà fait des feux"),
  pct_oui(res_feubrousse, "s18_b", "Feux au cours des 12 derniers mois")
)

# Localisation des feux (s18_c) parmi ceux qui ont fait feu récemment
loc_feux <- res_feubrousse |>
  filter(s18_b == 1, s18_c %in% 1:3) |>
  mutate(
    Lieu = case_when(
      s18_c == 1 ~ "Près du village",
      s18_c == 2 ~ "Loin (hors AP)",
      s18_c == 3 ~ "Dans l'AP"
    )
  ) |>
  count(Observatory, Lieu) |>
  mutate(pct = round(n / sum(n) * 100, 0), .by = Observatory) |>
  select(-n) |>
  pivot_wider(names_from = Observatory, values_from = pct, values_fill = 0)

loc_tbl <- loc_feux |>
  rename(Item = Lieu) |>
  mutate(Item = paste0("  - ", Item))

# Maîtrise et échappement
maitr <- pct_oui(res_feubrousse |> filter(s18 == 1), "s19", "Cherche à maîtriser le feu")
echap <- pct_oui(res_feubrousse |> filter(s18 == 1), "s20", "Un feu lui a déjà échappé")

bind_rows(
  feu_tbl,
  tibble(Item = "Si feux dans l'année, localisation :") |>
    bind_cols(setNames(as.list(rep(NA_real_, length(intersect(c("Alaotra", "Marovoay"), names(feu_tbl))))),
                       intersect(c("Alaotra", "Marovoay"), names(feu_tbl)))),
  loc_tbl,
  maitr,
  echap
) |>
  gt() |>
  safe_cols_label(Item = "", Alaotra = "Alaotra", Marovoay = "Marovoay") |>
  fmt_number(columns = any_of(c("Alaotra", "Marovoay")), decimals = 0, pattern = "{x} %") |>
  sub_missing(missing_text = "") |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 7.4: Pratique et perception des feux par observatoire
Alaotra Marovoay
Faire des feux est une pratique normale 67 % 77 %
Faire des feux est vital / nécessaire 8 % 62 %
A déjà fait des feux 11 % 54 %
Feux au cours des 12 derniers mois 10 % 72 %
Si feux dans l'année, localisation :

- Loin (hors AP) 80 % 52 %
- Près du village 20 % 48 %
Cherche à maîtriser le feu 82 % 81 %
Un feu lui a déjà échappé 33 % 5 %
Source : Enquête auprès des OR 2025
Code
feu_long <- feu_tbl |>
  bind_rows(maitr, echap) |>
  pivot_longer(cols = any_of(c("Alaotra", "Marovoay")),
               names_to = "Observatory", values_to = "pct") |>
  filter(!is.na(pct))

feu_long |>
  mutate(Item = reorder(Item, pct)) |>
  ror_bar_grouped(
    x = Item, fill = Observatory,
    y_label = "%", direction = "horizontal", facet = FALSE
  )

Pratique et perception des feux (% de Oui)
📥 Télécharger par hameau et par observatoire
📥 Télécharger par hameau et par observatoire

7.3.3 Saisonnalité des feux

Les feux de brousse suivent un calendrier saisonnier bien défini, lié à la préparation des terres de culture et aux conditions de sécheresse favorisant la propagation.

Code
feu_mois_cols <- paste0("s18_a_", sprintf("%02d", 1:12))

feu_saison <- res_feubrousse |>
  filter(s18 == 1) |>
  pivot_longer(cols = any_of(feu_mois_cols), names_to = "mois_var", values_to = "actif") |>
  mutate(
    mois_num = as.integer(str_extract(mois_var, "\\d+$")),
    Mois = factor(mois_labs[mois_num], levels = mois_labs),
    actif = if_else(actif == 1, 1, 0, missing = 0)
  ) |>
  summarise(n_actif = sum(actif), n_total = n(), .by = c(Observatory, Mois)) |>
  mutate(pct = round(n_actif / n_total * 100, 1))

ggplot(feu_saison, aes(x = Mois, y = pct, color = Observatory, group = Observatory)) +
  geom_line(linewidth = 0.8) +
  geom_point(size = 2) +
  labs(x = NULL, y = "% des ménages ayant fait du feu", color = "Observatoire") +
  theme_ror() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Figure 7.13: Saisonnalité des feux de brousse pratiqués (% de ménages actifs par mois, parmi ceux qui ont fait du feu)
📥 Télécharger par hameau et par observatoire

7.3.4 Avis sur les feux

Les ménages expriment une perception contrastée de l’évolution des feux de brousse au cours des trois dernières années. Leur avis sur le caractère problématique des feux et sur la nécessité d’une réglementation complète le tableau de la gouvernance locale du feu.

Code
evol_feux <- res_feubrousse |>
  filter(s21 %in% 1:3) |>
  mutate(
    Évolution = case_when(
      s21 == 1 ~ "En hausse",
      s21 == 2 ~ "Stable",
      s21 == 3 ~ "En diminution"
    ),
    Évolution = factor(Évolution, levels = c("En hausse", "Stable", "En diminution"))
  ) |>
  count(Observatory, Évolution) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory)

evol_feux |>
  ror_bar_v(x = Évolution, y = pct, y_label = "% de ménages", show_pct = TRUE)
Figure 7.14: Évolution perçue des feux depuis 3 ans, par observatoire
📥 Télécharger par hameau et par observatoire
Code
prob_feux <- res_feubrousse |>
  filter(s22 %in% 1:4) |>
  mutate(
    Importance = case_when(
      s22 == 1 ~ "Très important",
      s22 == 2 ~ "Important",
      s22 == 3 ~ "Plutôt pas important",
      s22 == 4 ~ "Pas du tout"
    ),
    Importance = factor(Importance, levels = c("Très important", "Important",
                                                "Plutôt pas important", "Pas du tout"))
  ) |>
  count(Observatory, Importance) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory)

prob_feux |>
  ror_bar_v(x = Importance, y = pct, y_label = "% de ménages", show_pct = TRUE, x_angle = 15)
Figure 7.15: Les feux sont-ils un problème dans la région ? (par observatoire)
📥 Télécharger par hameau et par observatoire
Code
regl_feux <- res_feubrousse |>
  filter(s23 %in% 1:3) |>
  mutate(
    Avis = case_when(
      s23 == 1 ~ "Interdite",
      s23 == 2 ~ "Limitée",
      s23 == 3 ~ "Libre"
    ),
    Avis = factor(Avis, levels = c("Interdite", "Limitée", "Libre"))
  ) |>
  count(Observatory, Avis) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory)

regl_feux |>
  ror_bar_v(x = Avis, y = pct, y_label = "% de ménages", show_pct = TRUE)
Figure 7.16: La pratique du feu devrait être… (par observatoire)
📥 Télécharger par hameau et par observatoire

7.4 Protection de l’Aire protégée

7.4.1 Connaissance de l’Aire protégée

Le niveau de connaissance de l’Aire protégée et l’adhésion des ménages au principe de protection constituent des préalables à toute stratégie de conservation participative.

Code
ap_items <- bind_rows(
  pct_oui(res_ap, "ap1", "A entendu parler de l'AP"),
  pct_oui(res_ap, "ap4", "Nécessaire de protéger l'environnement"),
  pct_oui(res_ap, "ap5", "Nécessaire de protéger cette AP"),
  pct_oui(res_ap, "ap6", "Perte de biodiversité à Madagascar"),
  pct_oui(res_ap, "ap7", "Les AP ont des résultats positifs")
)

ap_items |>
  gt() |>
  safe_cols_label(Item = "", Alaotra = "Alaotra", Marovoay = "Marovoay") |>
  fmt_number(columns = any_of(c("Alaotra", "Marovoay")), decimals = 0, pattern = "{x} %") |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 7.5: Connaissance de l’Aire protégée et demande de protection
Alaotra Marovoay
A entendu parler de l'AP 80 % 82 %
Nécessaire de protéger l'environnement 100 % 99 %
Nécessaire de protéger cette AP 100 % 99 %
Perte de biodiversité à Madagascar 98 % 94 %
Les AP ont des résultats positifs 98 % 98 %
Source : Enquête auprès des OR 2025
Code
ap_long <- ap_items |>
  pivot_longer(cols = any_of(c("Alaotra", "Marovoay")),
               names_to = "Observatory", values_to = "pct") |>
  filter(!is.na(pct))

ap_long |>
  mutate(Item = reorder(Item, pct)) |>
  ror_bar_grouped(
    x = Item, fill = Observatory,
    y_label = "%", direction = "horizontal", facet = FALSE
  )

Connaissance de l’Aire protégée et demande de protection (% de Oui)
📥 Télécharger par hameau et par observatoire
📥 Télécharger par hameau et par observatoire

7.4.2 Impact perçu des actions de l’AP

Les ménages qui ont entendu parler de l’AP jugent l’impact de ses actions sur trois dimensions : économique, sociale et environnementale.

Code
ap3_labels <- c(
  "1" = "Très positif",
  "2" = "Plutôt positif",
  "3" = "Plutôt négatif",
  "4" = "Très négatif",
  "9" = "Ne connaît pas"
)

ap3_data <- res_ap |>
  filter(ap1 == 1) |>
  select(j5, Observatory, ap3_a, ap3_b, ap3_c) |>
  pivot_longer(c(ap3_a, ap3_b, ap3_c), names_to = "Dimension", values_to = "Valeur") |>
  filter(!is.na(Valeur)) |>
  mutate(
    Dimension = case_when(
      Dimension == "ap3_a" ~ "Économique",
      Dimension == "ap3_b" ~ "Sociale",
      Dimension == "ap3_c" ~ "Environnementale"
    ),
    Jugement = factor(ap3_labels[as.character(Valeur)], levels = ap3_labels)
  ) |>
  count(Observatory, Dimension, Jugement) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = c(Observatory, Dimension))

ap3_data |>
  ror_bar_stacked(
    x = Dimension, y = pct, fill = Jugement,
    direction = "horizontal",
    palette = c(
      "Très positif" = "#2ca02c", "Plutôt positif" = "#98df8a",
      "Plutôt négatif" = "#ff9896", "Très négatif" = "#d62728",
      "Ne connaît pas" = "#cccccc"
    )
  )
Figure 7.17: Jugement des actions de l’AP sur la situation économique, sociale et environnementale
📥 Télécharger par hameau et par observatoire

7.4.3 Gestionnaire souhaité

Parmi les ménages favorables à la protection, la question du gestionnaire idéal révèle les préférences des communautés en matière de gouvernance environnementale : gestion communautaire, étatique ou partenariale.

Code
gest_labels <- c(
  "1" = "Communautés locales",
  "2" = "Riverains tompontany",
  "3" = "État (Fanjakana)",
  "4" = "ONG malgache",
  "5" = "ONG étrangère",
  "6" = "Partenariat mixte",
  "7" = "COBA"
)

gest <- res_ap |>
  filter(ap5 == 1, ap5a %in% 1:7) |>
  mutate(Gestionnaire = factor(gest_labels[as.character(ap5a)], levels = gest_labels)) |>
  count(Observatory, Gestionnaire) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory)
Code
gest |>
  make_bar_obs(x = Gestionnaire, y = pct, y_label = "% de ménages")
Figure 7.18: Qui devrait gérer l’AP ? (parmi ceux favorables à la protection)
📥 Télécharger par hameau et par observatoire

7.4.4 Mesures de protection souhaitées

Les mesures de protection souhaitées par les ménages vont de l’interdiction stricte des accès à des approches plus souples intégrant le développement d’activités génératrices de revenus (AGR) et la valorisation des savoirs traditionnels.

Code
ap5b_items <- tribble(
  ~var,       ~label,
  "ap5b_g1",  "Interdire tous les feux",
  "ap5b_g2",  "Limiter les feux",
  "ap5b_l",   "Savoirs et pratiques traditionnels",
  "ap5b_k",   "Développer les AGR",
  "ap5b_b",   "Restreindre l'accès des hommes",
  "ap5b_f",   "Limiter prélèvements (chasse, cueillette…)",
  "ap5b_h",   "Restreindre le tourisme",
  "ap5b_j",   "Restreindre les recherches scientifiques",
  "ap5b_d",   "Restreindre l'accès des bêtes (pâturage)",
  "ap5b_e",   "Interdire les prélèvements",
  "ap5b_c",   "Interdire l'accès des bêtes",
  "ap5b_a",   "Interdire l'accès des hommes",
  "ap5b_i",   "Encourager le tourisme"
)

ap_favorable <- res_ap |> filter(ap5 == 1)

mesures <- ap5b_items |>
  pmap_dfr(\(var, label) pct_oui(ap_favorable, var, label)) |>
  pivot_longer(any_of(c("Alaotra", "Marovoay")), names_to = "Observatory", values_to = "pct")
Code
mesures |>
  make_bar_obs(x = Item, y = pct, y_label = "% de ménages")
Figure 7.19: Mesures souhaitées pour protéger l’AP (% de Oui, parmi ceux favorables)
📥 Télécharger par hameau et par observatoire

7.4.5 Pauvreté vs. environnement : quelle priorité ?

Cette question met en tension deux impératifs : la lutte contre la pauvreté et la protection de l’environnement. La répartition des réponses éclaire le positionnement des ménages face à ce dilemme central pour les politiques de développement durable.

Code
ap8_labels <- c(
  "1" = "Priorité pauvreté/développement",
  "2" = "Priorité environnement",
  "3" = "Les deux en même temps",
  "4" = "Uniquement pauvreté",
  "5" = "Uniquement environnement",
  "6" = "Ni l'une ni l'autre"
)

priorite <- res_ap |>
  filter(ap8 %in% 1:6) |>
  mutate(Priorité = factor(ap8_labels[as.character(ap8)], levels = ap8_labels)) |>
  count(Observatory, Priorité) |>
  mutate(pct = round(n / sum(n) * 100, 1), .by = Observatory)
Code
priorite |>
  make_bar_obs(x = Priorité, y = pct, y_label = "% de ménages")
Figure 7.20: Pauvreté vs. protection de l’environnement : quelle priorité ? (par observatoire)
📥 Télécharger par hameau et par observatoire

7.4.6 Connaissance des actions de protection

La Figure 7.21 présente le degré d’information, de consultation et de bénéfice des ménages vis-à-vis des différents types d’actions menées autour de l’AP.

Code
ap2_labels <- tribble(
  ~ap2_lig, ~Action,
  1, "Sensibilisation",
  2, "Élaboration plans",
  3, "Dons / aides",
  4, "Achat de produits",
  5, "Tourisme",
  6, "AGR (élevage…)",
  7, "Reboisement / pépinière",
  8, "Appui technique",
  9, "Autre"
)

ap2_data <- res_ap2 |>
  filter(ap2_lig %in% 1:9) |>
  left_join(ap2_labels, by = "ap2_lig") |>
  summarise(
    `Informé`   = round(sum(ap2_a == 1, na.rm = TRUE) / sum(!is.na(ap2_a)) * 100, 0),
    `Consulté`  = round(sum(ap2_b == 1, na.rm = TRUE) / sum(!is.na(ap2_b)) * 100, 0),
    `Bénéficié` = round(sum(ap2_c == 1, na.rm = TRUE) / sum(!is.na(ap2_c)) * 100, 0),
    .by = c(Observatory, Action)
  ) |>
  pivot_longer(c(`Informé`, `Consulté`, `Bénéficié`), names_to = "Indicateur", values_to = "pct") |>
  mutate(Indicateur = factor(Indicateur, levels = c("Informé", "Consulté", "Bénéficié")))

ap2_data |>
  mutate(Action = fct_reorder(Action, pct, .fun = max)) |>
  ror_bar_grouped(
    x = Action, fill = Indicateur,
    y_label = "% de ménages", direction = "horizontal"
  ) +
  scale_fill_brewer(palette = "Set2")
Figure 7.21: Information, consultation et bénéfice des actions de l’AP (% de Oui), par observatoire
📥 Télécharger par hameau et par observatoire