3  Climat

3.1 Précipitations

Nous utilisons les données CHIRPS de la NASA pour estimer la pluviométrie moyenne sur 3 jours dans la zone protégée de Makay. Les données sources ont une résolution spatiale de 0,05° (environ 5 km). Nous traitons les données à l’aide du package mapme.biodiversity (Görgen and Bhandari 2023).

Code
library(aws.s3)
library(tidyverse) # toolkit for data manipulation
library(geodata) # to get municipalities
library(sf) # to handle spatial data (vectors)
library(terra) # to handle patial data (rasters)
library(mapme.biodiversity) # to compute spatial indicators
library(tmap) # nice maps
library(zoo) # time series
library(units) # ensures units are right
library(future) # to parallelize computations
library(exactextractr) # engine for mapme.biodiversity
library(SPEI) # to compute rainfall  

makay_ap <- st_read("data/Makay_wgs84.geojson", quiet = TRUE) %>% 
  rename(Statut = SOURCETHM) %>% 
  mutate(Statut = recode(Statut, "zone tampon" = "Zone tampon"))

# Fist we dissolve the different areas
makay_union <- makay_ap %>% 
  st_union() %>% 
  st_sf() %>% 
  st_make_valid()

# We group Makay PA zones and communes to have an object with all areas of interest
# We keep only one common field "name"
aoi <- makay_union

# we use parallel computing to reduce processing time
plan(multisession, workers = 8)



aoi_1 <- s3read_using(FUN = read_rds, object = "diffusion/makay/aoi_1.rds",
                      bucket = "fbedecarrats", opts = list("region" = ""))

# We compute 3d average precipitations
precip_3d <- aoi_1 %>%
  unnest(precipitation_chirps) %>%
  group_by(name) %>%
  mutate(rainfall_3d_mean = rollmean(absolute, k = 3, fill = NA))

# We display precipitations for Makay area
precip_3d %>%
  filter(name == "AP Makay : Ensemble") %>%
  ggplot(aes(x = dates, y = rainfall_3d_mean)) +
  geom_line()

Précipitations sur l’AP Makay (source : CHIRPS, moyenne mobile sur 3 jours)

3.2 Cyclones

Nous utilisons les données de suivu du climat IBTrACS pour obtenir l’historique des trajectoires des cyclones et les attributs des cyclones (Knapp et al. 2010). Cette procédure est fortement inspirée du code source de mapme.protectedareas (Schielein 2023).

Code
if (!file.exists("data/ibtracs/IBTrACS.since1980.list.v04r00.lines.shp")) {
  dir.create("data/ibtracs")
  download.file(url = "https://www.ncei.noaa.gov/data/international-best-track-archive-for-climate-stewardship-ibtracs/v04r00/access/shapefile/IBTrACS.since1980.list.v04r00.lines.zip", 
                destfile = "data/ibtracs/ibtracs_lines.zip")
  unzip("data/ibtracs/ibtracs_lines.zip", exdir = "data/ibtracs")
}

mada <- gadm("MDG", level=0, path = "data") %>%
  st_as_sf()

# column description is given here: https://www.ncei.noaa.gov/sites/default/files/2021-07/IBTrACS_v04_column_documentation.pdf
cyclones <- read_sf("data/ibtracs/IBTrACS.since1980.list.v04r00.lines.shp")

# Create a buffer 300km around Madagascar
mada_buff <- st_buffer(mada, 300)

cyclones$wind_combined <- cyclones %>%
  select(contains("WIND")) %>%
  select(-WMO_WIND) %>%
  st_drop_geometry() %>%
  rowMeans(., na.rm = T)

cyclones_mada <- cyclones %>%
  st_intersection(mada_buff) %>%
  select(Season = SEASON, Name = NAME, Winds_in_knots = wind_combined)

tmap_mode("view")
tm_shape(makay_union) + 
  tm_borders(col = "darkgreen") + 
  tm_shape(cyclones_mada) +
  tm_lines(col = "Season", lwd = "Winds_in_knots", scale = 3, palette = "Blues",
           popup.vars = c("Name", "Season", "Winds in knots" = "Winds_in_knots"),
           legend.format = list(big.mark=""), popup.format = list(big.mark=""))

Cyclone trajectories, dates and intensity (source: IBTrACS)

