How big is the uncertainty in the global temperature trend?

The global temperature record shows strong serial correlation. This boosts the uncertainty in the slope of the global warming trend. Here the uncertainty in the trend is derived using one of the satellite datasets.

warming in the satellite era

Data from satellites have been used to construct a global temperature record beginning in December 1978. This covers the recent warming period. The University of Alabama at Huntsville (UAH) 2LT product gives average temperature of the lower atmosphere derived from microwave radiances. Planck’s law says that microwave radiances are related to temperature.

The plot below shows UAH monthly time-series and a least-squares regression fit. The slope of the regression line is 0.013ºC/year (equivalent to 0.13°C/decade or 1.3°C/century). Also shown is the Gistemp global temperature time-series over the same time interval. Gistemp is based on surface weather stations. The trend in the Gistemp series is higher, 0.18°C/decade.


uncertainty in trend

A linear regression fit to global temperatures is a statistical model in which strong residual variations are superposed on a linear warming trend. The residual variations reflect “noise” in the climate system. ENSO, random events such as volcanos, and many other modes of variability contribute to the “noise”. The “uncertainty” in the global warming trend can be estimated in the context of this statistical model.

From this point of view, the UAH monthly data are one realisation of a random sample of length N. In reality we only have one sample, the UAH data from the real world. However, if repeated sampling and slope measurement were possible, it would yield a range of outcomes due to noise. The width of the resulting slope probability distribution reflects the uncertainty in the global warming trend. It is evident that there is strong serial correlation in the residuals. This enhances the uncertainty, because it reduces the effective number of independent degrees of freedom in the data. Fewer degrees of freedom means more uncertainty.

The UAH residuals are fit to an auto-regressive model to account for serial auto-correlation. The Akaike information criterion to choose an optimal order n. For UAH it  turns out that n=2, with coefficients 0.58  and 0.24. To find the slope probability distribution 10,000 time-series were used in a Monte Carlo simulation. Each simulated time-series assumes a UAH trend-line of 0.13°C/decade and an AR(2) noise term parameterized using the AR(2) model fit to the UAH residuals. Linear regression fit on each of these simulated time-series yields the slope probablity distribution.


A typical result is shown above along with a fit to the normal distribution. By construction the mean is 0.13°C/decade as expected. The standard error is 0.036°C/decade. This is 3.4 times greater than the standard error with independent and identically distributed (iid) residuals.

The 2σ confidence interval for UAH global temperature trend is 0.05 to 0.2°C/decade. Unfortunately, this is quite a wide window. Would another 30 years of data help? Assuming that the properties of the UAH time-series do not change, and extending the above simulation for another 30 years, the standard error is reduced from 0.035°C/decade to 0.026°C/decade. Better, but still a surprising degree of uncertainty.

R code

The above analysis was carried out using R functions ar() and arima.sim()

fitLin <-lm(GLOBAL~dates) # linear regression fit to GLOBAL= UAH global temperature, dates = UAH dates <- ar(residuals(fitLin)) # AR model for residuals
N=10000; # number of simulated UAH time-series
fits <- cbind(rep(0,N),rep(0,N))
trend <- coefficients(fitLin)[1] + dates*coefficients(fitLin)[2] # UAH trend line
#Monte Carlo
for( i in 1:N){
warming <- trend+arima.sim(n = NData, list(ar = c(ar.fitar[1], ar.fitar[2])), sd=sqrt(ar.fitvar.pred)) #generate sample fit.warm <- lm(warming~dates) # linear fit fits[i,1] <- coefficients(fit.warm)[1]; fits[i,2] <- coefficients(fit.warm)[2]; # slope of simulated data } library(MASS) # MASS library must be installed gf <- fitdistr(fits[,2],"normal") # fit a normal distribution to the slopes mn <-gfestimate[1] #mean
sig <- gf$estimate[2] #standard error



  1. Hi,

    Great example!

    I have tried to replicate these results using the R code. In the line: trend+arima.sim(n = NData…
    I am note sure i understand where Ndata comes from.


  2. Robert

    NData is just the number of UAH monthly data points (i.e. length(dates)). At the time of this post NData was 372. It is 383 now.



Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.