The suitability of land for agriculture (Rammankutty, Foley, Norman, and McSweeney, 2001) has become a standard control for the effect of geographical characteristics on comparative economic development. This measure, however, is rather crude and it does not capture the large variation in the potential caloric yield across equally suitable land. In particular, geographical regions that according to this measure are comparable in terms of their suitability for agriculture may differ significantly in their potential caloric output per hectare per year, reflecting the fact that land that is suitable for agriculture is not necessarily suitable for the most productive crops in terms of their caloric return.
In light of the importance of pre-industrial population density in the subsequent course of economic development, and the instrumental role played by caloric yield in sustaining and supporting population growth, it is rather apparent that this commonly used index is not well designed for properly capturing the effect of the suitability of land for agriculture on economic development.
Galor and Özak (2014) rectify this deficiency and introduce a novel index of land suitability: “The Caloric Suitability Indices” (CSI) that capture the variation in potential crop yield across the globe, as measured in calories per hectare per year. Moreover, in light of the expansion in the set of crops that are available for cultivation in the course of the Columbian Exchange, the CSI indices provide a distinct measure for caloric suitability for the pre-1500 and the post 1500 era.
The CSI indices provide four estimates of caloric suitability for each cell of size 5′× 5 in the world:
These historical measures are constructed based on data from the Global Agro-Ecological Zones (GAEZ) project of the Food and Agriculture Organization (FAO). The GAEZ project supplies global estimates of crop yield and crop growth cycle for 48 crops in grids with cells size of $5'\times5'$ (i.e., approximately 100 km$^2$).
The crops available are alfalfa, banana, barley, buckwheat, cabbage, cacao, carrot, cassava, chickpea, citrus, coconut, coffee, cotton, cowpea, dry pea, flax, foxtail millet, greengram, groundnuts, indigo rice, maize, oat, oilpalm, olive, onion, palm heart, pearl millet, phaseolus bean, pigeon pea, rye, sorghum, soybean, sunflower, sweet potato, tea, tomato, wetland rice, wheat, spring wheat, winter wheat, white potato, yams, giant yams, subtropical sorghum, tropical highland sorghum, tropical lowland, sorghum, white yams.
For each crop, GAEZ provides estimates for crop yield based on three alternative levels of inputs -- high, medium, and low - and two possible categories of sources of water supply -- rain-fed and irrigation. Additionally, for each input-water source category, it provides two separate estimates for crop yield, based on agro-climatic conditions, that are arguably unaffected by human intervention, and agro-ecological constraints, that could potentially reflect human intervention.
In order to capture the conditions that were prevalent during the pre-industrial era, while mitigating potential endogeneity concerns, the indices use the estimates of potential crop yield under low level of inputs and rain-fed agriculture -- cultivation methods that characterized early stages of development. Moreover, the estimates of potential crop yield are based on agro-climatic constraints that are largely orthogonal to human intervention. Thus, these restrictions remove the potential concern that the level of agricultural inputs, the irrigation method, and soil quality, reflect endogenous choices that could be potentially correlated with individual preferences or institutional settings. Additionally, the choice of rain-fed conditions is further justified by the fact that, although some societies had access to irrigation prior to the industrial revolution, GAEZ's data only provides estimates based on irrigation infrastructure available during the late twentieth century
The FAO dataset provides for each cell in the agro-climatic grid the potential yield for each crop (measured in tons, per hectare, per year). These estimates account for the effect of temperature and moisture on the growth of the crop, the impact of pests, diseases and weeds on the yield, as well as climatic related "workability constraints".
In order to better capture the nutritional differences across crops, and thus to ensure comparability in the measure of crop yield, the yield of each crop in the GAEZ data (measured in tons, per hectare, per year) is converted into caloric return (measured in millions of kilo calories, per hectare, per year). This conversion is based on the caloric content of crops, as provided by the United States Department of Agriculture Nutrient Database for Standard Reference. Using the estimates of the caloric content for each crop in the GAEZ data (measured in kilo calories per 1g), a comparable measure of crop yield (in millions of kilo calories, per hectare, per year) is constructed for each crop.
Based on these estimates Galor and Özak (2014) construct the maximum potential caloric yield estimate they use in their paper. Here varios additional indices of caloric suitability are constructed and presented. First, for each cell the average caloric yield across all available crops pre- and post-1500CE is computed. Second, for each cell the total caloric yield across all available crops pre- and post-1500CE is computed. Finally, the analysis assigns to each cell the highest potential yield among the available crops pre- and post-1500CE. Additionally, for each caloric index raster the same index is constructed including and excluding cells where no calories can be produced or for averages the crops without caloric output are excluded.
Thus, the research constructs for each type of index, namely Average, Total and Maximal Caloric Suitability, four sets of grids: 1. Caloric Suitability pre-1500CE (without zeros) 2. Caloric Suitability pre-1500CE (with zeros) 3. Caloric Suitability post-1500CE (without zeros) 4. Caloric Suitability post-1500CE (with zeros)
These grids can be used to assess the exogenous effect of agricultural potential on various economic and social outcomes. The next section shows how it can be done and compares with another measure of agricultural suitability.
The Caloric Suitability Indices can be downloaded as a zip file, or individually. They come in GeoTiff format and WGS84 projection. Use the links below to download (or you can fork the associated Github repository which contains also this notebook).
If you use the data, please cite:
Oded Galor and Ömer Özak, 2014. "The Agricultural Origins of Time Preference," NBER Working Papers 20438, National Bureau of Economic Research, Inc..
This section plots the various Caloric Suitability Indices constructed following Galor and Özak (2014) and introduced in the previous section. Additionally, it compares them to the agricultural suitability index of Rammankutty, Foley, Norman, and McSweeney (2001).
Additionally, it shows how one can use open source tools, in particular Python, to extract data. In order to do the analysis a working installation of Scientific Python is required and the packages imported below have to be installed also. If needed, follow the installation instructions here or view this notebook.
Start by importing the modules to be used.
from __future__ import division import sys, os, time # Math, data import numpy as np import pandas as pd pd.set_option('display.width', 140) # GIS packages from rasterstats import zonal_stats import geopandas as gp import georasters as gr from shapely.geometry import Polygon from fiona.crs import from_string import mplleaflet import folium import plotly.plotly as py from plotly.graph_objs import * from plotly.widgets import GraphWidget
:0: FutureWarning: IPython widgets are experimental and may change in the future.
%matplotlib inline folium.initialize_notebook() from IPython.display import display from IPython.display import DisplayObject from IPython.display import HTML
post1500mean = gr.from_file('../data/post1500AverageCalories.tif') post1500mean0 = gr.from_file('../data/post1500AverageCaloriesNo0.tif') post1500max = gr.from_file('../data/post1500OptCalories.tif') post1500max0 = gr.from_file('../data/post1500OptCaloriesNo0.tif')
In particular, this means, that if for a cell $c$, $n$ of the 48 crops in the FAO GAEZ data are not suitable for the production of calories, in that cell $c$ only $48-n$ crops will be used in the computations. Below are the plots of the 4 rasters for the post 1500CE period.
f, ((ax1, ax2), (ax5, ax6)) = plt.subplots(2,2,figsize=(15,10)) # Subplot 1 ax1.matshow(post1500mean.raster) ax1.set_title('Average Calories (all cells and crops)') ax1.set_xticks(,) ax1.set_yticks(,) # Subplot 2 ax2.matshow(post1500mean0.raster) ax2.set_title('Average Calories (only productive cells and crops)') ax2.set_xticks(,) ax2.set_yticks(,) # Subplot 3 ax5.matshow(post1500max.raster) ax5.set_title('Maximum Calories (all cells and crops)') ax5.set_xticks(,) ax5.set_yticks(,) # Subplot 4 ax6.matshow(post1500max0.raster) ax6.set_title('Maximum Calories (only productive cells and crops)') ax6.set_xticks(,) ax6.set_yticks(,) plt.tight_layout() plt.savefig('CSIpost1500.png') plt.show()
Now, import and plot the pre-1500CE data.
pre1500mean = gr.from_file('../data/pre1500AverageCalories.tif') pre1500mean0 = gr.from_file('../data/pre1500AverageCaloriesNo0.tif') pre1500max = gr.from_file('../data/pre1500OptCalories.tif') pre1500max0 = gr.from_file('../data/pre1500OptCaloriesNo0.tif')
f, ((ax1, ax2), (ax5, ax6)) = plt.subplots(2,2,figsize=(15,10)) # Subplot 1 ax1.matshow(pre1500mean.raster) ax1.set_title('Average Calories Pre-1500CE (all cells and crops)') ax1.set_xticks(,) ax1.set_yticks(,) # Subplot 2 ax2.matshow(pre1500mean0.raster) ax2.set_title('Average Calories Pre-1500CE (only productive cells and crops)') ax2.set_xticks(,) ax2.set_yticks(,) # Subplot 3 ax5.matshow(pre1500max.raster) ax5.set_title('Maximum Calories Pre-1500CE (all cells and crops)') ax5.set_xticks(,) ax5.set_yticks(,) # Subplot 4 ax6.matshow(pre1500max0.raster) ax6.set_title('Maximum Calories Pre-1500CE (only productive cells and crops)') ax6.set_xticks(,) ax6.set_yticks(,) plt.tight_layout() plt.savefig('CSIpre1500.png') plt.show()