La carte montre que la zone protégée du Makay a été frappée par plusieurs cyclones importants. Notamment Freddy en 2023 et Bastiraï en 2022, tous deux avec des vents d’environ 57 nœuds (1 nœud = 1,825 km/h). Des cyclones moins puissants avaient touché la zone les années précédentes : Chedza en 2014 (environ 42 nœuds) et Elita en 2005 (environ 52 nœuds).

3.3 Sécheresses

Le SPEI (Standardized Precipitation-Evapotranspiration Index) est un indicateur du stress hydrique permettant de caractériser l’occurrence et l’intensité des sécheresses. Il repose sur le bilan climatique entre les précipitations reçues et l’eau perdue par évapotranspiration potentielle (ETP). Une valeur négative indique un déficit hydrique (sécheresse), tandis qu’une valeur positive traduit un excès d’eau.

Dans notre approche, l’ETP est estimée mensuellement à partir des températures minimales et maximales (données WorldClim) et de la latitude à l’aide de la formule de Hargreaves. Le bilan hydrique mensuel est calculé comme la différence entre les précipitations mensuelles et l’ETP. Cette série temporelle de bilans est ensuite lissée sur une fenêtre mobile de trois mois, puis standardisée pour produire le SPEI. Enfin, les valeurs mensuelles de SPEI sont moyennées par année et par cellule spatiale pour obtenir un indicateur annuel de sécheresse.

Code
if (file.exists("data/spei_by_cell_year_sf.rds")) {
  grid_makay_spei <- st_read("data/spei_by_cell_year_sf.rds")
} else if (object_exists("available_data_makay/data/grid_makay_spei.rds",
           bucket = "projet-betsaka", region = "")) {
   grid_makay_spei <- s3read_using(
  FUN = read_rds, object =                       
    "available_data_makay/data/grid_makay_spei.rds",
  bucket = "projet-betsaka", opts = list("region" = "")) 
} else {
  grid_mada_spei <- s3read_using(
    FUN = read_rds, object =                       
      "diffusion/PA-impact-on-deforestation/data/spei_by_cell_year_sf.rds",
    bucket = "projet-betsaka", opts = list("region" = "")) 
  
  grid_mada_spei <- grid_mada_spei %>%
    st_as_sf()
  
  grid_makay_spei <- grid_mada_spei %>%
    st_filter(makay_union)
  
  s3write_using(grid_makay_spei, FUN = write_rds, object = "available_data_makay/data/grid_makay_spei.rds",
                bucket = "projet-betsaka", opts = list("region" = ""))
}


# long format
spei_long <- grid_makay_spei |>
  st_drop_geometry() |>
  pivot_longer(
    cols = starts_with("spei_"),
    names_to = "year",
    names_prefix = "spei_",
    values_to = "spei",
    values_drop_na = TRUE
  ) |>
  mutate(year = as.integer(year))

# simple annual mean
annual_mean <- spei_long |>
  group_by(year) |>
  summarise(mean_spei = mean(spei, na.rm = TRUE), .groups = "drop")

ggplot(annual_mean, aes(year, mean_spei)) +
  geom_hline(yintercept = 0) +
  geom_line() +
  geom_point() +
  labs(x = "Année", y = "SPEI moyen", title = "SPEI annuel – Makay") +
  theme_minimal()

Le graphique montre une forte variabilité interannuelle du SPEI dans le Makay depuis 1980, avec une alternance marquée d’années humides (SPEI positif) et sèches (SPEI négatif) jusqu’au début des années 2000. À partir de cette période, les valeurs deviennent globalement plus faibles et plus souvent négatives, indiquant une tendance vers des conditions plus sèches, particulièrement marquée après 2010 où plusieurs années consécutives présentent un déficit hydrique. Cette évolution suggère une augmentation de la fréquence ou de la persistance des sécheresses récentes dans la région.

3.4 Références

Görgen, Darius A., and Om Prakash Bhandari. 2023. “Mapme.biodiversity: Efficient Monitoring of Global Biodiversity Portfolios.”
Knapp, Kenneth R., Michael C. Kruk, David H. Levinson, Howard J. Diamond, and Charles J. Neumann. 2010. “The International Best Track Archive for Climate Stewardship (IBTrACS) Unifying Tropical Cyclone Data.” Bulletin of the American Meteorological Society 91 (3): 363–76.
Schielein, Johannes. 2023. “Mapme.protectedareas: Reproducible Processing and Analysis Routines with r to Assist in Planning Monitoring and Evaluation of Projects to Support PAs Worldwide.”