John Hussman has a recession forecasting methodology he often posts about on his blog, and I am trying to replicate it using publicly available data. I would like to assess his accuracy in predicting recessions, and try my own hand at the same problem. Here is Dr. Hussman's criteria for a recession 'warning:'
1: Widening credit spreads: An increase over the past 6 months in either the spread between commercial paper and 3-month Treasury yields, or between the Dow Corporate Bond Index yield and 10-year Treasury yields.
2: Falling stock prices: S&P 500 below its level of 6 months earlier. This is not terribly unusual by itself, which is why people say that market declines have called 11 of the past 6 recessions, but falling stock prices are very important as part of the broader syndrome.
3: Weak ISM Purchasing Managers Index: PMI below 50, or,
3: (alternate): Moderating ISM and employment growth: PMI below 54, coupled with slowing employment growth: either total nonfarm employment growth below 1.3% over the preceding year (this is a figure that Marty Zweig noted in a Barron's piece many years ago), or an unemployment rate up 0.4% or more from its 12-month low.
4: Moderate or flat yield curve: 10-year Treasury yield no more than 2.5% above 3-month Treasury yields if condition 3 is in effect, or any difference of less than 3.1% if 3(alternate) is in effect (again, this criterion doesn't create a strong risk of recession in and of itself).
Here's my interpretation of what that actually means:
1. 6 month change in [3-Month AA Financial Commercial Paper Rate]-[3-Month Treasury Constant Maturity Rate (GS3M)] > 0
2. 6 month change in the S&P 500 monthly closing price < 0
3. PMI < 50
3b. OR [PMI < 54] AND [the 6-month % change in employment < 1.3]
4. [3-Month Treasury Constant Maturity Rate]-[10-Year Treasury Constant Maturity Rate] < 2.5 OR (if 3b, < 3.1)
Does this seem like the correct interpretation of John Hussman's methodology? Am I missing anything important? Once I'm certain of the correct data and correct calculations, I'll post some code in R to automatically calculate the 'recession warning' index.
Edit: Here is the code I have so far in R, I welcome any comments here or on my blog.
#Code to re-create John Hussman's Recession warning index
#http://www.hussmanfunds.com/wmc/wmc110801.htm
#R code by Zach Mayer
rm(list = ls(all = TRUE)) #CLEAR WORKSPACE
library(quantmod)
#################################################
# 1. Credit spreads
#################################################
getSymbols('CPF3M',src='FRED') #3-Month Financial Commercial Paper
getSymbols('GS3M',src='FRED') #3-Month Treasury
CS <- na.omit(CPF3M-GS3M)
#6 month increase
CS <- na.omit(CS-Lag(CS,6))
names(CS) <- 'CS'
#################################################
# 2. Stock Prices
#################################################
getSymbols('SP500',src='FRED')
SP500 <- Cl(to.monthly(SP500))
#Re-index to start of month
library(lubridate)
index(SP500) <- as.Date(ISOdate(year(index(SP500)),month(index(SP500)),1))
#6 month increase
SP500 <- na.omit(SP500-Lag(SP500,6))
names(SP500) <- 'SP500'
#################################################
# 3. ISM Purchasing Managers index
#################################################
#A. PMI
getSymbols('NAPM',src='FRED') #Non-farm emploment
PMI <- NAPM
names(PMI) <- 'PMI'
#B. Employment
getSymbols('PAYEMS',src='FRED') #Non-farm emploment
PAYEMS <- na.omit((PAYEMS-Lag(PAYEMS,12))/Lag(PAYEMS,12)) #12 month increase
names(PAYEMS) <- 'PAYEMS'
#################################################
# 4. Yield Curve
#################################################
getSymbols('GS10',src='FRED') #3-Month Treasury
YC <- na.omit(GS10-GS3M)
names(YC) <- 'YC'
#################################################
# Put it all together
#################################################
P.A <-(CS>0) & #1. Credit spreads widening over 6 months
(SP500<0) & #2. Stocks falling over 6 months
(PMI<50) & #3. PMI below 50
(YC<2.5) #4. 10 year vs 3 year yields below 2.5%
P.B <- (CS>0) & #1. Credit spreads widening over 6 months
(SP500<0) & #2. Stocks falling over 6 months
(PMI<54) & #3. PMI below 54
(PAYEMS<1.3) & #3.B 1Y employment growth below 1.3%
(YC<3.1) #4. 10 year vs 3 year yields below 2.5%
P.Rec <- P.A | P.B
names(P.Rec) <- 'P.Rec'
P.Rec$P.Rec <- as.numeric(P.Rec$P.Rec)
#Actual Recessions
getSymbols('USREC',src='FRED')
chartSeries(P.Rec)
chartSeries(USREC)
#Compare
ReccessionForecast <- na.omit(cbind(P.Rec,USREC))
start <- min(index(ReccessionForecast))
ReccessionForecast <- ts(ReccessionForecast,frequency=12,start=c(year(start),month(start)))
plot(ReccessionForecast)