Climate sensitive infectious diseases are a subject of major concern in the context of a changing climate. Malaria is an infectious disease caused by parasites of the genus Plasmodium and transmitted by Anopheles mosquitoes (Boualam et al., 2021). Eradication efforts managed to achieve complete elimination of endemic circulation of malaria in Europe, although sporadic transmission events are frequently reported in travelers coming from endemic areas. Studies evaluating drivers of malaria elimination found that high socio-economic conditions and increased life expectancy are key determinants in keeping this disease out of the continent (Fischer et al., 2020). On the other hand, the risk of malaria resurgence is present as climatic conditions become more suitable for both the parasite and mosquitoes transmission (Zhao et al., 2016).
The Lancet Countdown in Europe collaboration was launched in 2021 with the purpose of using a variety of indicators to monitor trends in the impact of climate on dynamic of different health processes. As part of this initiative, the Climate Suitability for Malaria Transmission indicator was adapted from the Global Lancet Countdown Collaboration (Romanello et al., 2021) to track the annual number of months suitable of malaria transmission between 1950 and 2021.This indicator is a threshold based model that overlaps the climatic and environmental requirements of Anopheles mosquitoes and Plasmodium vivax, which was the endemic parasite in the continent until the mid 1970s (Boualam et al., 2021).
Although the CSIndicators
was initially developed for providing a set of tools useful in the context of agricultural practices, it is also possible to expand its applications to the computation of other type of indicators. In this vignette, the Climate Suitability for Malaria indicator will be computed using the TotalTimeExceedingThreshold()
function. The output will be an multidimensional array containing the number of months per year suitable for malaria transmission.
In addition to the CSIndicators
package, the CSTools
and s2dv
packages will be used for data extraction and visualization.
The number of months suitable for malaria transmission between 2010 and 2020 will be computed for the Iberian Peninsula.
The Malaria indicator is computed with climate variables extracted from the ERA5-Land reanalysis dataset (Muñoz-Sabater et al., 2021), which span between 1950 and present day, at a 9km resolution. These variables are 2 meter temperature (tas
), 2 meter dew point temperature (tdps
) and total precipitation (prlr
). These data are produced by the Copernicus service and extracted and reprocessed by the Earth Sciences department from the Barcelona Supercomputing Center.
The function CST_Load
from the CSTools
package allows the user to access the processed data and delivers the data in the form of an s2dv_cube
object. These multidimensional objects store data and metadata in several elements. For further information about these objects visit Data retrieval and storage.
CST_Load
has its requirements for extracting data. First, the path to the files is introduced using whitecards delimited by dollar signs. Second, the temporal extent and resolution of the output con be provided with sdates
, which takes a vector of all dates of interest. The spatial extent is inputted within lonmax
, lonmin
, latmax
and latmin.
# Path to file locations using whitecards
path_ERA5_CDS <- list(path='/esarchive/recon/ecmwf/era5land/$STORE_FREQ$_mean/$VAR_NAME$_f1h/$VAR_NAME$_$YEAR$$MONTH$.nc')
# Temporal extent and resolution:
# We will work with all months from 2010 to 2020
year_in <- 2010 # initial year
year_fi <- 2020 # last year
month_in <- 1 # first month
month_fi <- 12 # last month
sdates <- paste0(year_in:year_fi, '0101')
# Extract data
vars <- c('tas', 'tdps', 'prlr')
out <- NULL
for(var in vars){
out[[var]] <- CST_Load_s2dv(var = var,
exp = NULL, # We only require observed data
obs = list(path_ERA5_CDS),
sdates = sdates,
lonmax = 5, lonmin = 350,
latmax = 45, latmin = 35,
storefreq = 'monthly',
leadtimemin = month_in,
leadtimemax = month_fi,
output = "lonlat")
}
# library(zeallot)
# c(tas, tdps, prlr) %<-% CST_Load_s2dv(var = c('tas', 'tdps', 'prlr'),
# exp = NULL, # We only require observed data
# obs = list(path_ERA5_CDS),
# sdates = sdates,
# lonmax = 355, lonmin = 350,
# latmax = 45, latmin = 43,
# storefreq = 'monthly',
# leadtimemin = month_in,
# leadtimemax = month_fi,
# output = "lonlat")
The output object is a list with the three s2dv_cube
objects with dimensions
## dataset member sdate ftime lat lon
## 1 1 11 12 101 151
And it is possible to have a look at the data:
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 263.4 281.6 286.6 287.3 292.8 306.6 862224
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 276.88 276.76 276.54 276.40 276.31 276.28
## [2,] 276.71 276.71 276.60 276.52 276.42 276.31
## [3,] 276.60 276.57 276.48 276.45 276.44 276.34
## [4,] 276.68 276.54 276.31 276.21 276.27 276.36
## [5,] 276.50 276.58 276.59 276.44 276.31 276.26
## [6,] 275.59 275.96 276.36 276.30 276.06 275.81
First, it is necessary to transform units from Kelvin (K) to Degrees Celsius (C)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -9.7 8.5 13.5 14.1 19.7 33.5 862224
Then, it is possible to calculate relative humidity (hurs) using temperature (\(T\)) and dew point temperature (\(T_d\)) with the August-Roche-Magnus equation (Alduchov 1996):
\[ RH=100*\frac{exp(\frac{aT_d}{b+T_d})}{exp(\frac{aT}{c+T})} \] Where a and b are the coefficients 17.625 and 243.04, respectively.
# Create a new s2dv object with relative humidity
out$hurs <- s2dv_cube(data=100*(exp((17.625*out$tdps$data)/(243.04+out$tdps$data)) /
exp((17.625*out$tas$data) / (243.04+out$tas$data))),
lon=out$tas$lon,
lat=out$tas$lat,
Variable=list(varName="rh", level=NULL),
Dates=out$tas$Dates,
Datasets=out$tas$Datasets,
when=Sys.time(),
source_files="see source files of tas, tdps and pr")
attr(out$hurs$Variable, "units") <- "%"
attr(out$hurs$Variable, "longname") <- "near-surface relative humidity"
summary(out$hurs$data)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 19.4 55.7 68.5 65.4 77.1 95.0 862224
Precipitation is extracted from the hourly reanalaysis dataset and delivered in monthly meters per second. The next step is to transform it into accumulated mm per month
# To compute the accumulated precipitation per month it is necessary to multiply by:
# - total number of seconds in one hour: 3600
# - total number of hours in a day: 24
# - average number of days in a month: 365.25/12=30.44
# - change factor from meter to mm: 1000
out$prlr$data <- out$prlr$data*3600*24*30.44*1000
summary(out$prlr$data)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.0 20.1 47.5 59.9 83.9 622.2 862224
The suitability for malaria transmission indicator estimates the number of months suitable for transmission of P. vivax according to the following thresholds:
# Create a new s2dv object with malaria suitability
out$malariaSuit <- s2dv_cube(data=ifelse(out$tas$data >= 14.5 &
out$tas$data <= 33 &
out$hurs$data >= 60 &
out$prlr$data >= 80, 1, 0),
lon=out$tas$lon,
lat=out$tas$lat,
Variable=list(varName="malar_suit", level=NULL),
Dates=out$tas$Dates,
Datasets=out$tas$Datasets,
when=Sys.time(),
source_files="see source files of tas, tdps and pr")
attr(out$malariaSuit$Variable, "units") <- "none"
attr(out$malariaSuit$Variable, "longname") <- "suitability for malaria transmission"
# Compute number of number of months per year that are suitable
# (i.e. suitability = 1)
malariaInd <- CSIndicators::CST_TotalTimeExceedingThreshold(out$malariaSuit,
threshold=0.5)
# Sneak peek of the data
malariaInd$data[1,1,1,,][15:20, 15:20]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0 0 0 0 0 1
## [2,] 0 0 0 0 0 0
## [3,] 0 0 0 0 0 0
## [4,] 0 0 0 0 0 0
## [5,] 1 0 0 0 0 0
## [6,] 1 1 1 1 1 0
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.00 0.00 0.00 0.63 1.00 6.00 71852
Using the function PlotEquiMap()
from the s2dv
package, it is possible to have a visual inspection of the number of suitable months of a particular year. In this, the first and last years of the time series.
PlotLayout(PlotEquiMap, c('lat', 'lon'),
var=malariaInd$data[1,1,c(1,dim(malariaInd$data)[[3]]),,],
nrow=1, ncol=2,
lon=malariaInd$lon,
lat=malariaInd$lat,
filled.continents=FALSE,
brks=seq(0, 12, by=1),
toptitle="Number of months per year suitable for malaria transmission in the Iberian Peninsula",
titles=c(as.character(year_in), as.character(year_fi)),
title_scale=0.4,
coast_width=2,
filled.oceans=TRUE,
country.borders=TRUE,
intylat=1,
intxlon=1)
The annual mean number of months suitable for malaria transmission can be extracted with the MeanDims()
function from the s2dv
package. Then, a plot can be created with functions from the dplyr
and ggplot2
packages. Additionally, the ggplot()
function allows the user to compute a linear trend in the data.
library(dplyr)
library(ggplot2)
data.frame(year=seq(year_in, year_fi, by=1),
ind=c(MeanDims(malariaInd$data, c('lon', 'lat'), na.rm=TRUE))) %>%
ggplot(aes(x=year, y=ind)) +
geom_line() +
scale_x_continuous(breaks=seq(year_in, year_fi, by=1)) +
geom_smooth(method='lm', formula= y~x, alpha=0.3, linetype="dashed", size=0.3, se=FALSE) +
labs(x="Year", y="Mean number of months suitable \n for malaria transmission") +
theme_bw()
The number of months suitable for malaria transmission appear to have increased in the Iberian Peninsula between 2010 and 2020. When comparing the year 2020 with the year 2010, there was a 47% increase in the number of months suitable for malaria transmission in the region.