Large-scale vegetation-rainfall correlations in Africa

Weather and climatic variability affect vegetation on continental scales. Intuitively, healthy vegetation is greener. A quantitative index of “greenness” called Normalised Difference Vegetation Index (NDVI) was developed by NASA.  The index takes values between 0 and 1. NDVI is related to the fraction of photosynthetically active radiation absorbed by the vegetation canopy. It is a powerful tool in vegetation monitoring.

Quantifying the relationship between weather and vegetation on a regional scale is a statistical problem which requires long time-series of NDVI. GIMMS is a 25 year (1981-2006) NDVI dataset based on inputs from a sequence of NOAA weather satellites carrying AVHRR radiometers. The GIMMS team removed satellite drift, calibration effects etc.[1] Of course NDVI has a complex spatial variation which is related to variations in vegetation cover type, not to weather variations. To isolate the impact of weather variations, it makes sense to “standardize” NDVI. Vegetation Condition Index (VCI) is:

latex VCI=\frac{NDVI \; \:-\; \:NDVI_{min}}{NDVI_{max}-NDVI_{min}}

For example, NDVImin might refer to the minimum local May NDVI value observed during 1981-2006. A tropical rainforest and a semi-arid region have very different NDVI, but both may have VCI close to 1 during a favourable period.

The maps below show the correlation between VCI and 3-month Standardized Precipitation Index (SPI3) computed for Africa by calendar month. GIMMS 8km NDVI was upscaled to 200km to match the scale of gridded monthly climate datasets for precipitation (GPCP).[2] The red areas correspond to areas of high correlation between VCI and SPI3. Vegetation in these areas responsive to rainfall variations on a 3-month timescale. A striking feature  is the line high correlation in the Sahel region. Vegetation in the Sahel is highly sensitive to drought. Southern Africa is also highly rainfall sensitive during Dec-May. It is impressive that the combination of datasets of very different origins (GPCP and GIMMS) produces spatially and temporally consistent information.

Sensitivity of Vegetation to Precipitation 1981-2006


R code snippets

Most of the effort is in pre-processing the climate and NDVI data so that they share the same projection, grid, time coordinate etc. GDAL and the interp() function from the akima package were used for this purpose. Eventually we end up with SPI3 and VCI data represented by N × T matrices where N = Nx ×Ny is the dimension of the spatial maps and T is the number of observations. From there,  SPI3 and VCI maps were organized by calendar month,

vci.m <- lapply(seq(1:12),function(m) vci[,seq(from=m, to=T, by=12)])
spi3.m <- lapply(seq(1:12), function(m) spi3[,seq(from=m, to=T, by=12)])

Correlation maps between VCI and SPI3  for each calendar month are obtained from,

corr.maps <- lapply(seq(1:12),function(m) sapply(seq(1:N), function(i) cor( vci.m[[m]][i,],spi3.m[[m]][i,]) ))

Finally the above map table was produced using spplot() from the sp package with overlays from the maps package.

[1]  Tucker, C.J., J.E. Pinzon, and M.E. Brown (2004), Global Inventory Modeling and Mapping Studies, NA94apr15b.n11-VIg, 2.0, Global Land Cover Facility, University of Maryland, College Park, Maryland, 04/15/1994.

[2] SG: Adler, R.F., G.J. Huffman, A. Chang, R. Ferraro, P. Xie, J. Janowiak, B. Rudolf, U. Schneider, S. Curtis, D. Bolvin, A. Gruber, J. Susskind, P. Arkin, 2003: The Version 2 Global Precipitation Climatology Project (GPCP) Monthly Precipitation Analysis (1979-Present). J. Hydrometeor., 4,1147-1167.


  • Is the complete data R file for reading and processing the data available for public use? Or is the processed NDVI, vci and spi3 available for public use?

  • Peter, thanks for your interest

    The code contains some stuff which is meant for internal use at Biospherica. However if you need the processed NDVI/VCI/SPI3 data for Africa, we can provide these in .RData files?

  • I will appreciate getting the data including the precipitation used to calulate SP13 and collect reference quote is used in any study for publication.

  • Yes, I will appreciate getting the data.

  • Hi Joe
    Would it be possible to obtain sample R file with available codes for generating images as shown above?

  • Hi Joe

    I have one more question to ask.
    I happened to find an old script to compute SPI using netcdf file.

    Do you this I can work around using gridded precipitation data using your old script?
    I was able to run the code until #pdata.mon[[m]], and it returns error message when I type in function for SPI, below 3 lines onward:

    #spi.m[[k]] is the spi index for timescale k
    #time-scale loop. k is timescale index 1 .. 12

    spi.m <- as.list(rep(0,N_timescale))
    for (k in 1:12){
    spi.m[[k]] <- as.list(rep(0,12))

    It says "Error in as.list(rep(0, N_timescale)) : object 'N_timescale' not found". Filename N_timescale wasn't identified throughout the script.

    Is there any updated or alternative script for this?


  • Hi Joe

    Would it be possible for me to obtain full script for producing correlation maps?
    I have both SPI and NDVI file in raster format and would like to use your script.

    Thank you in advance!

Join the Discussion

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

one + 8 =