Logo Icon

Recession Forecasting Iii: A Better Naive Forecast

Note: This post is NOT financial advice! This is just a fun way to explore some of the capabilities R has for importing and manipulating data.

In Recession Forecasting Part II, I compared the accuracy of Hussman’s recession forecasts to the accuracy of a naive forecast that assumed the current state of the recession variable would continue next month.

An anonymous commentator pointed out a great error in the naive forecast, which is that the NBER BACKDATES their recession indicator. In other words, a recession may start, but you would not know about it for up to 6 months. Therefore, assuming the naive forecast would know of the recession in the second month is akin to predicting the future.

This creates the need for a naive forecast that only has access to the information available at a given point in time. Fortunately, our anonymous commentator kindly provided this data, which he constructed using the recession announcement dates from the NBER. Previous to 1980, he assumed a 6-month lag in identifying turning points. This data is available as an excel spreadsheet (with commentary) and a csv file (suitable for import into R).

Using this modified dataset, we can construct truly naive recession forecast, which assumes that the current known state of the recession variable will continue indefinitely.

library(xts)
set.seed(42)

ModRec <- read.csv("http://dl.dropbox.com/u/7428423/Modified%20NBER%20Recession%20Data.csv")  # File is gone
ModRec$DATE <- as.Date(ModRec$DATE)
ModRec <- xts(ModRec[,-1],order.by=ModRec[,1])

#Load actual recessions
library(quantmod)
getSymbols('USREC',src='FRED')

#Check that actual recession values from the 2 datasets match
Check <- as.data.frame(cbind(ModRec,USREC))
all.equal(Check[,'VALUE'],Check[,'USREC'])

#Compare naive forecast to actuals
library(caret)
ModRec <- ModRec["1997-07-01::",] #Start from same period as Hussman's model
naiveforecast <- Lag(ModRec[,'MODIFIED.VALUE'],1)
actual <- ModRec[,'VALUE']
compare <- na.omit(merge(naiveforecast,actual))
confusionMatrix(compare[,1],compare[,2],positive = '1')

This naive forecast is 66.9% accurate, which is pretty good. This number also make a lot more intuitive sense than the 97.6% accuracy of my previous naive forecast. Compared to this new metric, Hussman’s accuracy of 81.6% is actually quiet good. However, keep in mind that Hussman’s “future” knowledge of past recessions may have biased his selection of variables and parameters.

Finally, Hussman’s model uses Stock Prices, PMI, the yield curve, credit spreads, and employment as inputs. I was wondering if there are any significant lags in any of these variables that could introduce look-ahead bias into my implementation of Hussman’s model.

stay in touch