Displacement from natural disasters (blue) and conflict (orange) in 2020
Is this true?
Let’s look into this
What do we mean by “climate and weather”?
The storm is coming?
Climate change as a driver of armed conflict and violence
Direct links between temperature, precipitation and political violence (Kevane and Gray 2008, Hendrix and Salehyan 2012, Levy and Sidel 2014, Mares and Moffett 2016)
Indirect effects on violence, through migration, resource competition, food insecurity (Ash and Obradovich 2020, Jones et al. 2017)
Impacts on social unrest in specific settings, like urban areas (Koren et al. 2021, Koubi et al. 2021)
A cause of war?
Short-term weather and violence
Cloud cover as instrumental variable for drone strikes (Mahmood and Jetter 2019, Saeed and Spagat 2021)
Weather shocks as instrumental variable for famine (Rozenas and Zhukov 2019)
Rainfall shocks as instrumental variable for economic growth (Miguel et al 2004, Miguel and Satyanath 2010, Sarsons 2015, Mellon 2023)
\(W\) is the instrumental variable
What do we know?
There is a positive correlation between higher temperatures and violence
At the macro level, civil conflict is more likely in hotter, drier times
Around the globe
Conflict in tropics
Civil wars in Africa
Communal and inter-group conflict also more likely in climate-stressed times
In Kenya
In East Africa
In Brazil
Similar correlations with other types of unrest across the globe
Regime change
Riots in Africa
Riots in India
As well as for crime, sexual assault and other violence in the U.S.
Crime in U.S.
Rape in U.S.
Fights at stadiums
Correlation \(\neq\) causation
Emerging consensus that climate change by itself does not “cause” conflict (Hsiang and Burke 2014, Van Uexkull and Buhaug 2021)
Effect is likely indirect, though mechanisms like:
Demographic time bomb?
Historical weather & climate raster data (partial list)
Source/link | Spatial resolution | Frequency | Availability | Free? | Global? |
---|---|---|---|---|---|
NOAA |
0.5 \(\times\) 0.5 degree | Monthly | 1900-2014 | \(\checkmark\) | \(\checkmark\) |
CRUTS |
0.5 \(\times\) 0.5 degree | Monthly | 1901-2022 | \(\checkmark\) | |
ERA5 |
0.25 \(\times\) 0.25 degree | Hourly | 1940-Present | \(\checkmark\) | \(\checkmark\) |
GLDAS |
0.25 \(\times\) 0.25 degree | Hourly | 1948-Present | \(\checkmark\) | \(\checkmark\) |
FLDAS |
0.1 \(\times\) 0.1 degree | Monthly | 1982-2016 | \(\checkmark\) | \(\checkmark\) |
TerraClimate |
0.04 \(\times\) 0.04 degree | Monthly | 1958-2023 | \(\checkmark\) | \(\checkmark\) |
Climate model future predictions (partial list)
Source/link | Spatial resolution | Free? | Global? |
---|---|---|---|
CESM / CIME |
0.5 \(\times\) 0.5 degree | \(\checkmark\) | \(\checkmark\) |
GFDL-ESM |
1 \(\times\) 1 degree | \(\checkmark\) | \(\checkmark\) |
MPAS |
Voronoi mesh | \(\checkmark\) | \(\checkmark\) |
GISS Model E, E2R |
1 \(\times\) 1 degree | \(\checkmark\) | \(\checkmark\) |
E3SM v2 |
1 \(\times\) 1 degree | \(\checkmark\) | \(\checkmark\) |
Greenhouse gas emissions (partial list)
Source/link | Spatial resolution | Frequency | Availability | Free? | Global? |
---|---|---|---|---|---|
EDGAR |
0.1 \(\times\) 0.1 degree | Annual | 1970-Present | \(\checkmark\) | \(\checkmark\) |
ESS-DIVE |
1 \(\times\) 1 degree | Annual | 1751-2013 | \(\checkmark\) | \(\checkmark\) |
Global Carbon Atlas |
City-level | Annual | 1960-Present | \(\checkmark\) | \(\checkmark\) |
EPA-FLIGHT |
Facility-level | Annual | 2010-Present | \(\checkmark\) |
Extreme weather events (partial list)
Source/link | Spatial resolution | Availability | Free? | Global? |
---|---|---|---|---|
NOAA Storm Events |
Points | 1950-2023 | \(\checkmark\) | |
EM-DAT |
Points, admin units | 1988-Present | \(\checkmark\) | \(\checkmark\) |
GDIS |
Points (centroids) | 1960-2018 | \(\checkmark\) | \(\checkmark\) |
Words of caution
Existing research conceptualizes climate change and conflicts in diverse ways (Meierding 2013, Raleigh and Urdal 2007, Sharifi et al 2021, Van Uexkull and Buhaug 2021)
Complexity of causal pathways, patchy data, disagreement over measurement, analytical approaches (Adams et al 2018, Sakaguchi et al 2017, Sheffran et al 2012)
Differences in assumptions, data & methods lead to vastly different conclusions (Hsiang and Burke 2014, Buhaug et al 2014, Van Uexkull and Buhaug 2021)
The answer is “it depends”
Overview of lab exercise
We will compare average monthly high temperatures in July 2023 to July 1958
Vignette 1 / Step 1
And calculate a new raster that shows where the changes were lowest/highest
Vignette 1 / Step 2
We will then aggregate these changes by country, to see who was most affected
Vignette 1 / Step 3
We will then calculate yearly averages of severe drought indices
Vignette 2 / Step 1
We will extract drought indices for the Middle East and North Africa
Vignette 2 / Step 2
And will see if countries more affected by drought saw more violence in 2011
Vignette 2 / Step 3
We can obtain monthly mean high temperature data from climatologylab.org/terraclimate.html
There are several types of data here. See the “guide for dataset abbreviations”
We want tmax
(mean high temperatures) and PDSI
(drought index)
Let’s download the “Individual years” data
The file naming convention is TerraClimate_[variable]_[year].nc
. Go to TerraClimate_tmax_2023.nc
Download this file through the HTTPServer
link
Do the same for the 1958 temperature data TerraClimate_tmax_1958.nc
And the 2010 drought index data TerraClimate_PDSI_2010.nc
We will use global country-level boundaries data from naturalearthdata.com
We want the “Small scale data, 1:100m”. Click on the Cultural
link
Click on the “Download countries” link under “Admin 0 - Countries” to get the zip
We will be using the same event data on violence as in the last two labs:
UCDP GED version 23.1, in csv
format
Here is the full list of data sources and links:
Category | Type | Format | Data source |
---|---|---|---|
Average monthly max temperature | Raster | .nc |
TerraClimate |
Palmer Drought Severity Index | Raster | .nc |
TerraClimate |
Country borders | Vector (polygons) | .shp |
Natural Earth |
Political violence | Table (non-geo) | .csv |
UCDP GED |
These are all in the WT03.zip
file posted on Canvas.
Always save your progress!
Go to Project
\(\to\) Save As...
Vignette 1. Load the 2023 temperature data (Layer
\(\to\) Add Layer
\(\to\) Add Raster Layer
). TerraClimate_tmax_2023.nc
file in Data/TerraClimate
This is a multi-band raster. Let’s open up the layer Properties
to see what these bands represent
Go to the Information
tab and scroll down to Bands
. There are 12 bands, corresponding to months of the year (e.g. 1 \(=\) January, 12 \(=\) December)
Let’s display temperatures for July. In Symbology
, change Render type
to Singleband pseudocolor
and set Band
to Band 07...
. Adjust the other graphical parameters to taste.
Places closer to the equator are hotter. Antarctica is very cold
Let’s also load the tmax
raster data for 1958
Once both rasters are loaded, open the Raster Calculator...
Set the Expression
to "TerraClimate_tmax_2023@7"-"TerraClimate_tmax_1958@7"
(July temp in 2023 minus July temp in 1958). Save the output as tmax_diff.tif
This will take a few minutes to compute
The tmax_diff
raster should look something like this
Let’s examine the distribution of global temperature changes. In the layer Properties
for tmax_diff
, open the Histogram
tab. Click Compute Histogram
Most temperature changes were positive, with a mode around \(+\) 2 degrees Celsius
Let’s calculate average changes by country. Load the ne_110m_admin_0_countries.shp
file
Once the borders are loaded, open Zonal Statistics
from the Processing Toolbox
. Set Input layer
\(=\) ne_110m_admin_0_countries
, Raster layer
\(=\) tmax_diff
, prefix \(=\) tmax_diff_
, Statistics to calculate
\(=\) Mean
. Save the output as tmax_diff.geojson
North Africa and Central Asia appear to have had the most acute increases in July temperatures
Clicking on the \(\Sigma\) button (“Show Statistical Summary”), we can look up some descriptive stats. The average country saw an increase of 1.77 degrees Celsius
Let’s create an interactive histogram with Plotly. Set Plot type
\(=\) Histogram
, Layer
\(=\) tmax_diff
, Grouping field
\(=\) tmaxdiff_mean
. Click Create Plot
Clicking on the individual bars of the histogram will highlight the countries that fall into that bin, such as here for increases between 4 and 5 degrees
…increases of 3-4 degrees
…increases of 2-3 degrees
…increases of 1-2 degrees (the most numerous category)
…increases between 0 and 1 degree
…decreases of 0 to 1 degree
…decreases of 1 to 2 degrees
…and decreases of 2 to 3 degrees (just Uruguay here)
Vignette 2! Let’s create a regional subset of countries. The ne_110m...
file has a variable called REGION_WB
, where one of the categories is “Middle East & North Africa”
Go to Select by Expression
, set Expression
to REGION_WB='Middle East & North Africa'
, and click Select Features
Export the selected features to a new file
Save the layer as mena.geojson
. Make sure the box is checked next to “Save only selected features”
A new layer with 20 countries should appear in your project window
Load the drought index raster TerraClimate_PDSI_2010.nc
Another multiband raster. Open up the layer Properties
to see the bands
As before, there are 12 bands here, one for each month
Let’s calculate the average annual drought index, over all months.
Open the Raster Calculator
and set Expression
to ("TerraClimate_PDSI_2010@1"+"TerraClimate_PDSI_2010@2"+ "TerraClimate_PDSI_2010@3"+"TerraClimate_PDSI_2010@4"+ "TerraClimate_PDSI_2010@5"+"TerraClimate_PDSI_2010@6"+ "TerraClimate_PDSI_2010@7"+"TerraClimate_PDSI_2010@8"+ "TerraClimate_PDSI_2010@9"+"TerraClimate_PDSI_2010@10"+ "TerraClimate_PDSI_2010@11"+"TerraClimate_PDSI_2010@12")/12
(you may want to copy and paste this one). Save the raster as pdsi_2010_mean.tif
This will take a few minutes to process
The output will look something like this: a single-band raster of averages
Calculate country averages. Open Zonal Statistics
, set Input layer
\(=\) mena
, Raster layer
\(=\) pdsi_2010_mean
, prefix \(=\) pdsi2010_
, Statistics to calculate
\(=\) Mean
. Save the output as mena_pdsi.geojson
Try visualizing the country-level results. Lower index scores \(=\) worse drought
The drought index is negative virtually everywhere except Western Sahara
Finally, let’s link this up with data on violent events. Load GEDEvent_v23_1.csv
, with spatial index
Select by Expression
: year=2011
. Click Select Features
Open the Count Points in Polygon
tool. Select Polygons
\(=\) mena_pdsi
, Points
\(=\) GEDEvent_v23_1
. Make sure the box is checked next to Selected Features Only
for the points. Name the count field events2011
, and save the output file as mena_pdsi_ged.geojson
. Click Run
Open the Plotly tool. Set Plot type
\(=\) Scatter Plot
, Layer
\(=\) mena_pdsi_ged
, X field
\(=\) pdsi2010_mean
, Y field
\(=\) events2011
. Click Create Plot
From the scatterplot, we can see that the highest levels of violence happened in countries with negative PDSI scores (more drought)
If we click on some of the points in the upper-left corner, we can see countries like Syria, which experienced severe drought in 2010 and high violence in 2011
… or Iraq
…or Yemen
We can adjust some of the graphical parameters to make the scatterplot more readable, like adding country labels and putting the violence variable on a logarithmic scale
Looks better now
You can also perform all these steps in R
(see replication code wt03_demo.R
in WT03.zip
)
Vignette 1
Vignette 2
Tired on pointing and clicking? In almost every geoprocessing command, there is a menu called Advanced
, with an option to Copy as Python Command
Paste it into a text file to see the code. The directory structure (/home/username/*
) will depend on where you saved the WT03
files
You can use these code snippets to assemble a Python script with all the commands we used today (see Code/wt03_demo.py
script in the WT04.zip
file)
In QGIS, you can run this script through a Python console. Go to Plugins
menu \(\to\) Python Console
Copy a command into the console and click “Enter” (here we are re-calculating the temperature difference raster from Vignette 1)
When QGIS finishes processing, the console will print a line that starts with 'OUTPUT':...
, telling you where the output file has been saved (note that this will not load the output automatically)
We can repeat this with the next line in the code (Zonal Statistics for temperature changes by country)
When we open up the Python-generated file, and re-create the histogram, we see that the results are identical to the one we created earlier. Scripting can be very handy if you are doing batch processing with repetitive, easily-automated tasks