Forecasting the Eurozone Misery index

Is Miss Stagflation coming to visit?
The Misery index is the sum of inflation and unemployment rate. We would like them both to stay naturally low, and we are miserable when they are not. The index is currently floating in it’s record scratching levels. In this post I demonstrate the use of the nice FitAR package in R to fit an AR model and see what we can expect accordingly. Inflation and unemployment numbers concerning the Eurozone (17 countries) can be found here.
Have a look at the index over time:

Misery Index Over Time

Misery Index Over Time


An autoregressive model seems to be a reasonable idea and the FitAR package in R is quite flexible so lets use that one. Among the many options you can specify, you can select which lags are more influential according to some criterion. Our data is of monthly frequency so a maximum lag of 12 is a reasonable choice. Once we specify the maximum number of lags we can search for the best subset, according for example to AIC or BIC. The obvious advantage of such a model is its flexibility. We don’t need to model all 12 lags if, say, lag numbers 2 and 4 are not important. In that case, they will be omitted in the selection stage. On the downside, we lose the interpretation, go figure what is the meaning of a selection process which ends up with lags number 4,5 and 10.

A nice feature of the FitAR package is that the function SelectModel selects the lags in a smart way (according to some algorithm). So we do not scan all possibilities which will take forever, see reference below. The next two figures outline the number of variables and lag order chosen for the two most common criteria, BIC and AIC. There are four graphs corresponding with the maximum number of lags allowed, 6,12,18,24. The three different results correspond with the best three lag structures. You can see how much more likely is the best selection relative to its first runner-up on the right axis, this provides some confident when the difference is large. The left axis is just the value of the criterion, lower is better.

Number of lags and order according to the AIC criterion

Number of lags and order according to the AIC criterion. Maximum number of lags allowed, 6,12,18,24. The three different Lines correspond with the best three lag structures. You can see how much more likely is the best selection relative to its first runner-up on the right axis (named relative plausibility). The left axis is just the value of the criterion.

Number of lags and order according to the BIC criterion

Number of lags and order according to the BIC criterion. Maximum number of lags allowed, 6,12,18,24. You can see how much more likely is the best selection relative to its first runner-up on the right axis. The left axis is just the value of the criterion.


We can see that the BIC criterion is much more restrictive. We can see lag number one is important, as well as lag number two, though to a lesser extent according to Mr. BIC.

Next is to see what these models tell us about the future. The following figure present the forecast for the next 24 months (BIC only):

Misery Index Forecast for the next two years

Misery Index Forecast for the next two years (BIC criterion)


The short memory models in the upper half predict that things will get better. However, the “grownup” models, which have longer memory and can tell you something about life, predict that┬áMiss Stagflation is here to stay. Time will tell, I might have a look at the index in the future to see how these forecasts fare. Code and references are below. Thanks for reading.

Notes:
1. ARz means I used standard OLS for the lag structure selection. ARp will give you an ARIMA style which makes interpretation even harder.
2. there is also a good movie called Misery.
Code:

?View Code RSPLUS
options(digits = 4) ; library(FitAR)
y = ts(rev(read.table("/mindex1.txt",sep = "\t",header = F)[,2]) ,frequency = 12,  start = c(1995,1) ) 
par(mfrow=c(1,1))
plot(y, main = "Misery Index over Time", ylab = "Index", lwd = 2,ty = "b",cex.main = 2)
# Function to plot according to Criterion
critfun = function(crit){
ff = list() 
s <<- seq(6,24,6)
par(mfrow = c(2,2))
for (i in 1:4){
ff[[i]] = SelectModel(y,lag.max = s[i], ARModel="ARz", Criterion = crit,Best = 3,Candidates = 5) 
plot(ff[[i]])
}
list(ff = ff)
}
ff2 = critfun("BIC") # or "AIC", and there are more options
#ARp models the R function arima is used
#ARz algorithm of McLeod & Zhang (2006) 
## Create forecasts - 2 years ahead
ff3 = list() ; prediction = matrix(nrow = 24,ncol = 4) ; ycon = list()
for (i in 1:4){
ff3[[i]]  <- FitAR(y, ff2$ff[[i]][[1]]$p, ARModel="ARz")
prediction[,i] = ts(as.numeric(predict(ff3[[i]], n.ahead=24)$Forecasts),start = c(2012,4), frequency = 12)
ycon[[i]] = cts(y, prediction[,i]) # concatenate the original with the forecats
plot(window(ycon[[i]], start = c(1995,1)), type = "n" , ylab = "Misery Index", 
main = paste("24 months ahead forecasts, Max.lag is",s[i] ))
ycon2 = window(ycon[[i]],start = c(1995,1), end = c(2012,3))
ycon3 = window(ycon[[i]],start = c(2012,4) )
lines.ts(ycon2,col= 1,type="o", lwd=2, pch=16)
lines.ts(ycon3,col= (i+1),type="o",lwd=2, pch=16)
}

Resources:
PARTIAL AUTOCORRELATION PARAMETERIZATION FOR SUBSET AUTOREGRESSION
´╗┐

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>