In last week’s Economic Forecasting and Analysis class, we
talked about how the yield curve could be used to predict economic recessions.
There is a deep literature on this topic going back to the late 1980s. The
basic idea is that the market for government bonds is very sensitive to monetary
policy. Normally, the yield curve is upward sloping, the difference between
yields of long bonds (say 10 years) and short bonds (3 month T bills) is
positive to compensate investors for the additional risk in holding bonds for
longer periods of time. In recessions,
central banks cut benchmark interest rates in order to stimulate the economy. A
reduction in interest rates lowers the yield on new issues of government bonds.
Consequently, if the bond market expects a recession and a cut in central bank
rates, bond investors will start selling short term bonds and buy long term
bonds to lock in the higher yields. This pushes the price of long bonds up and
reduces the price of short bonds. Since bond prices and yields are inversely
related, short yields rise and long yields fall. The yield curve inverts when
the yield spread becomes negative.
The Federal Reserve Bank of New York has been actively studying
this topic for a long time, and there is lots of useful information posted on
their website. The existing literature shows that the yield spread is a good
predictor of recessions one year into the future. The New York Fed posts data on the NBER dating of
US recessions and the yield spread and uses this data to estimate the
probability of a US recession using a probit model. The dependent variable is a
binary variable equal to one if the economy is currently in a recession and zero otherwise.
The independent variable is a 12 month lag of the yield spread. The New York
Fed posts the data, model results, and recession probability chart but this is
still a worthy exercise to work through. For estimation in R, I have loaded the data into a csv file with the spread variable lagged 12 months.
Here is the probit regression output.
Deviance Residuals:
Min 1Q Median 3Q Max
-2.4163 -0.5152 -0.2630 -0.1147 2.8313
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.54086 0.08047 -6.721 1.8e-11 ***
Spread -0.65560 0.06702 -9.782 < 2e-16 ***
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 540.93 on 673 degrees of freedom
Residual deviance: 398.29 on 672 degrees of freedom
AIC: 402.29
Number of Fisher Scoring iterations: 6
The estimated
parameter values are close but not identical to the ones from the New York Fed (intercept = -0.5330, slope = -0.6330.
Different estimation procedures for probit may be the result of the minor differences
in results.
Here is the probability of US recession chart.
Probabilities over 40% seem to be accurate predictors of future recessions.
The probit estimates can be used to predict the probability
of a US recession. The following table shows the probabilities for the next 12
months. The probability of a US recession 12 months from now is currently very
low at 6.6%.
recession prob 2016/2017
March 0.03154117 3
April 0.03596135 4
May 0.02441563 5
June 0.01899524 6
July 0.02056696 7
Aug 0.02757996 8
Sept 0.02556458 9
Oct 0.02972609 10
Nov 0.02595748 11
Dec 0.03154117 12
Jan 0.04087655 1
Feb 0.06621488 2
The R script is posted below.
#########################################################
# Economic forecasting and analysis
# April 2016
# Perry Sadorsky
# Predicting US Recessions Using the Yield Curve
##########################################################
# model and data from:
# https://www.newyorkfed.org/research/capital_markets/ycfaq.html
Book1 <- read.csv("C:/recessions/Book1.csv")
View(Book1)
mydata = ts(Book1, start=1960, freq =12)
myprobit <- glm(NBER_Rec ~ Spread, family=binomial(link="probit"), data=mydata)
summary(myprobit)
prob_in = predict(myprobit,
type = "response")
plot(prob_in)
df1 = cbind(mydata[,"Spread"], prob_in)
plot(df1[,2], main="Probability of US recession", ylab="", xlab="")
newdata = data.frame(Spread = c(2.01,
1.92,
2.18,
2.34,
2.29,
2.10,
2.15,
2.05,
2.14,
2.01,
1.83,
1.47
))
prob_out = predict(myprobit, newdata,
type = "response")
prob_out
prob_out_t = cbind(prob_out,c(seq(from = 3,to = 12, by=1),1,2))
colnames(prob_out_t)=c("recession prob", "2016/2017")
prob_out_t
rownames(prob_out_t) = c("March", "April","May", "June", "July","Aug", "Sept","Oct", "Nov", "Dec","Jan", "Feb" )
prob_out_t
# Economic forecasting and analysis
# April 2016
# Perry Sadorsky
# Predicting US Recessions Using the Yield Curve
##########################################################
# model and data from:
# https://www.newyorkfed.org/research/capital_markets/ycfaq.html
Book1 <- read.csv("C:/recessions/Book1.csv")
View(Book1)
mydata = ts(Book1, start=1960, freq =12)
myprobit <- glm(NBER_Rec ~ Spread, family=binomial(link="probit"), data=mydata)
summary(myprobit)
prob_in = predict(myprobit,
type = "response")
plot(prob_in)
df1 = cbind(mydata[,"Spread"], prob_in)
plot(df1[,2], main="Probability of US recession", ylab="", xlab="")
newdata = data.frame(Spread = c(2.01,
1.92,
2.18,
2.34,
2.29,
2.10,
2.15,
2.05,
2.14,
2.01,
1.83,
1.47
))
prob_out = predict(myprobit, newdata,
type = "response")
prob_out
prob_out_t = cbind(prob_out,c(seq(from = 3,to = 12, by=1),1,2))
colnames(prob_out_t)=c("recession prob", "2016/2017")
prob_out_t
rownames(prob_out_t) = c("March", "April","May", "June", "July","Aug", "Sept","Oct", "Nov", "Dec","Jan", "Feb" )
prob_out_t