US Interest Rate Inversion Project

Introduction

This research aims at exploiting the cointegrating relationship among the Federal Funds Target Rate (hereby “The Fed Fund Rate”), US Short-term Treasury Yields (hereby “2-year Yields”), and US Long-term Treasury Yields (hereby “10-year Yields”). The dicretion over 2-year and 10-year is based on focus of market participants.

The Fed Fund Rate is the so-called overnight rate. In theory there’s a positive term premium added to the Fed Fund Rate for any federal government debt security with longer maturity. In normal times the longer the maturity, the high the term premium also to reflect positive inflation outlook, creating a positive-sloping yield curve.

Since the Fed Fund Rate is a stipulated rate and treasury yields are market-decided, the yield curve is a good barometer of the market’s perspection of future economic prospect.

In times of worsening economic conditions, yield curve may flatten and even inverse because the term premium becomes significantly negative, while the short-end rate is the stipulated Fed Fund Rate. That is, market often reacts before the Federal Open Market Committee meetings.

Brief Thereotical Structure

One often quoted method to decompose the treasury yield is the ACM method, named after three NY Fed Economists Tobias Adrian, Richard Crump, and Emanuel Moench. (can be accessed here: [link] https://www.newyorkfed.org/research/data_indicators/term_premia.html).

They propose any treasury yield can be decomposed into: Nominal Yield = Short-term Interest Rate Expectation + Term Structure.

2-Year T-Bill Yield ACM Decompoistion

10-Year T-Bill Yield ACM Decompoistion

ACM Method Short-term Expected Interest Rate and Fed Fund Rate

As shown below, the Fed Fund Rate correlates with the short-term expected interest rate in the ACM method. For generality, in the following study, we will study the relationship between Fed Fund Rate and the Treasury yields of 2 years and 10 years.

Exploration of Data Relationship

In the following I’ll explore relationship of these interest rate variables.

First, I examine the cointergration relationship between 2-year yields and fed fund rate, and 10-year yields and fed fund rate.

  1. 2Y_Yield ~ 10Y_Yield + FedFund
lm(data = data_xts, X2Y_nominal ~ Fedfund + X10Y_nominal) %>% residuals() %>% checkresiduals()
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.

  1. 10Y_Yield ~ 2Y_Yield + FedFund
lm(data = data_xts, X10Y_nominal ~ Fedfund + X2Y_nominal) %>% residuals() %>% checkresiduals()
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.

As it shows, both residuals have long-memory structures and thus are not white noises. We turn to analyzing the spread between 2-Year Yield and 10-Year Yield, and 2-Year Yield and Fed Fund Rate

  1. (2Y_Yield - 10Y_Yield) ~ (2Y_Yield - Fed Fund Rate)
lm(data = data_sprd_xts, X2Y_10Y ~ X2Y_FFR) %>% residuals() %>% checkresiduals()
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.

  1. (10Y_Yield - 2Y_Yield) ~ (10Y_Yield - Fed Fund Rate)
lm(data = data_sprd_xts, X10Y_2Y ~ X10Y_FFR) %>% residuals() %>% checkresiduals()
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.

The result above is in line with the autocorrelated term premium from the ACM method.

ACM$X2Y_trmprm %>% checkresiduals()
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.

Still, we can try to employ a VECM structure to see if it works.

Two sets of VECM is considered, one in level, and the other in spread.

  1. Level VECM
data %>% dplyr::select(X2Y_nominal, X10Y_nominal, Fedfund) %>%
  VECM(lag = 2) %>% summary()
## #############
## ###Model VECM 
## #############
## Full sample size: 700    End sample size: 697
## Number of variables: 3   Number of estimated slope parameters 24
## AIC -4920.866    BIC -4802.649   SSR 292.9398
## Cointegrating vector (estimated by 2OLS):
##    X2Y_nominal X10Y_nominal    Fedfund
## r1           1   -0.4520044 -0.5050918
## 
## 
##                       ECT                Intercept          
## Equation X2Y_nominal  -0.0586(0.0302).   -0.0077(0.0156)    
## Equation X10Y_nominal -0.0584(0.0230)*   -0.0091(0.0119)    
## Equation Fedfund      0.1434(0.0302)***  0.0134(0.0156)     
##                       X2Y_nominal -1    X10Y_nominal -1    
## Equation X2Y_nominal  0.2415(0.0695)*** -0.0626(0.0831)    
## Equation X10Y_nominal 0.2176(0.0531)*** -0.1632(0.0634)*   
## Equation Fedfund      0.6924(0.0697)*** -0.3695(0.0832)*** 
##                       Fedfund -1          X2Y_nominal -2     
## Equation X2Y_nominal  -0.0285(0.0405)     -0.0938(0.0730)    
## Equation X10Y_nominal -0.0276(0.0310)     0.0447(0.0557)     
## Equation Fedfund      0.2490(0.0406)***   0.0635(0.0731)     
##                       X10Y_nominal -2     Fedfund -2        
## Equation X2Y_nominal  -0.0163(0.0833)     0.0396(0.0338)    
## Equation X10Y_nominal -0.1307(0.0636)*    0.0229(0.0258)    
## Equation Fedfund      -0.0193(0.0834)     -0.0751(0.0339)*
  1. Spread VECM
data_sprd_xts %>% dplyr::select(X10Y_2Y, X2Y_FFR) %>%
  VECM(lag = 2) %>% summary()
## #############
## ###Model VECM 
## #############
## Full sample size: 700    End sample size: 697
## Number of variables: 2   Number of estimated slope parameters 12
## AIC -2934.631    BIC -2875.523   SSR 204.2223
## Cointegrating vector (estimated by 2OLS):
##    X10Y_2Y    X2Y_FFR
## r1       1 -0.5345992
## 
## 
##                  ECT                 Intercept          X10Y_2Y -1        
## Equation X10Y_2Y -0.0168(0.0119)     0.0125(0.0136)     0.0267(0.0399)    
## Equation X2Y_FFR 0.1091(0.0226)***   -0.0896(0.0258)*** 0.7186(0.0755)*** 
##                  X2Y_FFR -1         X10Y_2Y -2          X2Y_FFR -2        
## Equation X10Y_2Y -0.0482(0.0196)*   -0.0546(0.0425)     0.0198(0.0181)    
## Equation X2Y_FFR 0.1151(0.0370)**   0.2281(0.0804)**    -0.1395(0.0342)***
data_sprd_xts %>% dplyr::select(X10Y_2Y, X10Y_FFR) %>%
  VECM(lag = 2) %>% summary()
## #############
## ###Model VECM 
## #############
## Full sample size: 700    End sample size: 697
## Number of variables: 2   Number of estimated slope parameters 12
## AIC -2961.222    BIC -2902.113   SSR 214.3326
## Cointegrating vector (estimated by 2OLS):
##    X10Y_2Y   X10Y_FFR
## r1       1 -0.5572344
## 
## 
##                   ECT                Intercept          
## Equation X10Y_2Y  0.0249(0.0195)     -0.0085(0.0112)    
## Equation X10Y_FFR 0.2689(0.0380)***  -0.0829(0.0219)*** 
##                   X10Y_2Y -1         X10Y_FFR -1        X10Y_2Y -2        
## Equation X10Y_2Y  0.0363(0.0431)     -0.0397(0.0199)*   -0.1023(0.0435)*  
## Equation X10Y_FFR 0.5551(0.0840)***  0.1114(0.0389)**   0.2054(0.0850)*   
##                   X10Y_FFR -2       
## Equation X10Y_2Y  0.0269(0.0184)    
## Equation X10Y_FFR -0.0754(0.0360)*

Summary

From the results above, excluding formulas with positive EC term, it seems the level ECM for 10-Year Yield is the more ideal result. In general, the coefficient of -0.0584 can be intepreted by the speed of reversion is -0.058% every month.