Coffee prices, long range forecasts and drought

The tropical highlands of Minas Gerais, Brazil are responsible for 25% of the world’s Arabica coffee production. In 2014, the region experienced drought during the critical austral summer months of January and February. World coffee prices moved sharply higher at the end of January. By early March, prices had nearly doubled.

In an efficient market the price of a commodity reflects all available information. Did the coffee price assimilate long-range weather forecast information available in 2014 ?


The above chart show monthly rainfall (crosses) and average rainfall (black line). Rainfall totals were extracted from ERA-interim reanalysis. Periods of deficit relative to average rainfall are indicated in red. Rainfall was less than 50% of average in both January and February 2014.


Despite dryness, coffee futures actually trended slightly lower during January 2014 (above). However this situation reversed dramatically after January 29 (indicated by the red arrow). It is as though the market abruptly woke up to the fact that drought would continue well into February and that this would impact Arabica coffee fruit development.

In fact, well in advance of January 29, long range weather forecasts were indicating a high probability of continued drought in February. The graph below shows a large ensemble of CFSv2 rainfall forecasts for Minas Gerais for December, January and February. Such forecasts[*] are made every 6 hours up to 9 months prior to the forecast month. A high probability of anomalous rainfall for the months of January and February is evident some 2-3 weeks in advance.



This analysis points to a surprising conclusion. For perhaps two weeks, world coffee market prices did not properly reflect probabilistic information available from long range weather forecasts.

[*] Raw forecasts, not bias corrected.

Mountain Rainfall

Minor shifts in atmospheric circulation can have major impacts on rainfall patterns in mountainous regions. This has important implications for crops such as coffee which are grown at altitude.

Rainfall derives from uplift of moist air. In mountainous areas, uplift is forced by terrain and so depends on the horizontal wind vector \mathbf U. The dependence of rainfall on wind direction is illustrated below for a fictitious range of hills (dashed contours indicate the hills).

The “upslope” model for rainfall (P) at location \mathbf{r} is:

(1)   \begin{equation*} P(\mathbf{r}) = P_o + \rho_s  \mathbf{U} \cdot  \vec \nabla h\left(\mathbf{r}\right) \end{equation*}

\vec\nabla h is the gradient of the terrain height and \rho_s is related to the saturated water vapour density. P_0 is the background rainfall rate.

In reality, Equation (2) is a poor approximation.  Rain spreads downwind because there is a delay before raindrops can form, and another delay before fallout. Airflow dynamics also spreads the influence of an obstacle upwind. These effects can be included in a Fourier transformed version of equation (1):

(2)   \begin{equation*} P(\mathbf{r}) = P_0 + \rho_s \sum_\mathbf{k} g(\mathbf{k}) exp\left( i \mathbf{k}\cdot \mathbf{r}\right) i \mathbf{U} \cdot \mathbf{k} \tilde h(\mathbf{k}) \end{equation*}

\tilde h(\mathbf{k}) is the Fourier transform of the terrain height and g(\mathbf{k}) is a form factor which includes the effects of advection and mountain wave dynamics. Equation (2) reduces to the upslope model when g(\mathbf{k})=1.

R: Fast Fourier Transform & Rcpp

The figure illustrates orographic rainfall for a fictitious range of gaussian hills. It is very quick to compute (2) using Discrete FFT. If you use R, things can be speeded up by constructing the integrand in C++ using Rcpp before passing it to fft. This is very fast even for realistic landscapes.

C++/Rcpp implementation

R. Smith & I. Barstad, A linear theory of orographic precipitation, J. Atmos. Sci., 61, 1377–1391, (2004)