Modélisation de la prévalence du paludisme par des facteurs météorologiques à effets décalés dans les régions Nord et Extrême-nord du Cameroun de 2015 à 2024.
dt.nord <-read_excel("data/raw/Données Nord/Base PNLP Nord 2015-2022 Final.xlsx")dt.nord <-as.data.table(dt.nord)dt.nord <- dt.nord[, .(year = Annee,region =`Region_dhis`,district =`District_dhis`,period =`Numero_mois`,case.sim.tdr =`PNLP_13. Nombre de cas de paludisme simple avec TDR positif PALU_<5ans`,case.gra.tdr =`PNLP_15. Nombre de cas de paludisme grave avec TDR positif PALU_<5ans`,case.sim.ge =`PNLP_14. Nombre de cas de paludisme simple avec goutte epaisse (GE) positive PALU_<5ans`,case.gra.ge =`PNLP_a19. Nombre de cas de paludisme grave avec Goutte Epaisse (GE) positive PALU_<5ans`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans`)]
Show the code
dt.extnord.2015<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2015.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = MOIS,case.sim.tdr =`Nombre de cas de paludisme simple avec TDR positif < 5 ans`,case.gra.tdr =`Nombre de cas de paludisme grave avec TDR positif < 5 ans`,case.sim.ge =`Nombre de cas de paludisme simple avec goutte épaisse (GE) positive < 5 ans`,case.gra.ge =`Nombre de cas de paludisme grave avec goutte épaisse (GE) positive < 5 ans`,consult =`Nombre total de consultations pour maladie (toutes causes confondues) < 5 ans`,death =`Nombre de personnes décédées pour paludisme confirmé < 5 ans` )]dt.extnord.2016<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2016.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = MOIS,case.sim.tdr =`Nombre de cas de paludisme simple avec TDR positif < 5 ans`,case.gra.tdr =`Nombre de cas de paludisme grave avec TDR positif < 5 ans`,case.sim.ge =`Nombre de cas de paludisme simple avec goutte épaisse (GE) positive < 5 ans`,case.gra.ge =`Nombre de cas de paludisme grave avec goutte épaisse (GE) positive < 5 ans`,consult =`Nombre total de consultations pour maladie (toutes causes confondues) < 5 ans`,death =`Nombre de personnes décédées pour paludisme confirmé < 5 ans` )]dt.extnord.2017<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2017.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = MOIS,case.sim.tdr =`Nombre de cas de paludisme simple avec TDR positif < 5 ans`,case.gra.tdr =`Nombre de cas de paludisme grave avec TDR positif < 5 ans`,case.sim.ge =`Nombre de cas de paludisme simple avec goutte épaisse (GE) positive < 5 ans`,case.gra.ge =`Nombre de cas de paludisme grave avec goutte épaisse (GE) positive < 5 ans`,consult =`Nombre total de consultations pour maladie (toutes causes confondues) < 5 ans`,death =`Nombre de personnes décédées pour paludisme confirmé < 5 ans` )]dt.extnord.2018<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2018.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = MOIS,case.sim.tdr =`Nombre de cas de paludisme simple avec TDR positif < 5 ans`,case.gra.tdr =`Nombre de cas de paludisme grave avec TDR positif < 5 ans`,case.sim.ge =`Nombre de cas de paludisme simple avec goutte épaisse (GE) positive < 5 ans`,case.gra.ge =`Nombre de cas de paludisme grave avec goutte épaisse (GE) positive < 5 ans`,consult =`Nombre total de consultations pour maladie (toutes causes confondues) < 5 ans`,death =`Nombre de personnes décédées pour paludisme confirmé < 5 ans` )]dt.extnord.2019<-read_excel("data/raw/Données Extrême-nord/BASE 2019.xls") %>% as.data.table %>% .[, .(region = orgunitlevel1,district = orgunitlevel2,period = periodname,case.sim.tdr =`PNLP_13. Nombre de cas de paludisme simple avec TDR positif PALU_<5ans`,case.gra.tdr =`PNLP_18. Nombre de cas de paludisme grave avec TDR positif PALU_<5ans`,case.sim.ge =`PNLP_14. Nombre de cas de paludisme simple avec goutte epaisse (GE) positive PALU_<5ans`,case.gra.ge =`PNLP_17. Nombre total de cas d’hospitalisation pour paludisme grave confirmé par microscopie (Gouttes Epaisses) PALU_<5ans`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans` )]dt.extnord.2020<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2020.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = periodname,case.sim.tdr =`PNLP_13. Nombre de cas de paludisme simple avec TDR positif PALU_<5ans`,case.gra.tdr =`PNLP_18. Nombre de cas de paludisme grave avec TDR positif PALU_<5ans`,case.sim.ge =`PNLP_14. Nombre de cas de paludisme simple avec goutte epaisse (GE) positive PALU_<5ans`,case.gra.ge =`PNLP_17. Nombre total de cas d’hospitalisation pour paludisme grave confirmé par microscopie (Gouttes Epaisses) PALU_<5ans`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans` )]dt.extnord.2021<-read_excel("data/raw/Données Extrême-nord/Base 2021.xls") %>% as.data.table %>% .[, .(region = orgunitlevel1,district = orgunitlevel2,period = periodname,case.conf =`PNLP_Cas de paludisme confirmés (-5 ans)`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans` )]dt.extnord.2022<-read_excel("data/raw//Données Extrême-nord/Base 2022.xlsx") %>% as.data.table %>% .[, .(region = orgunitlevel1,district = orgunitlevel2,period = periodname,case.sim.tdr =`PNLP_13. Nombre de cas de paludisme simple avec TDR positif PALU_<5ans`,case.gra.tdr =`PNLP_16. Nombre total de cas d’hospitalisation pour paludisme grave confirmé par TDR PALU_<5ans`,case.sim.ge =`PNLP_14. Nombre de cas de paludisme simple avec goutte epaisse (GE) positive PALU_<5ans`,case.gra.ge =`PNLP_17. Nombre total de cas d’hospitalisation pour paludisme grave confirmé par microscopie (Gouttes Epaisses) PALU_<5ans`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans` )]dt.extnord <-list(dt.extnord.2015, dt.extnord.2016, dt.extnord.2017, dt.extnord.2018, dt.extnord.2019, dt.extnord.2020, dt.extnord.2021, dt.extnord.2022)names(dt.extnord) <-2015:2022dt.extnord <- dt.extnord %>%rbindlist(idcol ="year", fill = T)dt.extnord <- dt.extnord[region %in%c("EXTREME-NORD", "Region Extreme Nord", "Region Extreme-Nord")]dt.extnord[, region := region %>% factor %>%fct_collapse("Region Extreme Nord"=c("EXTREME-NORD", "Region Extreme-Nord"))]
Show the code
dt.inc <-rbind(dt.nord, dt.extnord, fill=T) # Merge des fichiers nord et extreme nordrm(dt.nord, dt.extnord.2015, dt.extnord.2016, dt.extnord.2017, dt.extnord.2018, dt.extnord.2019, dt.extnord.2020, dt.extnord.2021, dt.extnord.2022)
Show the code
#dt.inc %>% sapply(table)# Recoding districtdt.inc[, district :=sub("District ", "", district)]dt.inc[, district :=paste0(toupper(district %>%substr(1, 1)),substr(district, 2, nchar(district)) %>% tolower)]dt.inc[district =="Garoua i", district :="Garoua 1"]dt.inc[district =="Garoua ii", district :="Garoua 2"]dt.inc[district =="Fokotol", district :="Makary"]dt.inc[district =="Mozogo", district :="Koza"]# Recoding monthsdt.inc[, month := period %>%tstrsplit(" ", keep =1)]dt.inc$period <-NULLdt.inc[, month := month %>% tolower %>% as.factor]dt.inc[, month := month %>%fct_collapse("1"="janvier","2"=c("fevrier", "février"),"3"="mars","4"="avril","5"="mai","6"="juin","7"="juillet","8"=c("aout", "août"),"9"="septembre","10"="octobre","11"="novembre","12"=c("decembre", "décembre"))]dt.inc[, month := month %>%factor(level =1:12) %>% as.integer]dt.inc[, year := year %>% as.integer]# Computing confirmed cases when not provided directlydt.inc[is.na(case.sim.tdr), case.sim.tdr :=0]dt.inc[is.na(case.gra.tdr), case.gra.tdr :=0]dt.inc[is.na(case.sim.ge), case.sim.ge :=0]dt.inc[is.na(case.gra.ge), case.gra.ge :=0]dt.inc[is.na(case.conf), case.conf := case.sim.tdr + case.gra.tdr + case.sim.ge + case.gra.ge]
Figure 1: Périodes manquantes par district et par année.
Sur la région Nord, les mois de novembre et décembre 2022 n’ont pas été renseignés pour l’ensemble des districts. A l’Extreme Nord, le district de Fotokol n’existe que depuis 2019 et plusieurs mois consécutifs peuvent être manquants en 2018 pour certains districts.
Show the code
dt.inc <- dt.inc[!(district=="Fotokol"& year %in%2015:2018)]
Show the code
fig.comp <- dt.inc[, .(tot = .N,N = case.conf %>% is.na %>% sum ), by=.(region, year, date) ]fig.comp[, prop := N / tot *100]
La figure ci-dessous montre la proportion de districts non renseignés pour chaque mois de la période d’étude.
Les données de population par région pour les années 2016 à 2024 proviennent des “Projections démographiques et estimations des cibles prioritaires des différents programmes et interventions de santé, 2016” du Ministère de la Santé Publique du Cameroun.
Les données de population par district pour les années 2020, 2023 and 2024 proviennent des “Populations cibles prioritaires” du Ministère de la Santé Publique du Cameroun.
Nous constatons une erreur de moins de 5% pour chaque année entre les deux sources.
Pour l’année 2015, nous avons estimé la population par un régression linéaire simple en se basant sur les données de projection par région de 2016 à 2024:
Show the code
ggplot(dt.pop.proj, aes(year, pop_proj, color = region)) +geom_point() +geom_smooth(method = lm, se = T) +ylab("Projected population")
Résultat du modèle d’estimation pour la région Extrême Nord :
Les données proviennent de NASA/POWER CERES/MERRA2 et correspondent à des données mensuelles et annuelles par district.
Temperature de la surface terrestre (°C),
Vitesse du vent à 2 mètres (m/s),
Humidité du sol en surface (%),
Précipitation corrigée (mm/day).
Pour obtenir les données par région, les valeurs des districts ont été moyennées excepté pour les précipitations où nous avons utilisé la formule suivante :
Nous avons tout d’abord cherché à décrire et mesurer la force de l’association entre l’incidence mensuelle du paludisme et les différentes variables météorologiques au niveau régional.
Show the code
# Data subset for North regiondt.dlnm.n <- dt.reg.ym[region=="Region Nord"]dt.dlnm.n[, pop := pop %>% ceiling %>% as.integer]# Data subset for Extreme North regiondt.dlnm.en <- dt.reg.ym[region=="Region Extreme Nord"]dt.dlnm.en[, pop := pop %>% ceiling %>% as.integer]
Nous avons ensuite utilisé les modèles non linéaires à décalage distribué (DLNM) (Gasparrini 2011). Cette méthodologie repose sur une base croisée, c’est à dire un espace bidimensionnel qui spécifient les relations dans les dimensions du prédicteur et des décalages temporels (ici en mois). Afin d’établir cette base croisée, nous avons choisi une fonction spline cubique naturel pour chaque variable météorologique ainsi que pour les décalages temporels. Aucun noeud n’a été utilisé dans le paramétrage des splines. Le nombre de décalages a été fixé à 6 afin de mesurer l’effet des variables métérologiques dans les 6 mois précédant la survenue des cas de paludisme.
Un modèle additif généralisé (Wood 2004) de quasipoisson a été utilisé pour prendre en compte la surdispersion du nombre de cas. La variable explicative était le nombre de cas confirmés. Le logarithme de la population a été placé en offset. Un modèle a été construit pour chaque variable météorologique. La qualité des modèles a été présentée graphiquement à l’aide de la distribution des résidus et d’un q-q plot.
Show the code
# Models for north regiondlnm.n.prec <-gam(case.conf ~ cb.prec.n, offset=log(pop), data = dt.dlnm.n, family = quasipoisson, trace = F, maxit =100)dlnm.n.wetn <-gam(case.conf ~ cb.wetn.n, offset=log(pop), data = dt.dlnm.n, family = quasipoisson, trace = F, maxit =100)dlnm.n.temp <-gam(case.conf ~ cb.temp.n, offset=log(pop), data = dt.dlnm.n, family = quasipoisson, trace = F, maxit =100)dlnm.n.wind <-gam(case.conf ~ cb.wind.n, offset=log(pop), data = dt.dlnm.n, family = quasipoisson, trace = F, maxit =100)# Models for extreme north regiondlnm.en.prec <-gam(case.conf ~ cb.prec.en, offset=log(pop), data = dt.dlnm.en, family = quasipoisson, trace = F, maxit =100)dlnm.en.wetn <-gam(case.conf ~ cb.wetn.en, offset=log(pop), data = dt.dlnm.en, family = quasipoisson, trace = F, maxit =100)dlnm.en.temp <-gam(case.conf ~ cb.temp.en, offset=log(pop), data = dt.dlnm.en, family = quasipoisson, trace = F, maxit =100)dlnm.en.wind <-gam(case.conf ~ cb.wind.en, offset=log(pop), data = dt.dlnm.en, family = quasipoisson, trace = F, maxit =100)
Le DLNM nous a permis d’obtenir les risques relatifs de paludisme en fonction des décalages temporels et des valeurs prises par les variables météorologiques. Les intervalles de confiance à 95% des risques relatifs sont également représentés. Un risque relatif strictement supérieur à 1 correspond à une probabilité plus importante de développer le paludisme dans des conditions données par rapport à une situation de référence. Les valeurs de référence d’exposition, pour les effets prédits par le DLNM, sont présentés dans le tableau ci-dessous. Le choix des valeurs de référence n’affecte pas l’adéquation du modèle et différentes valeurs peuvent être retenues en fonction des hypothèses de l’étude. Nous avons décidé de prendre comme valeurs de référence (Table 2) des valeurs observées lors de la saison non épidémique (mois où l’incidence diminue). Les effets des décalages temporels des variables météorologiques sur le risque relatif seront ensuites analysés pour des valeurs observées lors des mois d’avril à juin, mois qui précèdent le retour de la saison épidémique (augmentation des cas).
Un total de 1,528,967 cas de paludisme ont été enregistrés pour les deux régions sur la période de l’étude. De 2015 à 2018, l’incidence était plus élevée dans la région Nord que dans la région Extrême Nord, tendance qui s’est inversée à partir de 2019 (Figure 3). L’incidence maximale enregistrée était de 190.6 (189.5-191.8) pour 1000 personnes-années sur la région Nord et de 243.8 (242.9-244.7)sur la région Extreme Nord. L’incidence minimale était de 90.8 (90-91.6) et 82 (81.5-82.6) pour 1000 personnes-années sur la région Nord et Extreme Nord respectivement.
Figure 3: Evolution de l’incidence sur les deux régions de 2015 à 2022.
L’évolution des incidences mensuelles (Figure 4) montre une augmentation des cas de paludisme de juillet à octobre puis une diminution d’octobre à mai-juin. En saison de haute épidémie, l’incidence dépasse les 200 personnes-année sur la région Extreme Nord alors qu’elle reste majoritairement comprise entre 100 et 200 personnes-année sur la région Nord.
Figure 4: Monthly incidence of malaria, North and Extreme North, Cameroon, 2015-2022.
Conformément aux recommandations de l’OMS, l’incidence du paludisme pour 1 000 personnes-année de 2015 à 2022 a été classée en 4 catégories d’intensité de transmission (Table 3) :
Table 3: Nombre de districts de santé par intensité de transmission selon l’année et la région.
Region Extreme Nord
Region Nord
Très faible transmission (< 100 cas)
N = 851
Faible transmission (entre 100 et 250 cas)
N = 1201
Transmission modérée (entre 250 et 450 cas)
N = 311
Forte transmission (> 450 cas)
N = 81
Overall
N = 2441
Très faible transmission (< 100 cas)
N = 521
Faible transmission (entre 100 et 250 cas)
N = 631
Transmission modérée (entre 250 et 450 cas)
N = 51
Forte transmission (> 450 cas)
N = 01
Overall
N = 1201
year
2015
8 (27%)
16 (53%)
5 (17%)
1 (3.3%)
30 (100%)
1 (6.7%)
11 (73%)
3 (20%)
0 (0%)
15 (100%)
2016
16 (53%)
13 (43%)
0 (0%)
1 (3.3%)
30 (100%)
4 (27%)
10 (67%)
1 (6.7%)
0 (0%)
15 (100%)
2017
21 (70%)
8 (27%)
1 (3.3%)
0 (0%)
30 (100%)
9 (60%)
6 (40%)
0 (0%)
0 (0%)
15 (100%)
2018
9 (30%)
18 (60%)
2 (6.7%)
1 (3.3%)
30 (100%)
2 (13%)
12 (80%)
1 (6.7%)
0 (0%)
15 (100%)
2019
13 (42%)
17 (55%)
0 (0%)
1 (3.2%)
31 (100%)
11 (73%)
4 (27%)
0 (0%)
0 (0%)
15 (100%)
2020
11 (35%)
17 (55%)
3 (9.7%)
0 (0%)
31 (100%)
10 (67%)
5 (33%)
0 (0%)
0 (0%)
15 (100%)
2021
2 (6.5%)
14 (45%)
12 (39%)
3 (9.7%)
31 (100%)
8 (53%)
7 (47%)
0 (0%)
0 (0%)
15 (100%)
2022
5 (16%)
17 (55%)
8 (26%)
1 (3.2%)
31 (100%)
7 (47%)
8 (53%)
0 (0%)
0 (0%)
15 (100%)
1 n (%)
Sur la région Nord, on constate qu’au moins 80% des districts de santé possèdent une très faible ou faible transmission du paludisme chaque année et qu’aucun district ne montre de forte transmission. Le nombre de districts ayant un très faible transmission augmentait depuis 2015 mais tend à diminuer depuis 2020 au profit d’un risque de transmission faible. Sur la région Extrême-nord, le nombre de districts à très faible transmission diminue depuis 2017 tandis que celui à transmission modérée augmente. De plus, en 2021, 3 districts (Koza, Mokolo et Moutourwa) montraient une forte transmission contre au maximum 1 sur les autres années (Gazawa de 2015 à 2019 et Koza en 2022). La Figure 5 ci-dessous montre la distribution géographique de la transmission du paludisme en fonction des années et des districts de santé. On remarque que les zones de transmission modérée et forte sont principalement situées dans la partie sud de la région Extrême Nord.
Show the code
ds.cam <-inner_join(ds.cam, dt.dis.y, by=c("Nom_DS"="district"))levels(ds.cam$int.trans) <-c("Très faible\n(< 100 cas)","Faible\n(entre 100 et 250 cas)","Modérée\n(entre 250 et 450 cas)","Forte\n(> 450 cas)")
Figure 5: Intensité de transmission du paludisme par district de santé sur les régions Nord et Extrême Nord du Cameroun de 2015 à 2022.
2.2 Relation between incidence and meteorological factors
L’analyse descriptive des séries chronologiques de l’incidence mensuelle du paludisme et des variables météorologiques a montré une saisonnalité typique, avec un décalage entre les cas de paludisme et la pluviométrie dans les deux régions (See Figure 6).
Figure 6: Séries chronologiques de l’incidence du paludisme et des variables météorologiques, Nord et Extrême-nord, 2015-2022.
2.2.1 Precipitation and incidence
L’évolution des incidences mensuelles du paludisme (Figure 4) et des précipitations mensuelles (Figure 7) montre une augmentation des cas de paludisme de juillet à octobre tandis que les précipitations augmentent principalement d’avril à août ce qui suggérerait un décalage d’environ 3-4 mois entre le début de l’augmentation des précipitations et le début de l’augmentation de l’incidence du paludisme dans les deux régions.
Figure 8: Overall effect of precipitation on malaria incidence, with reference at 0 mm/day. North and Extreme North, Cameroon, 2015-2022.
Les graphiques ci-dessus montrent l’augmentation exponentielle du risque relatif de l’incidence du paludisme avec l’augmentation des précipitations sur les deux régions. Dès 1 mm/jour de précipitations le risque relatif est de 1.2 (1.1-1.2) sur la région Nord et 1.4 (1.3-1.5) sur la région Extreme Nord. En milieu de saison des pluies, lorsque 6 mm/jour sont observés, le risque relatif atteint 2.5 (1.8-3.4) sur la région Nord et 7.4 (4.1-13.4) sur la région Extreme Nord.
Figure 9: Cumulative lag-specific effect (top) and lag-specific effect (bottom) on relative risk of malaria incidence at 2 mm/day of precipitation, with reference at 0 mm/day. North and Extreme North, Cameroon, 2015-2022.
Les graphiques du haut correspondent à une situation de début de saison des pluies, où 2 mm/jour de précipitations sont cumulées sur plusieurs mois consécutifs. Dès le premier mois où 2 mm/jour de pluies sont observées, le risque relatif est de 1.06 (1.04-1.08) et augmente pendant les 6 prochains mois pour atteindre 1.35 (1.21-1.51). Les graphiques du bas correspondent à une situation de fin de saison des pluies où les précipitations s’estompent au cours du temps. On y observe une diminution du risque relatif qui devient égal à un 5 mois après l’arrêt des pluies sur la région Nord et sur la région Extreme Nord.
Figure 11: Overall effect of soil wetness on malaria incidence, with reference at 20%. North and Extreme North, Cameroon, 2015-2022.
Les graphiques ci-dessus montrent l’augmentation exponentielle du risque relatif de l’incidence du paludisme avec l’augmentation de l’humidité du sol sur les deux régions. Cette relation est similaire à celle observée pour les précipitations. En milieu de saison des pluies, où une humidité de 70% est observée, le risque relatif peut atteindre 2 (1.4-2.8) sur la région Nord et 3.1 (2-4.6) sur la région Extreme Nord.
Figure 12: Cumulative Lag-specific effect (top) and lag-specific effect (bottom) on relative risk of malaria incidence at 40% of soil wetness, with reference at 20%. North and Extreme North, Cameroon, 2015-2022.
Dès que l’humidité du sol atteint 40% sur plusieurs mois consécutif (début de saison des pluies), on observe l’augmentation du risque relatif sur les 5 prochains mois (graphiques du haut) et ce dès le premier mois où 40% d’humidité est observé. Le risque relatif atteint son maximum de 1.35 (1.21-1.51) au bout de 5 mois sur la région Nord et de 1.61 (1.42-1.83) au bout de 5 mois sur la région Extreme Nord. En saison sèche, lorsque une humidité du sol de 40% n’est plus observée au fil des mois, on observe une diminution du risque relatif (graphiques du bas). Le risque relatif devient égal à 1 après 3 mois sur les deux régions.
Figure 14: Overall effect of temperature on malaria incidence, with reference at 32°C. North and Extreme North, Cameroon, 2015-2022.
La Figure 14 montre un effet global significatif de la température sur le risque relatif d’incidence pour la région Extrême Nord où le risque de transmission augmente en même temps que la température. Cet effet n’est cependant pas observé sur la région Nord.
Figure 15: Cumulative lag-specific effect (top) and lag-specific effect (bottom) on relative risk of malaria incidence at 26°C of temperature, with reference at 32°C. North and Extreme North, Cameroon, 2015-2022.
Lorsque la température descend à 26°C sur plusieurs mois consécutif (graphiques du haut), le risque relatif est strictement supérieur à 1 pendant 4 mois avec un maximum de 1.64 (1.3-2.05) au 3ème mois sur la région Nord. Pour la région Extreme Nord, le risque relatif est strictement supérieur à 1 pendant 3 mois et atteint son maximum de 1.51 (1.22-1.87) au 2ème mois. Une fois que les températures redeviennent supérieures à 26°C, le risque relatif diminue pour atteindre 1 après 2 mois sur la région Nord et après 1 mois sur la région Extreme Nord.
Figure 17: Overall effect of wind on malaria incidence, with reference at 3 m/s. North and Extreme North, Cameroon, 2015-2022.
Les graphiques ci-dessus montrent la diminution exponentielle du risque relatif de l’incidence du paludisme avec l’augmentation de la vitesse du vent sur les deux régions. Globalement, le risque relatif est supérieur à 1 dès que la vitesse du vent devient inférieur à 3 m/s.
Figure 18: Cumulative lag-specific effect (top) and lag-specific effect (bottom) on relative risk of malaria incidence at 1.5 m/s of wind, with reference at 3 m/s. North and Extreme North, Cameroon, 2015-2022.
Quand une vitesse du vent de 2 m/s est observée sur plusieurs mois consécutif (saison des pluies), on observe l’augmentation du risque relatif sur les 5 prochains mois (graphiques du haut) et ce dès le premier mois où cette vitesse est observée. Le risque relatif atteint son maximum au bout de 5 mois, 2.05 (1.67-2.53) pour le Nord et 2.52 (2.05-3.1) pour l’Extreme Nord. Quand la saison sèche recommence et que la vitesse du vent ne diminue plus en-dessous de 2 m/s au fil des mois, on observe une diminution du risque relatif (graphiques du bas). Le risque relatif n’est plus strictement supérieur à 1 après 4 mois sur les deux régions.
Boelle, Pierre-Yves, and Thomas Obadia. 2023. R0: Estimation of R0 and Real-Time Reproduction Number from Epidemics. https://github.com/tobadia/R0.
Cauchemez, Simon, Pierre-Yves Boëlle, Guy Thomas, and Alain-Jacques Valleron. 2006. “Estimating in Real Time the Efficacy of Measures to Control Emerging Communicable Diseases.”American Journal of Epidemiology 164 (6): 591–97. https://doi.org/10.1093/aje/kwj274.
Gasparrini, A. 2011. “Distributed Lag Linear and Non-Linear Models in R: The Package dlnm.”Journal of Statistical Software 43 (8): 1–20. https://doi.org/10.18637/jss.v043.i08.
R Core Team. 2018. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Wallinga, Jacco, and Peter Teunis. 2004. “Different Epidemic Curves for Severe Acute Respiratory Syndrome Reveal Similar Impacts of Control Measures.”American Journal of Epidemiology 160 (6): 509–16. https://doi.org/10.1093/aje/kwh255.
Wood, S. N. 2004. “Stable and Efficient Multiple Smoothing Parameter Estimation for Generalized Additive Models.”Journal of the American Statistical Association 99 (467): 673–86.
@online{beneteau2024,
author = {Beneteau, Samuel and Mouliom, Abas},
title = {Modélisation de La Prévalence Du Paludisme Par Des Facteurs
Météorologiques à Effets Décalés Dans Les Régions {Nord} Et
{Extrême-nord} Du {Cameroun} de 2015 à 2024.},
date = {2024-09-01},
url = {https://malaria-lag-model-fd6eec.gitlab.io},
langid = {en}
}
For attribution, please cite this work as:
Beneteau, Samuel, and Abas Mouliom. 2024. “Modélisation de La
Prévalence Du Paludisme Par Des Facteurs Météorologiques à Effets
Décalés Dans Les Régions Nord Et Extrême-Nord Du Cameroun de 2015 à
2024.” Unpublished. September 1, 2024. https://malaria-lag-model-fd6eec.gitlab.io.
Source Code
---title: "Modélisation de la prévalence du paludisme par des facteurs météorologiques à effets décalés dans les régions Nord et Extrême-nord du Cameroun de 2015 à 2024."date: "2024-09-01"author: - name: Samuel Beneteau id: sb orcid: 0000-0002-5922-3503 email: samuel.beneteau@ntymail.com affiliation: - name: Indépendant city: Rabastens state: FR url: "" - name: Abas Mouliom id: sb email: mouliom_abas@yahoo.frlicense: "CC BY-NC-SA"citation: container-title: Unpublished volume: "" issue: "" doi: "" url: "https://malaria-lag-model-fd6eec.gitlab.io"funding: "The authors received no specific funding for this work."format: html: toc: true toc-depth: 4 number-sections: true warning: false message: false echo: true bibliography: citation.bib link-citations: true linkcolor: blue nocite: '@*' embed-resources: true code-fold: true code-summary: "Show the code" code-tools: true code-copy: trueeditor: sourceeditor_options: chunk_output_type: console---```{css eval=F, echo=F}p{text-align: justify}``````{r}library(dplyr)library(readxl)library(data.table)library(forcats)library(lubridate)library(ggplot2)library(kableExtra)library(sjPlot)library(gtsummary)library(dlnm)library(sf)library(geodata)library(ggspatial)library(splines)library(gam)library(mgcv)library(performance)library(hrbrthemes)library(prophet)```## Methods### Cases data```{r}dt.nord <-read_excel("data/raw/Données Nord/Base PNLP Nord 2015-2022 Final.xlsx")dt.nord <-as.data.table(dt.nord)dt.nord <- dt.nord[, .(year = Annee,region =`Region_dhis`,district =`District_dhis`,period =`Numero_mois`,case.sim.tdr =`PNLP_13. Nombre de cas de paludisme simple avec TDR positif PALU_<5ans`,case.gra.tdr =`PNLP_15. Nombre de cas de paludisme grave avec TDR positif PALU_<5ans`,case.sim.ge =`PNLP_14. Nombre de cas de paludisme simple avec goutte epaisse (GE) positive PALU_<5ans`,case.gra.ge =`PNLP_a19. Nombre de cas de paludisme grave avec Goutte Epaisse (GE) positive PALU_<5ans`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans`)]``````{r}dt.extnord.2015<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2015.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = MOIS,case.sim.tdr =`Nombre de cas de paludisme simple avec TDR positif < 5 ans`,case.gra.tdr =`Nombre de cas de paludisme grave avec TDR positif < 5 ans`,case.sim.ge =`Nombre de cas de paludisme simple avec goutte épaisse (GE) positive < 5 ans`,case.gra.ge =`Nombre de cas de paludisme grave avec goutte épaisse (GE) positive < 5 ans`,consult =`Nombre total de consultations pour maladie (toutes causes confondues) < 5 ans`,death =`Nombre de personnes décédées pour paludisme confirmé < 5 ans` )]dt.extnord.2016<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2016.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = MOIS,case.sim.tdr =`Nombre de cas de paludisme simple avec TDR positif < 5 ans`,case.gra.tdr =`Nombre de cas de paludisme grave avec TDR positif < 5 ans`,case.sim.ge =`Nombre de cas de paludisme simple avec goutte épaisse (GE) positive < 5 ans`,case.gra.ge =`Nombre de cas de paludisme grave avec goutte épaisse (GE) positive < 5 ans`,consult =`Nombre total de consultations pour maladie (toutes causes confondues) < 5 ans`,death =`Nombre de personnes décédées pour paludisme confirmé < 5 ans` )]dt.extnord.2017<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2017.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = MOIS,case.sim.tdr =`Nombre de cas de paludisme simple avec TDR positif < 5 ans`,case.gra.tdr =`Nombre de cas de paludisme grave avec TDR positif < 5 ans`,case.sim.ge =`Nombre de cas de paludisme simple avec goutte épaisse (GE) positive < 5 ans`,case.gra.ge =`Nombre de cas de paludisme grave avec goutte épaisse (GE) positive < 5 ans`,consult =`Nombre total de consultations pour maladie (toutes causes confondues) < 5 ans`,death =`Nombre de personnes décédées pour paludisme confirmé < 5 ans` )]dt.extnord.2018<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2018.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = MOIS,case.sim.tdr =`Nombre de cas de paludisme simple avec TDR positif < 5 ans`,case.gra.tdr =`Nombre de cas de paludisme grave avec TDR positif < 5 ans`,case.sim.ge =`Nombre de cas de paludisme simple avec goutte épaisse (GE) positive < 5 ans`,case.gra.ge =`Nombre de cas de paludisme grave avec goutte épaisse (GE) positive < 5 ans`,consult =`Nombre total de consultations pour maladie (toutes causes confondues) < 5 ans`,death =`Nombre de personnes décédées pour paludisme confirmé < 5 ans` )]dt.extnord.2019<-read_excel("data/raw/Données Extrême-nord/BASE 2019.xls") %>% as.data.table %>% .[, .(region = orgunitlevel1,district = orgunitlevel2,period = periodname,case.sim.tdr =`PNLP_13. Nombre de cas de paludisme simple avec TDR positif PALU_<5ans`,case.gra.tdr =`PNLP_18. Nombre de cas de paludisme grave avec TDR positif PALU_<5ans`,case.sim.ge =`PNLP_14. Nombre de cas de paludisme simple avec goutte epaisse (GE) positive PALU_<5ans`,case.gra.ge =`PNLP_17. Nombre total de cas d’hospitalisation pour paludisme grave confirmé par microscopie (Gouttes Epaisses) PALU_<5ans`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans` )]dt.extnord.2020<-read_excel("data/raw/Données Extrême-nord/BD PNLP CMR 2020.xlsx") %>% as.data.table %>% .[, .(region = Region,district = District,period = periodname,case.sim.tdr =`PNLP_13. Nombre de cas de paludisme simple avec TDR positif PALU_<5ans`,case.gra.tdr =`PNLP_18. Nombre de cas de paludisme grave avec TDR positif PALU_<5ans`,case.sim.ge =`PNLP_14. Nombre de cas de paludisme simple avec goutte epaisse (GE) positive PALU_<5ans`,case.gra.ge =`PNLP_17. Nombre total de cas d’hospitalisation pour paludisme grave confirmé par microscopie (Gouttes Epaisses) PALU_<5ans`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans` )]dt.extnord.2021<-read_excel("data/raw/Données Extrême-nord/Base 2021.xls") %>% as.data.table %>% .[, .(region = orgunitlevel1,district = orgunitlevel2,period = periodname,case.conf =`PNLP_Cas de paludisme confirmés (-5 ans)`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans` )]dt.extnord.2022<-read_excel("data/raw//Données Extrême-nord/Base 2022.xlsx") %>% as.data.table %>% .[, .(region = orgunitlevel1,district = orgunitlevel2,period = periodname,case.sim.tdr =`PNLP_13. Nombre de cas de paludisme simple avec TDR positif PALU_<5ans`,case.gra.tdr =`PNLP_16. Nombre total de cas d’hospitalisation pour paludisme grave confirmé par TDR PALU_<5ans`,case.sim.ge =`PNLP_14. Nombre de cas de paludisme simple avec goutte epaisse (GE) positive PALU_<5ans`,case.gra.ge =`PNLP_17. Nombre total de cas d’hospitalisation pour paludisme grave confirmé par microscopie (Gouttes Epaisses) PALU_<5ans`,consult =`PNLP_07. Nombre total de consultations pour maladie (toutes causes confondues) PALU_<5ans`,death =`PNLP_35. Nombre de personnes decedees pour paludisme confirme PALU_<5ans` )]dt.extnord <-list(dt.extnord.2015, dt.extnord.2016, dt.extnord.2017, dt.extnord.2018, dt.extnord.2019, dt.extnord.2020, dt.extnord.2021, dt.extnord.2022)names(dt.extnord) <-2015:2022dt.extnord <- dt.extnord %>%rbindlist(idcol ="year", fill = T)dt.extnord <- dt.extnord[region %in%c("EXTREME-NORD", "Region Extreme Nord", "Region Extreme-Nord")]dt.extnord[, region := region %>% factor %>%fct_collapse("Region Extreme Nord"=c("EXTREME-NORD", "Region Extreme-Nord"))]``````{r}dt.inc <-rbind(dt.nord, dt.extnord, fill=T) # Merge des fichiers nord et extreme nordrm(dt.nord, dt.extnord.2015, dt.extnord.2016, dt.extnord.2017, dt.extnord.2018, dt.extnord.2019, dt.extnord.2020, dt.extnord.2021, dt.extnord.2022)``````{r}#dt.inc %>% sapply(table)# Recoding districtdt.inc[, district :=sub("District ", "", district)]dt.inc[, district :=paste0(toupper(district %>%substr(1, 1)),substr(district, 2, nchar(district)) %>% tolower)]dt.inc[district =="Garoua i", district :="Garoua 1"]dt.inc[district =="Garoua ii", district :="Garoua 2"]dt.inc[district =="Fokotol", district :="Makary"]dt.inc[district =="Mozogo", district :="Koza"]# Recoding monthsdt.inc[, month := period %>%tstrsplit(" ", keep =1)]dt.inc$period <-NULLdt.inc[, month := month %>% tolower %>% as.factor]dt.inc[, month := month %>%fct_collapse("1"="janvier","2"=c("fevrier", "février"),"3"="mars","4"="avril","5"="mai","6"="juin","7"="juillet","8"=c("aout", "août"),"9"="septembre","10"="octobre","11"="novembre","12"=c("decembre", "décembre"))]dt.inc[, month := month %>%factor(level =1:12) %>% as.integer]dt.inc[, year := year %>% as.integer]# Computing confirmed cases when not provided directlydt.inc[is.na(case.sim.tdr), case.sim.tdr :=0]dt.inc[is.na(case.gra.tdr), case.gra.tdr :=0]dt.inc[is.na(case.sim.ge), case.sim.ge :=0]dt.inc[is.na(case.gra.ge), case.gra.ge :=0]dt.inc[is.na(case.conf), case.conf := case.sim.tdr + case.gra.tdr + case.sim.ge + case.gra.ge]``````{r}dt.inc <- dt.inc[, lapply(.SD, sum, na.rm=T), by = .(region, district, year, month)]``````{r}dt.study <-data.table(period =seq(as.Date("2015-01-31"), as.Date("2022-12-31"), by ="day"))dt.study[, c("year", "month") :=list(period %>% year, period %>% month)]dt.study <- dt.study[, .(date = period %>% max), by = .(year, month)]dt.study <- dt.study[, .(district = dt.inc$district %>% unique), by = .(year, month, date)]dt.study <- dt.inc[, .(region, district)] %>% unique %>% .[dt.study, on="district"]dt.inc <- dt.inc[dt.study, on=c("district", "year", "month", "region")]```Pour certains mois et certains districts, le nombre de cas confimés était manquant.```{r, fig.width=8}#| label: fig-completeness#| fig-cap: Périodes manquantes par district et par année.dt.inc %>%ggplot(aes(date, district, fill= case.conf >=0)) +geom_tile() +theme_ipsum() +theme(legend.position="none") +facet_wrap(~region, scales="free")```Sur la région Nord, les mois de novembre et décembre 2022 n'ont pas été renseignés pour l'ensemble des districts. A l'Extreme Nord, le district de Fotokol n'existe que depuis 2019 et plusieurs mois consécutifs peuvent être manquants en 2018 pour certains districts.```{r}dt.inc <- dt.inc[!(district=="Fotokol"& year %in%2015:2018)]``````{r}fig.comp <- dt.inc[, .(tot = .N,N = case.conf %>% is.na %>% sum ), by=.(region, year, date) ]fig.comp[, prop := N / tot *100]```La figure ci-dessous montre la proportion de districts non renseignés pour chaque mois de la période d'étude.```{r}#| label: fig-completeness-prop#| fig-cap: Proportion de districts renseignés par mois et par année.fig.comp[order(region, date)] %>%ggplot(aes(x = date, y=prop, color=region)) +geom_line() +ylab("Proportion of missing district")```Nous avons estimé les données manquantes pour ces districts à l'aide du `package prophet`[@package-prophet].```{r}miss.district <- dt.inc[is.na(case.conf)]$district %>% uniquedt.miss.pred <- miss.district %>%lapply(function(x){ dt.prophet <- dt.inc[district == x, .(ds = date, y = case.conf)] m <- dt.prophet %>%prophet() future <-data.frame(ds = dt.inc[district == x &is.na(case.conf)]$date) forecast <-predict(m, future) })names(dt.miss.pred) <- miss.districtdt.miss.pred <- dt.miss.pred %>%rbindlist(idcol="district")dt.miss.pred <- dt.miss.pred[, .(district, date = ds %>% as.Date, miss.case.conf = yhat)]``````{r}dt.inc <- dt.miss.pred[dt.inc, on=c("district", "date")]dt.inc[is.na(case.conf), case.conf := miss.case.conf]```Certaines valeurs prédites par le modèle étant négatives, nous leurs avons attribué la valeur 0.```{r}#dt.inc$miss.case.conf %>% histdt.inc[miss.case.conf <0, case.conf :=0]```### Population dataLes données de populations utilisées sont :- Les données de population par région pour les années 2016 à 2024 proviennent des "Projections démographiques et estimations des cibles prioritaires des différents programmes et interventions de santé, 2016" du Ministère de la Santé Publique du Cameroun.- Les données de population par district pour les années 2020, 2023 and 2024 proviennent des "Populations cibles prioritaires" du Ministère de la Santé Publique du Cameroun.```{r}dt.pop <-fread("data/raw/population/population.csv")dt.pop.proj <-fread("data/raw/population/population_projection.csv")```Ici, nous calculons la différence entre les deux sources pour les années 2020, 2023 et 2024:```{r}dt.check <- dt.pop[, .(pop = pop %>% sum), by=.(region, year)]dt.check <- dt.check[dt.pop.proj, on=c("region", "year")]dt.check[, err := (pop - pop_proj) / pop]dt.check[!is.na(err)]%>% kable %>% kable_styling```Nous constatons une erreur de moins de 5% pour chaque année entre les deux sources.Pour l'année 2015, nous avons estimé la population par un régression linéaire simple en se basant sur les données de projection par région de 2016 à 2024:```{r pop-projection-model}ggplot(dt.pop.proj, aes(year, pop_proj, color = region)) +geom_point() +geom_smooth(method = lm, se = T) +ylab("Projected population")```Résultat du modèle d'estimation pour la région Extrême Nord :```{r}lm.ext.nord <-lm(pop_proj ~ year, data=dt.pop.proj[region =="Region Extreme Nord"])lm.ext.nord %>% tab_modeldt.pred <-data.table(year =2015)dt.pred[, "Region Extreme Nord":=predict(lm.ext.nord, newdata = dt.pred)]```Résultat du modèle d'estimation pour la région Nord :```{r}lm.nord <-lm(pop_proj ~ year, data=dt.pop.proj[region =="Region Nord"])lm.nord %>% tab_modeldt.pred[, "Region Nord":=predict(lm.nord, newdata = dt.pred)]``````{r}dt.pred <- dt.pred %>%melt(id.vars ="year",variable.name ="region",value.name ="pop_proj")``````{r}dt.pop.proj <-rbind(dt.pred, dt.pop.proj)```Ensuite, nous avons calculé la proportion médiane de population par district à partir des années 2020, 2023, 2024.```{r}pop.agg <- dt.pop[, .(tot = pop %>% sum), by=.(region, year)]dt.pop <- pop.agg[dt.pop, on=c("region", "year")]dt.pop[, prop := pop / tot]dt.pop.rep <- dt.pop %>%dcast(region + district ~ year, value.var="prop")dt.pop.rep[, prop.med :=apply(dt.pop.rep[, .(`2020`, `2023`, `2024`)], 1, median, na.rm=T)]#dt.pop.rep %>% kable %>% kable_styling```Ces proportions ont été utilisées pour calculer la population par district pour les autres années.```{r}dt.pop <- dt.pop.rep[, .(region, district, prop.med)][dt.pop.proj, on="region", allow.cartesian=T]dt.pop[, pop := pop_proj * prop.med]dt.pop <- dt.pop[, .(year, region, district, pop)]``````{r}#| label: tbl-estimated-population#| tbl-cap: Populations estimées par district et par année.dt.pop %>%dcast(region + district ~ year, value.var="pop") %>% .[, lapply(.SD, ceiling), by = .(region, district)] %>% kable %>% kable_styling``````{r}rm(dt.pop.rep, dt.pop.proj, lm.ext.nord, lm.nord, dt.pred, pop.agg)```### Environmental dataLes données proviennent de NASA/POWER CERES/MERRA2 et correspondent à des données mensuelles et annuelles par district.- Temperature de la surface terrestre (°C),- Vitesse du vent à 2 mètres (m/s),- Humidité du sol en surface (%),- Précipitation corrigée (mm/day).Pour obtenir les données par région, les valeurs des districts ont été moyennées excepté pour les précipitations où nous avons utilisé la formule suivante :$$Region\ precipitation = \displaystyle\sum (District\ precipitation * District\ area) / \displaystyle\sum District\ areas $$```{r}sheet_names <-excel_sheets("data/raw/Base des données Météorologique.xls") # Get sheet nameslist_all <-lapply(sheet_names, function(x) { # Read all sheets to listread_excel("data/raw/Base des données Météorologique.xls",sheet = x, skip=12) %>% as.data.table } )names(list_all) <- sheet_names # Rename list elementsdt.meteo <- list_all %>%rbindlist(idcol=T)rm(list_all)dt.meteo <- dt.meteo %>%melt(id.vars =c(".id", "PARAMETER", "YEAR"))dt.meteo <- dt.meteo %>%dcast(.id + YEAR + variable ~ PARAMETER, value.var ="value")names(dt.meteo) <-c("district", "year", "month", "wetn", "prec", "temp", "wind")``````{r}dt.meteo.dis.y <- dt.meteo[month =="ANN"]dt.meteo.dis.y$month <-NULLdt.meteo.dis.y <- dt.meteo.dis.y[, lapply(.SD, as.numeric), by=.(district, year)]``````{r}dt.meteo <- dt.meteo[month !="ANN"]dt.meteo[, month := month %>%factor(labels =1:12)]dt.meteo <- dt.meteo[, lapply(.SD, as.numeric), by=.(district, year, month)]``````{r}# We extract lat/lon for every sheetlat.lon <-lapply(sheet_names, function(x) { # Read all sheets to listread_excel("data/raw/Base des données Météorologique.xls",sheet = x, range ="A4", col_names = F) %>% as.data.table} )names(lat.lon) <- sheet_nameslat.lon <- lat.lon %>%rbindlist(idcol="district")lat.lon[, c("lat", "lon") :=`...1`%>%tstrsplit(split=" ", keep =c(4, 8))]lat.lon$...1<-NULL``````{r}# We extract elevation for every sheetelevation <-lapply(sheet_names, function(x) { # Read all sheets to listread_excel("data/raw/Base des données Météorologique.xls", sheet = x, range ="A5", col_names = F) %>% as.data.table} )names(elevation) <- sheet_nameselevation <- elevation %>%rbindlist(idcol="district")elevation[, elevation :=`...1`%>%tstrsplit(split=" ", keep =13)]elevation$...1<-NULL```### Geographic data```{r}ds.cam <-read_sf("data/raw/DS_Cam.shp")dt.area <- ds.cam %>% as.data.table %>% .[Region %in%c("Extreme Nord", "Nord"), .(region = Region, area = Area, district = Nom_DS) ]#dt.area[, region := sub("Nord", "North", region)]dt.area[, region :=paste("Region", region)]```### Final datasets4 jeux de données finaux ont été générés en fonction des niveaux d'aggrégation souhaités :- Data by district, year and month,```{r data-district-year-month}dt.dis.ym <- lat.lon[dt.meteo, on="district"]dt.dis.ym <- elevation[dt.dis.ym, on="district"]dt.dis.ym[, month := month %>% as.integer]dt.dis.ym <- dt.dis.ym[dt.inc, on=c("year", "month", "district")]dt.dis.ym <- dt.pop[dt.dis.ym, on=c("year", "region", "district")]dt.dis.ym <- dt.area[dt.dis.ym, on=c("region", "district")]dt.dis.ym[, prec.m3 := prec * area *1000]#rm(lat.lon, elevation, dt.meteo, dt.nord, dt.pop)```- Data by district and year,```{r data-district-year}dt.dis.y <- dt.dis.ym[,lapply(.SD, sum, na.rm=T), .SDcols =c("case.conf", "consult", "death"), by = .(region, district, year, area, elevation, lat, lon, pop) ]dt.dis.y <- dt.meteo.dis.y[dt.dis.y, on=c("district", "year")]dt.dis.y[, prec.m3 := prec * area *1000]```- Data by region, year and month,```{r data-region-year-month}dt.reg.ym <- dt.dis.ym[,.(pop = pop %>%sum(na.rm=T),case.conf = case.conf %>%sum(na.rm=T),consult = consult %>%sum(na.rm=T),death = death %>%sum(na.rm=T),area = area %>%sum(na.rm=T),prec.m3 = prec.m3 %>%sum(na.rm=T),wetn = wetn %>%mean(na.rm=T),wetn.sd = wetn %>%sd(na.rm=T),temp = temp %>%mean(na.rm=T),temp.sd = temp %>%sd(na.rm=T),wind = wind %>%mean(na.rm=T),wind.sd = wind %>%sd(na.rm=T)),by = .(region, year, month, date)]dt.reg.ym[, prec := prec.m3 / (area *1000)]# Add month namedt.reg.ym[, month.lab := month.name[dt.reg.ym$month]]```- Data by region and year```{r data-region-year}dt.pop.reg.y <- dt.pop[, .(pop = pop %>%sum(na.rm=T)), by=.(region, year)]dt.reg.y <- dt.dis.ym[,.(case.conf = case.conf %>%sum(na.rm=T),consult = consult %>%sum(na.rm=T),death = death %>%sum(na.rm=T)),by = .(region, year)]dt.reg.y <- dt.pop.reg.y[dt.reg.y, on=c("year", "region")]dt.meteo.reg.y <- dt.dis.y[, .(area = area %>%sum(na.rm=T),prec.m3 = prec.m3 %>%sum(na.rm=T),wetn = wetn %>%mean(na.rm=T),wetn.sd = wetn %>%sd(na.rm=T),temp = temp %>%mean(na.rm=T),temp.sd = temp %>%sd(na.rm=T),wind = wind %>%mean(na.rm=T),wind.sd = wind %>%sd(na.rm=T)),by=.(region, year)]dt.reg.y <- dt.meteo.reg.y[dt.reg.y, on=c("region", "year")]dt.reg.y[, prec := prec.m3 / (area *1000)]```#### Computing incidenceLa formule utilisée pour le calcul de l'incidence est :Incidence du paludisme = cas confirmés x 1000 / (population x temps)```{r}dt.dis.ym[, inc := case.conf *1000*12/ pop]dt.dis.y[, inc := case.conf *1000/ pop]dt.reg.ym[, inc := case.conf *1000*12/ pop]dt.reg.y[, inc := case.conf *1000/ pop]dt.reg.y[, c("inc.ci.inf", "inc.ci.sup") :=apply( dt.reg.y[, .(case.conf, pop, inc)], 1,function(x){prop.test(x[1], x[2])$conf.int *1000 }) %>% t %>% as.data.table %>%round(1)]dt.reg.y[, inc.lab :=paste(inc %>%round(1)," (", inc.ci.inf,"-", inc.ci.sup,")",sep="")]```#### Computing risk transmission```{r}int.labels <-c("Très faible transmission (< 100 cas)","Faible transmission (entre 100 et 250 cas)","Transmission modérée (entre 250 et 450 cas)","Forte transmission (> 450 cas)")dt.dis.ym[, int.trans := inc %>%cut(breaks =c(0, 100, 250, 450, max(inc, na.rm=T)),include.lowest = T,labels = int.labels )]dt.dis.y[, int.trans := inc %>%cut(breaks =c(0, 100, 250, 450, max(inc, na.rm=T)),include.lowest = T,labels = int.labels )]``````{r}dt.dis.ym %>%fwrite("data/final/data.district.year.month.csv")dt.dis.y %>%fwrite("data/final/data.district.year.csv")dt.reg.ym %>%fwrite("data/final/data.region.year.month.csv")dt.reg.y %>%fwrite("data/final/data.region.year.csv")```### ModelingNous avons tout d'abord cherché à décrire et mesurer la force de l'association entre l'incidence mensuelle du paludisme et les différentes variables météorologiques au niveau régional.```{r}# Data subset for North regiondt.dlnm.n <- dt.reg.ym[region=="Region Nord"]dt.dlnm.n[, pop := pop %>% ceiling %>% as.integer]# Data subset for Extreme North regiondt.dlnm.en <- dt.reg.ym[region=="Region Extreme Nord"]dt.dlnm.en[, pop := pop %>% ceiling %>% as.integer]```Nous avons ensuite utilisé les modèles non linéaires à décalage distribué (DLNM) [@package-dlnm]. Cette méthodologie repose sur une base croisée, c'est à dire un espace bidimensionnel qui spécifient les relations dans les dimensions du prédicteur et des décalages temporels (ici en mois). Afin d'établir cette base croisée, nous avons choisi une fonction spline cubique naturel pour chaque variable météorologique ainsi que pour les décalages temporels. Aucun noeud n'a été utilisé dans le paramétrage des splines. Le nombre de décalages a été fixé à 6 afin de mesurer l'effet des variables métérologiques dans les 6 mois précédant la survenue des cas de paludisme.```{r}# Crossbasis for north regioncb.prec.n <- dt.dlnm.n$prec %>%crossbasis(lag=6, argvar=list(fun="ns"), arglag=list(fun="ns"))cb.wetn.n <- dt.dlnm.n$wetn %>%crossbasis(lag=6, argvar=list(fun="ns"), arglag=list(fun="ns"))cb.temp.n <- dt.dlnm.n$temp %>%crossbasis(lag=6, argvar=list(fun="ns"), arglag=list(fun="ns"))cb.wind.n <- dt.dlnm.n$wind %>%crossbasis(lag=6, argvar=list(fun="ns"), arglag=list(fun="ns"))# Crossbasis for extreme north regioncb.prec.en <- dt.dlnm.en$prec %>%crossbasis(lag=6, argvar=list(fun="ns"), arglag=list(fun="ns"))cb.wetn.en <- dt.dlnm.en$wetn %>%crossbasis(lag=6, argvar=list(fun="ns"), arglag=list(fun="ns"))cb.temp.en <- dt.dlnm.en$temp %>%crossbasis(lag=6, argvar=list(fun="ns"), arglag=list(fun="ns"))cb.wind.en <- dt.dlnm.en$wind %>%crossbasis(lag=6, argvar=list(fun="ns"), arglag=list(fun="ns"))```Un modèle additif généralisé [@package-mgcv] de quasipoisson a été utilisé pour prendre en compte la surdispersion du nombre de cas. La variable explicative était le nombre de cas confirmés. Le logarithme de la population a été placé en offset. Un modèle a été construit pour chaque variable météorologique. La qualité des modèles a été présentée graphiquement à l'aide de la distribution des résidus et d'un q-q plot.```{r}# Models for north regiondlnm.n.prec <-gam(case.conf ~ cb.prec.n, offset=log(pop), data = dt.dlnm.n, family = quasipoisson, trace = F, maxit =100)dlnm.n.wetn <-gam(case.conf ~ cb.wetn.n, offset=log(pop), data = dt.dlnm.n, family = quasipoisson, trace = F, maxit =100)dlnm.n.temp <-gam(case.conf ~ cb.temp.n, offset=log(pop), data = dt.dlnm.n, family = quasipoisson, trace = F, maxit =100)dlnm.n.wind <-gam(case.conf ~ cb.wind.n, offset=log(pop), data = dt.dlnm.n, family = quasipoisson, trace = F, maxit =100)# Models for extreme north regiondlnm.en.prec <-gam(case.conf ~ cb.prec.en, offset=log(pop), data = dt.dlnm.en, family = quasipoisson, trace = F, maxit =100)dlnm.en.wetn <-gam(case.conf ~ cb.wetn.en, offset=log(pop), data = dt.dlnm.en, family = quasipoisson, trace = F, maxit =100)dlnm.en.temp <-gam(case.conf ~ cb.temp.en, offset=log(pop), data = dt.dlnm.en, family = quasipoisson, trace = F, maxit =100)dlnm.en.wind <-gam(case.conf ~ cb.wind.en, offset=log(pop), data = dt.dlnm.en, family = quasipoisson, trace = F, maxit =100)``````{r model-check, eval=F, echo=F}dlnm.n.prec %>% summarydlnm.n.prec %>% gam.checkdlnm.n.wetn %>% summarydlnm.n.wetn %>% gam.checkdlnm.n.temp %>% summarydlnm.n.temp %>% gam.checkdlnm.n.wind %>% summarydlnm.n.wind %>% gam.checkdlnm.en.prec %>% summarydlnm.en.prec %>% gam.checkdlnm.en.wetn %>% summarydlnm.en.wetn %>% gam.checkdlnm.en.temp %>% summarydlnm.en.temp %>% gam.checkdlnm.en.wind %>% summarydlnm.en.wind %>% gam.check```Le DLNM nous a permis d'obtenir les risques relatifs de paludisme en fonction des décalages temporels et des valeurs prises par les variables météorologiques. Les intervalles de confiance à 95% des risques relatifs sont également représentés. Un risque relatif strictement supérieur à 1 correspond à une probabilité plus importante de développer le paludisme dans des conditions données par rapport à une situation de référence. Les valeurs de référence d'exposition, pour les effets prédits par le DLNM, sont présentés dans le tableau ci-dessous. Le choix des valeurs de référence n'affecte pas l'adéquation du modèle et différentes valeurs peuvent être retenues en fonction des hypothèses de l'étude. Nous avons décidé de prendre comme valeurs de référence (@tbl-reference-values) des valeurs observées lors de la saison non épidémique (mois où l'incidence diminue). Les effets des décalages temporels des variables météorologiques sur le risque relatif seront ensuites analysés pour des valeurs observées lors des mois d'avril à juin, mois qui précèdent le retour de la saison épidémique (augmentation des cas).```{r}#| label: tbl-reference-values#| tbl-cap: "Reference values for meteorological factors."dt.cen.val <-data.table(Variable =c("Precipitations (mm/day)", "Soil Wetness (%)", "Temperature (°C)", "Wind (m/s)"),`North`=c(0, 20, 32, 3),`Extreme North`=c(0, 20, 32, 3))dt.cen.val %>% kable %>% kable_styling %>%add_header_above(c("", "Reference values"=2))``````{r}pred.n.prec <-crosspred(cb.prec.n, dlnm.n.prec, cumul=T, cen=0, by=0.5)pred.n.wetn <-crosspred(cb.wetn.n, dlnm.n.wetn, cumul=T, cen=0.2, by=0.1)pred.n.temp <-crosspred(cb.temp.n, dlnm.n.temp, cumul=T, cen=33)pred.n.wind <-crosspred(cb.wind.n, dlnm.n.wind, cumul=T, cen=3, by=0.1)pred.en.prec <-crosspred(cb.prec.en, dlnm.en.prec, cumul=T, cen=0, by=0.5)pred.en.wetn <-crosspred(cb.wetn.en, dlnm.en.wetn, cumul=T, cen=0.2, by=0.1)pred.en.temp <-crosspred(cb.temp.en, dlnm.en.temp, cumul=T, cen=32)pred.en.wind <-crosspred(cb.wind.en, dlnm.en.wind, cumul=T, cen=3, by=0.1)``````{r get-rr-overall}# Get overall RRdt.rr.all <-lapply(list(pred.n.prec, pred.n.wetn, pred.n.temp, pred.n.wind, pred.en.prec, pred.en.wetn, pred.en.temp, pred.en.wind),function(x){data.table(value = x$allRRfit %>% names %>% as.numeric,RRfit = x$allRRfit,RRlow = x$allRRlow,RRhigh = x$allRRhigh ) %>%round(1) })names(dt.rr.all) <-c("pred.n.prec", "pred.n.wetn", "pred.n.temp", "pred.n.wind","pred.en.prec", "pred.en.wetn", "pred.en.temp", "pred.en.wind")dt.rr.all <- dt.rr.all %>%rbindlist(idcol="model") %>% .[, RR :=paste(RRfit, " (", RRlow, "-", RRhigh, ")", sep="")]``````{r get-rr-lag}# Get lag-specific RRx <-c("Precipitation (mm/day)"="2","Soil surface wetness (%)"="0.4","Temperature (°C)"="26","Wind (m/s)"="2")dt.rr.n <-mapply(function(x, y){list(data.table(RRfit =c(y$matRRfit[x,], y$cumRRfit[x,]), RRlow =c(y$matRRlow[x,], y$cumRRlow[x,]),RRhigh =c(y$matRRhigh[x,], y$cumRRhigh[x,]) ) %>%round(2) %>% .[, Lag :=paste("Lag", 0:6) %>%rep(each =2)] %>% .[, effect :=c("Lag-specific", "Cumulative lag-specific") %>%rep(7)] )},x = x,y =list(pred.n.prec, pred.n.wetn, pred.n.temp, pred.n.wind)) %>%rbindlist(idcol="variable") %>% .[, region :="Region Nord"]dt.rr.en <-mapply(function(x, y){list(data.table(RRfit =c(y$matRRfit[x,], y$cumRRfit[x,]), RRlow =c(y$matRRlow[x,], y$cumRRlow[x,]),RRhigh =c(y$matRRhigh[x,], y$cumRRhigh[x,]) ) %>%round(2) %>% .[, Lag :=paste("Lag", 0:6) %>%rep(each =2)] %>% .[, effect :=c("Lag-specific", "Cumulative lag-specific") %>%rep(7)] )},x = x,y =list(pred.en.prec, pred.en.wetn, pred.en.temp, pred.en.wind)) %>%rbindlist(idcol="variable") %>% .[, region :="Region Extreme Nord"]dt.rr.lag <-rbind(dt.rr.n, dt.rr.en)dt.rr.lag[, RR :=paste(RRfit, " (", RRlow, "-", RRhigh, ")", sep="")]rm(dt.rr.n, dt.rr.en)dt.rr.lag.max <- dt.rr.lag[order(RRfit)][effect =="Cumulative lag-specific" , lapply(.SD, tail, 1), by=.(region, variable)]```### SoftwareToutes les analyses statistiques ont été effectuées avec le logiciel `r version$version.string`[@R].## Results### Spatio-temporal dynamics of incidence```{r}tot.case.conf <- dt.reg.y[, .(inc = case.conf %>% sum %>%format(big.mark=","))]region.summary <- dt.reg.y[, .(tot.pop = pop %>% sum,tot.case.conf = case.conf %>% sum,mean.case.conf = case.conf %>% mean,sd.case.conf = case.conf %>% sd,min.inc.lab = inc.lab[which.min(inc)],max.inc.lab = inc.lab[which.max(inc)]),by=region]#region.summary[, prop := (tot.case.conf *100 / sum(tot.case.conf)) %>% round(1)]region.summary <- region.summary[, lapply(.SD, format, big.mark=","), by=.(region, min.inc.lab, max.inc.lab)]```Un total de `r tot.case.conf$inc` cas de paludisme ont été enregistrés pour les deux régions sur la période de l'étude. De 2015 à 2018, l'incidence était plus élevée dans la région Nord que dans la région Extrême Nord, tendance qui s'est inversée à partir de 2019 (@fig-yearly-incidence). L'incidence maximale enregistrée était de `r region.summary[region=="Region Nord"]$max.inc.lab` pour 1000 personnes-années sur la région Nord et de `r region.summary[region=="Region Extreme Nord"]$max.inc.lab`sur la région Extreme Nord. L'incidence minimale était de `r region.summary[region=="Region Nord"]$min.inc.lab` et `r region.summary[region=="Region Extreme Nord"]$min.inc.lab` pour 1000 personnes-années sur la région Nord et Extreme Nord respectivement.```{r}#| label: fig-yearly-incidence#| fig-cap: "Evolution de l'incidence sur les deux régions de 2015 à 2022."dt.reg.y %>%ggplot() +geom_line(aes(x=year, y=inc, color=region)) +ylab("Incidence (1000 person-year)")```L’évolution des incidences mensuelles (@fig-monthly-incidence) montre une augmentation des cas de paludisme de juillet à octobre puis une diminution d'octobre à mai-juin. En saison de haute épidémie, l'incidence dépasse les 200 personnes-année sur la région Extreme Nord alors qu'elle reste majoritairement comprise entre 100 et 200 personnes-année sur la région Nord.```{r}#| label: fig-monthly-incidence#| fig-cap: "Monthly incidence of malaria, North and Extreme North, Cameroon, 2015-2022."dt.reg.ym %>%ggplot(aes(x=month %>% as.factor, y=inc)) +geom_boxplot(color='#CD4F39') +ylab("Incidence (1000 person-year)") +xlab("Month") +facet_grid(~region)```Conformément aux recommandations de l'OMS, l'incidence du paludisme pour 1 000 personnes-année de 2015 à 2022 a été classée en 4 catégories d'intensité de transmission (@tbl-transmission-intensity-district-number) :```{r}#| label: tbl-transmission-intensity-district-number#| tbl-cap: "Nombre de districts de santé par intensité de transmission selon l'année et la région."dt.dis.y %>%tbl_strata(strata = region,.tbl_fun =~ .x %>%tbl_summary(include ="year",by = int.trans,type = year ~"categorical",percent ="row",#statistic = list(# all_categorical() ~ "{n} / {N} ({p}%)"#),missing ="ifany" ) %>%add_overall(last = T) ) %>%modify_header(label ~"")```Sur la région Nord, on constate qu'au moins 80% des districts de santé possèdent une très faible ou faible transmission du paludisme chaque année et qu'aucun district ne montre de forte transmission. Le nombre de districts ayant un très faible transmission augmentait depuis 2015 mais tend à diminuer depuis 2020 au profit d'un risque de transmission faible. Sur la région Extrême-nord, le nombre de districts à très faible transmission diminue depuis 2017 tandis que celui à transmission modérée augmente. De plus, en 2021, 3 districts (Koza, Mokolo et Moutourwa) montraient une forte transmission contre au maximum 1 sur les autres années (Gazawa de 2015 à 2019 et Koza en 2022). La @fig-transmission-intensity-maps ci-dessous montre la distribution géographique de la transmission du paludisme en fonction des années et des districts de santé. On remarque que les zones de transmission modérée et forte sont principalement situées dans la partie sud de la région Extrême Nord.```{r}ds.cam <-inner_join(ds.cam, dt.dis.y, by=c("Nom_DS"="district"))levels(ds.cam$int.trans) <-c("Très faible\n(< 100 cas)","Faible\n(entre 100 et 250 cas)","Modérée\n(entre 250 et 450 cas)","Forte\n(> 450 cas)")``````{r, out.width="100%"}#| label: fig-transmission-intensity-maps#| fig-cap: "Intensité de transmission du paludisme par district de santé sur les régions Nord et Extrême Nord du Cameroun de 2015 à 2022."ggplot() +geom_sf(data = ds.cam, aes(geometry = geometry, fill=int.trans)) +scale_fill_manual(values=c("white", "green3", "orange", "red")) +facet_wrap( ~ year, ncol=4) +labs(fill='Intensité de transmission\n(pour 1000 personnes-années)')+theme(#axis.ticks=element_blank(),#axis.text.x=element_blank(),#axis.text.y=element_blank(),axis.text.x=element_text(size=5),axis.text.y=element_text(size=5),panel.background=element_rect(fill ="white"),legend.position ="bottom",legend.title =element_text(size=8), #change legend title font sizelegend.text =element_text(size=8) #change legend text font size#legend.key.size = unit(0.2, 'cm') ) +guides(color=guide_legend(nrow=2, byrow=TRUE)) +annotation_scale(location ="bl", width_hint =0.1) +annotation_north_arrow(location ="tl", which_north ="true",height =unit(0.5, "cm"),width =unit(0.5, "cm"),pad_x =unit(0, "in"), pad_y =unit(0.1, "in"),style =north_arrow_nautical(text_size =5))```### Relation between incidence and meteorological factorsL'analyse descriptive des séries chronologiques de l'incidence mensuelle du paludisme et des variables météorologiques a montré une saisonnalité typique, avec un décalage entre les cas de paludisme et la pluviométrie dans les deux régions (See @fig-time-series).```{r out.width="100%"}#| label: fig-time-series#| fig-cap: "Séries chronologiques de l'incidence du paludisme et des variables météorologiques, Nord et Extrême-nord, 2015-2022."ggplot(dt.reg.ym, aes(x = date)) +#geom_col(aes(y = prec), color="blue") +geom_step(aes(y = prec*10, color="Precipitation (mm/day)")) +geom_line(aes(y = inc, color="Incidence (1000 person-year)"), linewidth=1) +geom_line(aes(y = wetn*1000, color="Surface soil wetness (%)"), linetype ="dotted") +geom_line(aes(y = temp*10, color="Temperature (°C)")) +geom_line(aes(y = wind*100, color="Wind speed (dm/s)")) +scale_x_date(date_breaks ="1 year", date_labels ="%Y", date_minor_breaks ="3 months") +scale_y_continuous(# Features of the first axisname ="Incidence (1000 person-year)",# Add a second axis and specify its featuressec.axis =sec_axis(transform=~.*0.1, name="Scale for meteorological factors") ) +scale_color_manual(name='',breaks=c('Incidence (1000 person-year)','Precipitation (mm/day)','Surface soil wetness (%)','Temperature (°C)','Wind speed (dm/s)'),values=c('Incidence (1000 person-year)'='#CD4F39','Precipitation (mm/day)'='blue','Surface soil wetness (%)'='#1b98e0','Temperature (°C)'='green3','Wind speed (dm/s)'='orange')) +theme(panel.background=element_rect(fill ="white"),legend.position ="bottom",legend.key =element_rect(fill ="white"),#legend.box="vertical",#legend.margin=margin() ) +guides(color=guide_legend(nrow=2, byrow=TRUE)) +facet_wrap(region ~ ., nrow=2)```#### Precipitation and incidenceL’évolution des incidences mensuelles du paludisme (@fig-monthly-incidence) et des précipitations mensuelles (@fig-monthly-precipitation) montre une augmentation des cas de paludisme de juillet à octobre tandis que les précipitations augmentent principalement d'avril à août ce qui suggérerait un décalage d'environ 3-4 mois entre le début de l'augmentation des précipitations et le début de l'augmentation de l'incidence du paludisme dans les deux régions.```{r}#| label: fig-monthly-precipitation#| fig-cap: "Monthly precipitation, North and Extreme North, Cameroon, 2015-2022."dt.reg.ym %>%ggplot(aes(x=month %>% as.factor, y=prec)) +geom_boxplot(color="blue") +ylab("Precipitation (mm/day)") +xlab("Month") +facet_grid(~region)``````{r, out.width="100%", out.height="50%"}#| label: fig-precipitation-overall#| fig-cap: "Overall effect of precipitation on malaria incidence, with reference at 0 mm/day. North and Extreme North, Cameroon, 2015-2022."par(mfrow =c(1,2))pred.n.prec %>%plot("overall", col=2, xlab="Precipitation (mm/day)", ylab="RR", main="North", exp=T)pred.en.prec %>%plot("overall", col=2, xlab="Precipitation (mm/day)", ylab="RR", main="Extreme North", exp=T, ylim=c(1, 12))#pred.en.prec %>% plot("overall", col=2, xlab="Precipitation (mm/day)", ylab="RR", main="Extreme North", exp=T)```Les graphiques ci-dessus montrent l'augmentation exponentielle du risque relatif de l'incidence du paludisme avec l'augmentation des précipitations sur les deux régions. Dès 1 mm/jour de précipitations le risque relatif est de `r dt.rr.all[model == "pred.n.prec" & value==1]$RR` sur la région Nord et `r dt.rr.all[model == "pred.en.prec" & value==1]$RR` sur la région Extreme Nord. En milieu de saison des pluies, lorsque 6 mm/jour sont observés, le risque relatif atteint `r dt.rr.all[model == "pred.n.prec" & value==6]$RR` sur la région Nord et `r dt.rr.all[model == "pred.en.prec" & value==6]$RR` sur la région Extreme Nord.```{r, out.width="100%", out.height="50%"}#| label: fig-precipitation-lag#| fig-cap: Cumulative lag-specific effect (top) and lag-specific effect (bottom) on relative risk of malaria incidence at 2 mm/day of precipitation, with reference at 0 mm/day. North and Extreme North, Cameroon, 2015-2022.par(mfrow =c(2,2))pred.n.prec %>%plot("slices", var=2, col=2, cumul=T, ylab="RR", main="North", exp=T, ylim=c(1, 2.5))pred.en.prec %>%plot("slices", var=2, col=2, cumul=T, ylab="RR", main="Extreme North", exp=T, ylim=c(1, 2.5))pred.n.prec %>%plot("slices", var=2, col=2, cumul=F, ylab="RR", main="North", exp=T, ylim=c(1, 1.2))pred.en.prec %>%plot("slices", var=2, col=2, cumul=F, ylab="RR", main="Extreme North", exp=T, ylim=c(1, 1.2))```Les graphiques du haut correspondent à une situation de début de saison des pluies, où 2 mm/jour de précipitations sont cumulées sur plusieurs mois consécutifs. Dès le premier mois où 2 mm/jour de pluies sont observées, le risque relatif est de `r dt.rr.lag[variable == "Precipitation (mm/day)" & region=="Region Nord" & effect=="Cumulative lag-specific" & Lag == "Lag 0"]$RR` et augmente pendant les 6 prochains mois pour atteindre `r dt.rr.lag[variable == "Precipitation (mm/day)" & region=="Region Nord" & effect=="Cumulative lag-specific" & Lag == "Lag 6"]$RR`. Les graphiques du bas correspondent à une situation de fin de saison des pluies où les précipitations s'estompent au cours du temps. On y observe une diminution du risque relatif qui devient égal à un 5 mois après l'arrêt des pluies sur la région Nord et sur la région Extreme Nord.#### Soil Surface Wetness and incidence```{r}#| label: fig-monthly-wetness#| fig-cap: "Monthly surface soil wetness, North and Extreme North, Cameroon, 2015-2022."dt.reg.ym %>%ggplot(aes(x=month %>% as.factor, y=wetn)) +geom_boxplot(color="#1b98e0") +ylab("Surface soil wetness (%)") +xlab("Month") +facet_grid(~region)``````{r, out.width="100%", out.height="50%"}#| label: fig-wetness-overall#| fig-cap: "Overall effect of soil wetness on malaria incidence, with reference at 20%. North and Extreme North, Cameroon, 2015-2022."par(mfrow =c(1,2))pred.n.wetn %>%plot("overall", col=2, xlab="Surface Soil Wetness (%)", ylab="RR", main="North", exp=T, ylim=c(1, 5))pred.en.wetn %>%plot("overall", col=2, xlab="Surface Soil Wetness (%)", ylab="RR", main="Extreme North", exp=T, ylim=c(1, 5))```Les graphiques ci-dessus montrent l'augmentation exponentielle du risque relatif de l'incidence du paludisme avec l'augmentation de l'humidité du sol sur les deux régions. Cette relation est similaire à celle observée pour les précipitations. En milieu de saison des pluies, où une humidité de 70% est observée, le risque relatif peut atteindre `r dt.rr.all[model == "pred.n.wetn" & value == 0.7]$RR` sur la région Nord et `r dt.rr.all[model == "pred.en.wetn" & value==0.7]$RR` sur la région Extreme Nord.```{r, out.width="100%", out.height="50%"}#| label: fig-wetness-lag#| fig-cap: "Cumulative Lag-specific effect (top) and lag-specific effect (bottom) on relative risk of malaria incidence at 40% of soil wetness, with reference at 20%. North and Extreme North, Cameroon, 2015-2022."par(mfrow =c(2,2))pred.n.wetn %>%plot("slices", var=0.4, col=2, cumul=T, ylab="RR", main="North", exp=T, ylim=c(1, 2.3))pred.en.wetn %>%plot("slices", var=0.4, col=2, cumul=T, ylab="RR", main="Extreme North", exp=T, ylim=c(1, 2.3))pred.n.wetn %>%plot("slices", var=0.4, col=2, cumul=F, ylab="RR", main="North", exp=T, ylim=c(0.9, 1.3))pred.en.wetn %>%plot("slices", var=0.4, col=2, cumul=F, ylab="RR", main="Extreme North", exp=T, ylim=c(0.9, 1.3))```Dès que l'humidité du sol atteint 40% sur plusieurs mois consécutif (début de saison des pluies), on observe l'augmentation du risque relatif sur les 5 prochains mois (graphiques du haut) et ce dès le premier mois où 40% d'humidité est observé. Le risque relatif atteint son maximum de `r dt.rr.lag.max[variable == "Soil surface wetness (%)" & region=="Region Nord"]$RR` au bout de 5 mois sur la région Nord et de `r dt.rr.lag.max[variable == "Soil surface wetness (%)" & region=="Region Extreme Nord"]$RR` au bout de 5 mois sur la région Extreme Nord. En saison sèche, lorsque une humidité du sol de 40% n'est plus observée au fil des mois, on observe une diminution du risque relatif (graphiques du bas). Le risque relatif devient égal à 1 après 3 mois sur les deux régions.#### Temperature and incidence```{r}#| label: fig-monthly-temperature#| fig-cap: "Monthly temperature, North and Extreme North, Cameroon, 2015-2022."dt.reg.ym %>%ggplot(aes(x=month %>% as.factor, y=temp)) +geom_boxplot(color="green3") +ylab("Temperature (°C)") +xlab("Month") +facet_grid(~region)``````{r, out.width="100%", out.height="50%"}#| label: fig-temperature-overall#| fig-cap: "Overall effect of temperature on malaria incidence, with reference at 32°C. North and Extreme North, Cameroon, 2015-2022."par(mfrow =c(1,2))pred.n.temp %>%plot("overall", col=2, xlab="Temperature (°C)", ylab="RR", main="North", exp=T, ylim=c(0.5, 2))pred.en.temp %>%plot("overall", col=2, xlab="Temperature (°C)", ylab="RR", main="Extreme North", exp=T, ylim=c(0.5, 2))```La @fig-temperature-overall montre un effet global significatif de la température sur le risque relatif d'incidence pour la région Extrême Nord où le risque de transmission augmente en même temps que la température. Cet effet n'est cependant pas observé sur la région Nord.```{r, out.width="100%", out.height="50%"}#| label: fig-temperature-lag#| fig-cap: "Cumulative lag-specific effect (top) and lag-specific effect (bottom) on relative risk of malaria incidence at 26°C of temperature, with reference at 32°C. North and Extreme North, Cameroon, 2015-2022."par(mfrow =c(2,2))pred.n.temp %>%plot("slices", var="26", col=2, cumul=T, ylab="RR", main="North", exp=T, ylim=c(0.6, 2.2))pred.en.temp %>%plot("slices", var="26", col=2, cumul=T, ylab="RR", main="Extreme North", exp=T, ylim=c(0.6, 2.2))pred.n.temp %>%plot("slices", var="26", col=2, cumul=F, ylab="RR", main="North", exp=T, ylim=c(0.8, 1.5))pred.en.temp %>%plot("slices", var="26", col=2, cumul=F, ylab="RR", main="Extreme North", exp=T, ylim=c(0.8, 1.5))```Lorsque la température descend à 26°C sur plusieurs mois consécutif (graphiques du haut), le risque relatif est strictement supérieur à 1 pendant 4 mois avec un maximum de `r dt.rr.lag.max[variable == "Temperature (°C)" & region=="Region Nord"]$RR` au 3ème mois sur la région Nord. Pour la région Extreme Nord, le risque relatif est strictement supérieur à 1 pendant 3 mois et atteint son maximum de `r dt.rr.lag.max[variable == "Temperature (°C)" & region=="Region Extreme Nord"]$RR` au 2ème mois. Une fois que les températures redeviennent supérieures à 26°C, le risque relatif diminue pour atteindre 1 après 2 mois sur la région Nord et après 1 mois sur la région Extreme Nord.#### Wind and incidence```{r}#| label: fig-monthly-wind#| fig-cap: "Monthly wind speed, North and Extreme North, Cameroon, 2015-2022."dt.reg.ym %>%ggplot(aes(x=month %>% as.factor, y=wind)) +geom_boxplot(color="orange") +ylab("Wind speed (dm/s)") +xlab("Month") +facet_grid(~region)``````{r, out.width="100%", out.height="50%"}#| label: fig-wind-overall#| fig-cap: "Overall effect of wind on malaria incidence, with reference at 3 m/s. North and Extreme North, Cameroon, 2015-2022."par(mfrow =c(1,2))pred.n.wind %>%plot("overall", col=2, xlab="Wind speed (m/s)", ylab="RR", main="North", exp=T, ylim=c(0.5, 5))pred.en.wind %>%plot("overall", col=2, xlab="Wind speed (m/s)", ylab="RR", main="Extreme North", exp=T, ylim=c(0.5, 5))```Les graphiques ci-dessus montrent la diminution exponentielle du risque relatif de l'incidence du paludisme avec l'augmentation de la vitesse du vent sur les deux régions. Globalement, le risque relatif est supérieur à 1 dès que la vitesse du vent devient inférieur à 3 m/s.```{r, out.width="100%", out.height="50%"}#| label: fig-wind-lag#| fig-cap: "Cumulative lag-specific effect (top) and lag-specific effect (bottom) on relative risk of malaria incidence at 1.5 m/s of wind, with reference at 3 m/s. North and Extreme North, Cameroon, 2015-2022."par(mfrow =c(2,2))pred.n.wind %>%plot("slices", var="2", col=2, cumul=T, ylab="RR", main="North", exp=T, ylim=c(1, 4))pred.en.wind %>%plot("slices", var="2", col=2, cumul=T, ylab="RR", main="Extreme North", exp=T, ylim=c(1, 4))pred.n.wind %>%plot("slices", var="2", col=2, cumul=F, ylab="RR", main="North", exp=T, ylim=c(0.9, 1.5))pred.en.wind %>%plot("slices", var="2", col=2, cumul=F, ylab="RR", main="Extreme North", exp=T, ylim=c(0.9, 1.5))```Quand une vitesse du vent de 2 m/s est observée sur plusieurs mois consécutif (saison des pluies), on observe l'augmentation du risque relatif sur les 5 prochains mois (graphiques du haut) et ce dès le premier mois où cette vitesse est observée. Le risque relatif atteint son maximum au bout de 5 mois, `r dt.rr.lag.max[variable == "Wind (m/s)" & region=="Region Nord"]$RR` pour le Nord et `r dt.rr.lag.max[variable == "Wind (m/s)" & region=="Region Extreme Nord"]$RR` pour l'Extreme Nord. Quand la saison sèche recommence et que la vitesse du vent ne diminue plus en-dessous de 2 m/s au fil des mois, on observe une diminution du risque relatif (graphiques du bas). Le risque relatif n'est plus strictement supérieur à 1 après 4 mois sur les deux régions.## Appendices### Missing case data```{r}#| label: tbl-completeness-district#| tbl-cap: "Nombre de mois manquants par année et par district."dt.inc %>%dcast(district ~ year, value.var="case.conf", fun.agg =function(x){x %>% is.na %>% sum}) %>% kable %>% kable_styling```### Incidence and meterological data per region and year```{r}#| label: tbl-variable-description#| tbl-cap: "Données du paludisme et des variables météorologiques par région et par année."dt.temp <- dt.reg.ydt.temp <- dt.temp[, lapply(.SD, round, 2), by=.(region, year, inc.lab)]dt.temp[, "Incidence (1000 person-year)":= inc.lab]dt.temp[, "Precipitation (mm/day)":= prec]dt.temp[, "Soil wetness (%)":=paste(wetn *100, " (", wetn.sd, ")", sep="")]dt.temp[, "Temperature (°C)":=paste(temp, " (", temp.sd, ")", sep="")]dt.temp[, "Wind (m/s)":=paste(wind, " (", wind.sd, ")", sep="")]keep.var <-c("Incidence (1000 person-year)", "Precipitation (mm/day)", "Soil wetness (%)", "Temperature (°C)", "Wind (m/s)")cbind( dt.temp[region=="Region Nord", c("year", ..keep.var), with=F], dt.temp[region=="Region Extreme Nord", ..keep.var]) %>% kable %>% kable_styling %>%add_header_above(c(" ", "North"=5, "Extreme North"=5))```### Models quality```{r}<<model-check>>```### RR summary#### Overall effect```{r}#| label: tbl-overall-rr#| tbl-cap: "Relative risk for overall effects."dt.rr.all[, c("region", "variable") :=tstrsplit(model, ".", keep=2:3, fixed=T)]dt.rr.all[, region :=ifelse(region =="n", "Nord", "Extreme Nord")]dt.rr.all[, variable := variable %>%factor(labels =c("Precipitation (mm/day)","Soil surface wetness (%)","Temperature (°C)","Wind (m/s)"))]dt.rr.all[, .(region, variable, value, RR)] %>% kable %>% kable_styling```#### Lag-specific effect```{r}#| label: tbl-lag-specific-rr#| tbl-cap: "Relative risk for lag-specific effects."dt.rr.lag %>%dcast(region + variable + effect ~ Lag, value.var="RR") %>% .[order(variable, -region, effect)] %>% kable %>% kable_styling```## References::: {#refs entry-spacing="1"}:::