Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
517 lines (436 sloc) 24 KB
title: "Dangerous Assumptions Revisited"
author: "Jonathan Gilligan"
date: '2018-02-13'
- climate change
- climate policy
- global warming
- RCPs
- representative concentration pathways
- CO2 emissions
- decarbonization
- Roger Pielke, Jr.
- greenhouse gas emissions
slug: dangerous-assumptions-revisited
- decarbonization
- RCPs
- blog posts
```{r setup, include=FALSE, cache=FALSE, message=FALSE, warning=FALSE}
knitr::opts_chunk$set(echo = FALSE,
cache = FALSE,
message=FALSE, warning=FALSE, error=FALSE)
if (! require(pacman)) {
stop("Before proceeding, you must install the pacman package.\n",
"In R, run \"install.packages('pacman')\".")
message("Dep path = ", blogdown::dep_path())
message("fig.path = ", knitr::opts_chunk$get("fig.path"))
Comparisons of observed trends of energy and carbon intensity in the global
economy to trends implied by emissions scenarios used in policy analysis
suggested that those scenarios were severely over-optimistic about the rate at
which the world would spontaneously decarbonize its economy.
I update these analysis, using global emissions since 2005, and find
that observed rates of decarbonization are not far behind those implied by
the RCP 4.5 policy scenario. This suggests that the policy challenge may not
be as difficult as previous work has reported.
<!-- more -->
# Introduction
## Background and the Kaya Identity
In 2000, the Intergovernmental Panel on Climate Change published a
[Special Report on Emissions Scenarios]({target="_blank"},
in which it developed many possible
scenarios for the paths that greenhouse gas emissions might follow during the
21st century under "Business as Usual" (BAU) conditions, meaning without any
policy measures to reduce emissions.
Different scenarios made different assumptions about population growth,
economic development, and technological innovation and thus produced a diverse
range of emissions pathways. The hope was that the actual emissions path that
the world would follow in the 21st century would lie somewhere within this
From a policy perspective, it is useful to analyze emissions in terms of the
[Kaya Identity]({target="_blank"}:
\text{Emissions} = \text{Population} \times
\frac{\text{GDP}}{\text{Population}} \times
\frac{\text{Energy}}{\text{GDP}} \times
There is nothing magic about this: If you cancel terms that appear on both the
top and bottom of the fractions, it says nothing more than
$\text{Emissions} = \text{Emissions}$.
However, the identity is useful for thinking about policy because each of the
terms multiplied together is something that has direct relevance, so let's
assign each a symbol:
g &= \frac{\text{GDP}}{\text{Population}} = \text{per-capita GDP}\\
e &= \frac{\text{Energy}}{\text{GDP}} = \text{energy intensity of the economy}\\
f &= \frac{\text{Emissions}}{\text{Energy}} = \text{carbon intensity of the energy supply}.
Now, we can write the identity as
F = P \times g \times e \times f,
where $F$ stands for total emissions, $P$ stands for population, and
$g$, $e$, and $f$ are defined by the equations above.
Roger Pielke, Jr.'s book, [_The Climate Fix_]({target="_blank"} has a very clear explanation of this
in Chapter 3.
This way of looking at emissions is useful for policymakers because trying to
directly control population is both morally questionable (I would go much
farther and say that I would find attempts by governments or others to forcibly
control population to be a horrifying violation of people's basic rights, and
especially women's rights to autonomy over their bodies).
It would also be politically unfeasible and morally questionable at best to
try to reduce per-capita GDP, which essentially would mean making people
poorer on average.
From a policy perspective, it is not feasible nor desirable to try to
reduce people's wealth or coerce their reproductive choices.
Thus, climate policy must focus on the last two terms:
Improving energy efficiency can reduce the energy intensity of the economy
and switching from carbon-intensive energy sources, such as coal, to less
carbon-intensive sources, such as nuclear or renewable energy, can reduce the
carbon-intensity of the energy supply.
Reducing $e$ (energy intensity) and $f$ (carbon intensity) can reduce emissions
without reducing either population or per-capita GDP.
Thus, feasible climate policy focuses on ways to reduce energy and carbon
## Comparing Observed and Implied Rates of Decarbonization
In 2008, Roger Pielke, Jr., Tom Wigley, and Christopher Green
("[Dangerous Assumptions]({target="_blank"},"
_Nature_ **452**, 531 (2008)) compared the observed rate of change of energy
and carbon intensity in the years 2000--2005 to the rates of change implied
by the SRES scenarios. They observed that most of the scenarios assumed that
even without any specific climate policies, the world's economy would steadily
become more energy efficient and less carbon-intensive. However, they pointed
out, between 2000 and 2005 the opposite happened: the world's economy became
both _more_ energy intensive and _more_ carbon intensive.
![Assumed versus observed decarbonization rates, from Pielke _et al._, "[Dangerous Assumptions]({target="_blank"}"](/img/post/gilligan-dangerous-assumptions/pielke_assumed_decarbonization.jpg)
If there is a fairly rapid rate of "spontaneous decarbonization" in the absence
of climate policy, then making climate policy is relatively easy, because it
only has to make modest changes to something that's happening already:
![Under the IPCC's SRES scenarios, spontaneous decarbonization (blue bars) does most of the hard work and climate policy only needs to add a small amount of additional decarbonization (red bars). However, if spontaneous decarbonization falls short of the predicted blue bars, then the policy task is harder. From Pielke _et al._, "[Dangerous Assumptions]({target="_blank"}"](/img/post/gilligan-dangerous-assumptions/pielke_cumulative_emissions.jpg)
However, Pielke, Wigley, and Green found that the spontaneous decarbonization
rate was much smaller than the IPCC expected, and emphasized that this implied
that the policy challenge was much more difficult than expected.
More recently, Samantha Stevenson and Roger Pielke, Jr.
("[Assumptions of Spontaneous Decarbonization in the IPCC AR5 Baseline Scenarios]({target="_blank"}")
conducted a similar analysis of the
"[Representative Concentration Pathways]({target="_blank"}"
which were published in 2011.
Unlike the SRES scenarios, the RCPs are policy-active pathways in which
government action, such as imposing a price on greenhouse gas emissions,
is used to reduce emissions.
In their analysis, Stevenson and Pielke compared the observed global emissions
between 2000 and 2008 to the baseline pathways corresponding to the RCPs
(the baseline pathways are the trajectories of greenhouse gas emissions the
RCP authors assumed would occur if there were no climate policies in effect).
Stevenson and Pielke found that, just as with the SRES scenarios,
the baseline emissions trajectories assumed far greater spontaneous decarbonization
than actually occurred.
## Problems with the Previous Analyses
An important problem that the analyses by Pielke, Wigley, & Green and
Stevenson & Pielke face is that they compared the scenarios to observed trends
during the years 2000--2005 and 2000--2008, respectively.
This may not have been the best choice.
World energy and carbon intensity steadily declined from 1980--2000 and then
suddenly jumped for several years starting around 2002, which corresponded to
a period of tremendous economic growth in China.
```{r world-carbon-plot, include = TRUE, fig.height=7, fig.width=7, fig.cap = "Trend of global carbon intensity, with 2000--2008 highlighted."}
get_kaya_data("World") %>% filter(year >= 1980) %>%
plot_kaya("f", y_lab = expression(paste(MMT * CO[2] / quad)), log_scale = TRUE,
start_year = 2000, stop_year = 2008) +
labs(title = "Carbon intensity of world energy supply") +
scale_y_log10(breaks = seq(62, 78, 4)) +
theme_bw(base_size = 15)
```{r world-energy-plot, include = TRUE, fig.height=7, fig.width=7, fig.cap = "Trend of global energy intensity, with 2000--2008 highlighted."}
get_kaya_data("World") %>% filter(year >= 1980) %>%
plot_kaya("e", y_lab = "quad / $ trillion", log_scale = TRUE,
start_year = 2000, stop_year = 2008) +
labs(title = "Energy intensity of world economy") +
scale_y_log10(breaks = seq(6, 11, 2)) +
theme_bw(base_size = 15)
China's growth was fueled by a rapid expansion of energy consumption, and both
factories and generating plants were very inefficient, and were largely fueled
by coal. This drove both the energy intensity of China's economy and the carbon
intensity of its energy supply through the roof, and this appears to have played
a large role in reversing for several years the global trend of declining
energy and carbon intensity.
Around 2007 or so, China's energy and carbon intensity began to fall again and
the world energy and carbon intensity fell along with it.
```{r china-carbon-plot, include = TRUE, fig.height=7, fig.width=7, fig.cap = "Trend of China's carbon intensity, with 2000--2008 highlighted."}
get_kaya_data("China") %>% filter(year >= 1980) %>%
plot_kaya("f", y_lab = expression(paste(MMT * CO[2] / quad)), log_scale = TRUE,
start_year = 2000, stop_year = 2008) +
labs(title = "Carbon intensity of China's energy supply") +
scale_y_log10(breaks = seq(75, 95, 5)) +
theme_bw(base_size = 15)
Note the very rapid decline in carbon intensity beginning in 2010.
```{r china-energy-plot, include = TRUE, fig.height=7, fig.width=7, fig.cap = "Trend of China's energy intensity, with 2000--2008 highlighted."}
get_kaya_data("China") %>% filter(year >= 1980) %>%
plot_kaya("e", y_lab = "quad / $ trillion", log_scale = TRUE,
start_year = 2000, stop_year = 2008) +
labs(title = "Energy intensity of China's economy") +
scale_y_log10(breaks = seq(10, 60, 10)) +
theme_bw(base_size = 15)
And here are the trends for the whole world _except_ China:
```{r not-china-carbon-plot, include = TRUE, fig.height=7, fig.width=7, fig.cap = "Trend of carbon intensity for the world except China, with 2000--2008 highlighted."}
china <- get_kaya_data("China") %>% select(year, G, E, F)
world <- get_kaya_data("World") %>% select(year, G, E, F)
mix <- world %>% full_join(china, by = "year", suffix = c(".world", ".china")) %>%
mutate(G = - G.china, E = - E.china, F = - F.china) %>%
mutate(e = E / G, f = F / E) %>% select(year, e, f) %>%
filter(year >= 1980)
plot_kaya(mix, "f", y_lab = expression(paste(MMT * CO[2] / quad)), log_scale = TRUE,
start_year = 2000, stop_year = 2008) +
labs(title = "Carbon intensity of rest of world") +
scale_y_log10(breaks = seq(50, 70, 5)) +
theme_bw(base_size = 15)
```{r not-china-energy-plot, include = TRUE, fig.height=7, fig.width=7, fig.cap = "Trend of energy intensity for the world except China, with 2000--2008 highlighted."}
plot_kaya(mix, "e", y_lab = "quad / $ trillion", log_scale = TRUE,
start_year = 2000, stop_year = 2008) +
labs(title = "Energy intensity of rest of world") +
scale_y_log10(breaks = seq(5, 10, 1)) +
theme_bw(base_size = 15)
An alternative analysis of the RCP scenarios, which takes the observed trend
from 2005--2016, seems more sensible, both
because it better matches the period in which we are calculating
the implied decarbonization trends
(the first 15 years of the RCP scenarios, from 2005--2020),
and also because it avoids the anomalous temporary reversal of the historical
trend from approximately 2002--2005.
# Methods
To calculate carbon intensity and energy intensity, we need economic data
for the scenarios, so to make things simple, we use the
[GCAM simulations of the RCPs]({target="_blank"}.
These are not identical to the official RCP data, but present reasonable
scenarios that produce emissions trajectories very close to the RCPs.
The GCAM versions of the pathways are calculated within a consistent
macroeconomic model of regional economies and energy use, and thus facilitate
comparisons of energy and carbon intensities.
## Read GCAM Scenarios
First, we read in the GCAM scenarios from the file `GCAMRCPData.xls`:
```{r read-gcam-data, include=TRUE}
data_dir <- 'data'
data_file <- file.path(data_dir, 'GCAMRCPData.xls')
rcp_45 <- read_excel(data_file, 'RCP4.5') %>% clean_names()
gcam_60 <- read_excel(data_file, 'GCAM6.0') %>% clean_names()
gcam_85 <- read_excel(data_file, 'GCAM8.5') %>% clean_names()
gcam_26 <- read_excel(data_file, 'GCAM2.6') %>% clean_names()
gcam_ref <- read_excel(data_file, 'GCAMReference') %>% clean_names()
gcam_by_sector <- read_excel(data_file, 'CO2EmissionsbySector') %>% clean_names()
# Clean up a list of variables by converting them into legal names
clean_vars <- function(vv) {
new_vv <- vv %>%
str_replace_all(c("['\"]" = "", "%" = "percent", "^[ ]+" = "_")) %>%
make.names() %>%
str_replace_all(c("[._]+" = "_", "_+$" = "")) %>% str_to_lower()
# The excel sheet runs years in columns and variables in rows.
# Flip this to put years in columns (and we need to fix "x2008" type col names
# and convert years to integers), and clean up variable names to make them
# legal column names.
process_scenario <- function(df) {
df %>% gather(key = "year", value = "value", -model, -scenario, -region, -variable, -unit) %>%
mutate(year = str_replace_all(year, "^[^0-9]+", "") %>% as.integer()) %>%
mutate(variable = clean_vars(variable))
for(s in c('gcam_26', 'rcp_45', 'gcam_60', 'gcam_85', 'gcam_ref', 'gcam_by_sector')) {
get(s) %>% process_scenario() %>% assign(x = s, value = ., pos = globalenv())
all_scenarios <- rbind(gcam_26, rcp_45, gcam_60, gcam_85, gcam_ref)
# There are lots of variables. We're interested in the Kaya ones, so filter
# those out, and change the names to the ones we want.
# Change scenario names to what we want.
# Then add up values for each region to get whole world numbers.
gcam_scenarios <- all_scenarios %>%
filter(variable %in% c("population_total", "gdp_total_mer", "primary_energy_total",
"emissions_co2_fossil_fuels_and_industry")) %>%
select(scenario, region, variable, year, value) %>%
mutate(variable = str_replace_all(variable, c("_.*$" = "", "^population" = "P",
"^gdp" = "G", "^primary" = "E",
"^emissions" = "F")),
scenario = str_replace_all(scenario, "(GCAM|RCP)([0-9]|Reference)", "\\1 \\2")) %>%
group_by(scenario, variable, year) %>% summarize(value = sum(value)) %>% ungroup()
## Observed Historical Data
We get historical emissions data from the 2017 BP Statistical Review of World Energy
and historical economic data from the World Bank.
For convenience, we have already calculated these in the `kayadata` package,
so we use that.
```{r load-historical-data, include=TRUE}
historical <- get_kaya_data("World")
## Calculate Decarbonization Rates
From the Kaya identity, the energy intensity of the economy is
given by $e = E/G$, and the carbon intensity of the energy supply is
given by $f = F/E$, where $E$ is the total primary energy consumption,
$F$ is the total carbon dioxide emissions, and $G$ is the gross world product.
Fractional growth rates are given by
r_e &= \frac{\text{d} \ln e}{\text{d}t} \\
r_f &= \frac{\text{d} \ln f}{\text{d}t}
We implied rates under RCP and GCAM scenarios from 2005--2020 and
we calculate rates of observed (historical) change from 2005--2016.
```{r decarbonization-rates, include = TRUE}
rates <- gcam_scenarios %>% spread(key = variable, value = value) %>%
mutate(e = E / G, f = F / E) %>% select(year, scenario, e, f) %>%
filter(year >= 2005, year <= 2020) %>% gather(key = variable, value = value, e, f) %>%
nest(-scenario, -variable) %>% group_by(scenario, variable) %>%
mutate(fit = map(data, ~lm(log(value) ~ year, data = .x))) %>%
mutate(coefs = map(fit, coef)) %>% mutate(rate = map_dbl(coefs, 2)) %>%
ungroup() %>%
select(scenario, variable, rate) %>% mutate(variable = str_c("r.", variable)) %>%
spread(key = variable, value = rate)
hist_rates <- historical %>% select(year, e, f) %>% filter(year >= 2005) %>%
gather(key = variable, value = value, -year) %>%
nest(-variable) %>% group_by(variable) %>%
mutate(fit = map(data, ~lm(log(value) ~ year, data = .x))) %>%
mutate(coefs = map(fit, coef)) %>% mutate(rate = map_dbl(coefs, 2)) %>%
ungroup() %>%
select(variable, rate) %>% mutate(variable = str_c("r.", variable)) %>%
spread(key = variable, value = rate) %>% mutate(scenario = "Historical")
rates <- rates %>% bind_rows(hist_rates)
# Analysis
Now we have the data, so we plot the implied rates of decarbonization in the
RCP and GCAM scenarios and compare them to the observed historical rates
over the same time frame.
```{r plot-data, include=TRUE, fig.height=7, fig.width=7, fig.cap="Observed vs. implied rates of decarbonization. RCP and GCAM rates are for 2005--2020 and Historical rate is for 2005--2016."}
rcp_scales <- tribble(
~scenario, ~order, ~break_order, ~shape, ~size, ~nx, ~ny,
"Historical", 3, 1, 18, 5, 0, 0.05,
"GCAM Reference", 1, 2, 16, 3, 0, 0.05,
"GCAM 8.5", 2, 3, 16, 3, 0, 0.05,
"GCAM 6.0", 4, 4, 16, 3, -0.02, 0.02,
"RCP 4.5", 5, 5, 16, 3, 0, 0.05,
"GCAM 2.6", 6, 6, 16, 3, 0, 0.05
) %>% arrange(order) %>% mutate(scenario = ordered(scenario, levels = scenario))
rcp_levels <- levels(rcp_scales$scenario)
rcp_breaks <- rcp_scales %>% arrange(break_order) %>% select(scenario) %>% simplify() %>% unname()
rcp_shapes <- rcp_scales %>% arrange(order) %>% select(scenario, shape) %>%
spread(key = scenario, value = shape) %>% simplify()
rcp_sizes <- rcp_scales %>% arrange(order) %>% select(scenario, size) %>%
spread(key = scenario, value = size) %>% simplify()
r <- rates %>%
mutate(scenario = ordered(scenario, levels = rcp_levels)) %>%
left_join(rcp_scales %>% select(scenario, nx, ny), by = "scenario")
rate_plot <- ggplot(r, aes(x = 100 * r.f, y = 100 * r.e, color = scenario,
shape = scenario, size = scenario)) +
geom_hline(size = 1, color = "gray70", yintercept = 0.0) +
geom_vline(size = 1, color = "gray70", xintercept = 0.0) +
geom_point() +
geom_abline(aes(slope = -1, intercept = 100 * (r.e + r.f), color = scenario),
data = filter(r, scenario == "Historical"), size = 1) +
geom_text_repel(aes(label = scenario, nudge_x = nx, nudge_y = ny),
color = "black", size = 4,
box.padding = 0.4) +
labs(y = expression(paste(Delta, " Energy Intensity of GDP (%/year)")),
x = expression(paste(Delta, "Carbon Intensity of Energy (%/year)"))) +
scale_x_continuous(expand = c(0, 0.125)) +
scale_color_brewer(palette = "Dark2", breaks = rcp_breaks, direction = -1,
name = "Scenario", guide = "none") +
scale_shape_manual(values = rcp_shapes, breaks = rcp_breaks, name = "Scenario",
guide = "none") +
scale_size_manual(values = rcp_sizes, breaks = rcp_breaks, name = "Scenario",
guide = "none") +
coord_fixed(ratio = 1) +
theme_bw(base_size = 15)
```{r rate-table}
rates %>% mutate(scenario = ordered(scenario, levels = rcp_breaks),
r.ef = r.e + r.f) %>%
arrange(scenario) %>%
select(scenario, r.ef) %>% mutate(`Decarbonization rate`=sprintf("%.1f%%", 100 * r.ef)) %>%
select(Scenario = scenario, `Decarbonization rate`) %>%
kable(align = 'cc', caption = "Observed and implied total global decarbonization rates")
# Conclusions
In contrast to the previous work, using the last 8 years of observed data on
energy and carbon intensity, the world appears to currently be headed along a
trajectory is decarbonizing slightly faster than both the RCP 4.5 reference
scenario and the RCP 6.0 policy scenario, and which
not too far behind the early years of RCP 4.5 policy scenario
(see Table \@ref(tab:rate-table)).
Thus, the challenge of getting from the current trajectory to the RCP 4.5
policy trajectory seems actually to be a bit smaller than anticipated.
This is very different from the conclusions of Pielke, Wigley, & Green
and Stevenson & Pielke, and presents a much more optimistic picture than those
analyses do.
Of course, the big cuts in the RCP 4.5 pathway occur in the future, so we should
not take this as license for complacency.
Much of the acceleration of decarbonization has been driven by the unexpected
fracking revolution, which dramatically reduced the price of natural gas and
thus stimulated a massive shift from coal to gas in electrical generation.
Sustaining a long-term decarbonization trend will require a similar revolution
in clean energy sources (nuclear and renewables) to replace gas.
Moreover, the anomalous reversal of
spontaneous global decarbonization in the early 2000s may be repeated if
other developing countries experience rapid industrialization and economic
growth. This could happen in India and among African nations.
Nonetheless, if we consider that this analysis compares
the observed _spontaneous_ decarbonization rate (with no major climate policies)
over the last eleven years
to the decarbonization rates implied by the policy-regimes of the
different RCP policy regimes, and if we also recognize that RCP 4.5 gives
[roughly 80% probability of keeping warming below 3.0&deg;C]({target="_blank"},
then this makes it much more plausible that we have time to avoid catastrophic
This analysis also highlights challenges with respect to energy efficiency:
the carbon intensity of the world's energy supply has dropped much faster than
either the baseline or any of the policy scenarios except GCAM 2.6.
However, the energy intensity of the world's economy has lagged far behind
the reference scenario and all of the serious policy scenarios
(the exception, GCAM 8.5 may be seen as reflecting perverse policies that
encourage energy consumption and the use of coal).
This is true at the global scale and also apparent for China, as shown in
figures \@ref(fig:china-carbon-plot) and \@ref(fig:china-energy-plot).
This is consistent with many experts' views that policy measures will be
more effective at reducing carbon intensity by promoting inexpensive
clean energy sources than at slowing or reversing the growth of energy demand.
However, one could also interpret this as a failure by both governments and
markets to provide
[behaviorally effective incentives](/files/pubs/pdfs/stern_2010_design_principles.pdf){target="_blank"}
and opportunities for
businesses and households to implement available energy-efficiency measures.
Michael Vandenbergh and I argue for the latter interpretation in our recent
book, [_Beyond Politics_]({target="_blank"}, where we present
evidence that there is a large efficiency gap both in households and in
businesses, and that there are significant opportunities to reduce emissions
while saving money by systematically pursuing inefficiencies.
# Code
The R code for the analysis in this post is available at <>
and an alternate version is available at <>
You can’t perform that action at this time.