This post is more or less a thinking-out-loud exercise, but I thought I would inflict it on you, since there are not enough blog posts about climate change. It’s a comparison of point estimates of expected global mean surface temperature change, as given by the IPCC AR5, and ones I computed using Transient Climate Sensitivities (TCS).
This was inspired by a recent cartoon in xkcd and a conversation with Brian McGill (starting here) over at Dynamic Ecology. It’s just a cartoon, and the author seems to try hard to get science and stat topics right. But on first look, I thought it was not even “ballpark” correct, except perhaps under the highest radiative forcing (RF) scenario (RCP85), whereas some other people thought it was ballpark OK. Of course, one person’s concept of “ballpark” might not be another’s.
The projections in the AR5 and CMIP5 are based on a set of very complex Global Climate Models that are spatio-temporally specific. There’s no way one can come close to mimicking that detail, but it is reasonable to expect a decent agreement, for global mean temperature estimates, between these GCM outputs and simpler estimates made using just (1) the given CMIP5/AR5 RF values used, and (2) estimates of the TCS. And that is what I’ve done here. Note that I’m not addressing the relative likelihoods of the world experiencing one RCP scenario over another in the future–that’s a very important, but separate, question.
Note also that this is not an indictment of IPCC AR5 numbers. I criticize a lot of stuff here, but this is not one of those criticisms. I get lower point estimates than they do, but there a number of possible reasons for this, and my working assumption is that if somebody’s numbers are less defensible than the others, those are mine, not the IPCC’s. I really just want to get a handle on why the numbers are different.
Update: The script (somewhat rearranged from what’s below) and all of the input data used can be downloaded here.
First the comments and notes:
## Script to evaluate expected T in relation to atm [CO2] forcings under varying RCP radiative forcing scenarios ## # June 2014, Jim Bouldin # # All GHG mixing ratios and CO2 equivalent forcings, are taken from the RCP Database, Version 2.0.5 # These data are at: http://tntcat.iiasa.ac.at:8787/RcpDb/dsd?Action=htmlpage&page=download, in section titled "CMIP5 recommended data, RCP concentrations" # HOWEVER, the formatting of the .dat (text) files there is very strange (appears to be either column-formatted or fixed width, but neither format reads properly) and a huge pain to read properly if working in R; therefore: # Use instead the Excel-formatted data found at http://www.pik-potsdam.de/~mmalte/rcps/ The entire data set in one zip file is at http://www.pik-potsdam.de/~mmalte/rcps/data/ALLDATA_30May2010.zip. Strip all header info first. # The zip file also includes data on all forcings used in all runs, and other data. # These analyses are based on the concepts of equivalent CO2 forcings for part, or all, of the anthropogenic forcings, as thoroughly discussed in AR5 WG1, especially chapters 8 and 12 # Note that TCR (= Transient Climate Response) is defined strictly as the T change resulting from a 1% increase in CO2, (and thus a linear increase in forcing) over 70 years. This defn. requires generalization in order to apply to different RCP's. # The analyses below follow exactly the idea of TCS as a simple generalization of TCR, as described in the first paragraph of AR5 WG1 section 10.8.1 "Transient Climate Response" # See AR5 WG1, ch 10, Fig 10.20, and ch. 12 Box 12.2, for more detail. # I computed a distribution of TCR values using WG1 Figure 9.5 point estimates, combined with the eyeballed modal values shown in Fig 10.20 for studies occurring since AR4
The following gives the relevant code, using the GHG forcing data only, over the period 1950-2100. I picked those dates because those are +/- the ones used to define the cartoon’s claims.
rm(list=ls()) # set working directory with setwd("directory name") # filenames for radiative forcings are exactly as given in the zip file referenced above ("ALLDATA_30May2010.zip"), except that .csv replaces .xls # Assign atm. [CO2] and [CO2eq] (CO2 equivalent) values (ppm) at reference time points: f26 = read.csv("RCP26_MIDYEAR_RADFORCING.csv", header = T) f45 = read.csv("RCP45_MIDYEAR_RADFORCING.csv", header = T) f60 = read.csv("RCP60_MIDYEAR_RADFORCING.csv", header = T) f85 = read.csv("RCP85_MIDYEAR_RADFORCING.csv", header = T) year.start = 1950; year.stop = 2100 yr.1 = which(f26[,1]==year.start); yr.n = which(f26[,1]==year.stop) options(digits=3) FORCING = rbind(f26[c(yr.1,yr.n),], f45[c(yr.1,yr.n),], f60[c(yr.1,yr.n),], f85[c(yr.1,yr.n),]) FORCING$RCP = c(rep("rcp26",2),rep("rcp45",2),rep("rcp60",2),rep("rcp85",2)) n = ncol(FORCING);n FORCING = FORCING[,c(n, 1:(n-1))]; FORCING = FORCING[c(seq(1,7,2),seq(2,8,2)),1:12] # Read the GCM forcing parameters. These are in AR5 WG1 ch 9, Table 9.5. Copied exactly as given, first 7 columns only. GCM.pars = read.csv("CMIP5 Model Forcing Parameters.csv")[,1:7] medianTCR.CMIP5 = median(GCM.pars[,5]); meanTCR.CMIP5 = mean(GCM.pars[,5]) TCR.postAR4 = c(2,1.67,1.6,1.6,1.5,1.25,1.25); TCR.all = c(since.AR4,GCM.pars[,5]) medianTCR.all = median(GCM.pars[,5]); meanTCR.all = mean(GCM.pars[,5]) medianTCR.CMIP5; medianTCR.ALL meanTCR.CMIP5; meanTCR.ALL RCP = FORCING$RCP[1:4]; Period = paste(year.start,"-",year.stop,sep="") GHG_RF = data.frame(RCP,FORCING$GHG_RF[5:8] - FORCING$GHG_RF) dT.med = GHG_RF[,2]*(medianTCR.ALL/3.7) dT.mean = GHG_RF[,2]*(meanTCR.ALL/3.7) > data.frame(Period,RCP,dT.med, dT.mean) Period RCP dT.med dT.mean 1 1950-2100 rcp26 0.945 0.971 2 1950-2100 rcp45 1.632 1.676 3 1950-2100 rcp60 2.219 2.278 4 1950-2100 rcp85 3.428 3.520
That last table gives the results. RCP85 is only giving about a 3.5 degree increase from GHG forcing, from 1950 to 2100. So that is indeed about 1.0 below what the xkcd cartoon claimed, assuming that cartoon was in fact assuming an RCP85 scenario. In my discussion with Brian I thought it was about 2.9, so that estimate was too low.
If I run the same exact same analysis using total anthropogenic forcing, which includes tropospheric ozone, aerosols and perhaps some other minor forcings I get:
# Total anthro. forcing: replace lines 27-30 (above) with the following: RCP = FORCING$RCP[1:4]; Period = paste(year.start,"-",year.stop,sep="") ANTHRO_RF = data.frame(RCP,FORCING$TOTAL_ANTHRO_RF[5:8] - FORCING$TOTAL_ANTHRO_RF) dT.med = ANTHRO_RF[,2]*(medianTCR.all/3.7) dT.mean = ANTHRO_RF[,2]*(meanTCR.all/3.7) > data.frame(Period,RCP,dT.med, dT.mean) Period RCP dT.med dT.mean 1 1950-2100 rcp26 0.853 0.876 2 1950-2100 rcp45 1.611 1.654 3 1950-2100 rcp60 2.180 2.238 4 1950-2100 rcp85 3.471 3.564
…again about 3.5 degrees for RCP85. That is just under the midpoint of the AR5 estimates, but the AR5 only estimates starting from 1986-2005, not 1950, and ends at 2081-2100, not 2100 itself. So my estimates are low compared to theirs. I'm not sure what the explanation is for it–there are a number of possibilities. If I use the midpoints of the AR5 time periods instead (1995, 2090), with these forcings as input:
RCP YEAR TOTAL_INCLVOLCANIC_RF VOLCANIC_ANNUAL_RF SOLAR_RF TOTAL_ANTHRO_RF GHG_RF KYOTOGHG_RF CO2CH4N2O_RF CO2_RF CH4_RF N2O_RF 231 rcp26 1995 1.64 0.0587 0.026 1.56 2.32 2.01 2.00 1.40 0.470 0.132 2311 rcp45 1995 1.64 0.0587 0.026 1.56 2.32 2.01 2.00 1.40 0.470 0.132 2312 rcp60 1995 1.64 0.0587 0.026 1.56 2.32 2.01 2.00 1.40 0.470 0.132 2313 rcp85 1995 1.64 0.0587 0.026 1.56 2.32 2.01 2.00 1.40 0.470 0.132 326 rcp26 2090 2.67 0.0000 0.174 2.50 3.05 2.95 2.82 2.30 0.284 0.231 3261 rcp45 2090 4.23 0.0000 0.174 4.06 4.43 4.34 4.24 3.51 0.427 0.306 3262 rcp60 2090 5.29 0.0000 0.174 5.12 5.52 5.42 5.34 4.45 0.505 0.386 3263 rcp85 2090 7.68 0.0000 0.174 7.51 7.78 7.69 7.48 5.97 1.055 0.454
I get these T anomalies as a result:
Period RCP dT.med dT.mean AR5.mid 1 1995-2090 rcp26 0.433 0.444 1.0 2 1995-2090 rcp45 1.145 1.176 1.8 3 1995-2090 rcp60 1.632 1.676 2.2 4 1995-2090 rcp85 2.726 2.799 3.7
If I use only WMGHG forcings instead of total anthro, I get:
Period RCP dT.med dT.mean AR5.mid 1 1995-2090 rcp26 0.334 0.343 1.0 2 1995-2090 rcp45 0.967 0.993 1.8 3 1995-2090 rcp60 1.465 1.504 2.2 4 1995-2090 rcp85 2.499 2.565 3.7
These values are quite a bit less than the midpoints of the AR5 estimates, for each scenario. I’m not sure what the cause is. Please contribute any ideas you may have.
NOTE: I rearranged the code part of the script above in the text file in the zip file mentioned below, for clarity.