Including bond factors into the new Gaussian model

Recall this blog post where we modeled stock returns using bond spreads. It continues this blog post, which, in turn, improves upon this foundational post.

I wish to include the risk spreads BAA-AAA or BAA-Long as factors for stock returns, continuing this research. We use the valuation measure based on one-year dividends not ten-year earnings. Also, maybe bond returns, continuing this blog post.

Maybe these risk spreads will improve our prediction. But we need to ensure that innovations and residuals are independent identically distributed and Gaussian.

Also, the term spread Long-Short might be useful. But it does not fit our Gaussian assumptions for innovations.

Finally, include Long in our model, since this will allow us to model long-term Treasury returns. Indeed, Long corresponds to 10-year yields but with coupons. This makes it difficult to compute returns explicitly. However, we have 10-year and 9-year zero-coupon bonds which have yields very close to these 10-year coupons. See the Federal Reserve Economic Data. Indeed, let  R(t) be the end-of-year (December daily average, more precisely) rate (assuming these three rates are the same). Then the price of a 10-year zero-coupon bond at end of year  t-1 is  P_0 = (1 + R(t-1)/100)^{-10} and it becomes a 9-year zero-coupon bond with rate  R(t) by end of year  t with price  P_1 = (1 + R(t)/100)^{-9} and the geometric returns are  Q = \ln(P_1/P_0).

We can compute returns for zero-coupon bonds, because we compute its price explicitly. A big difficulty from this post is that Long rates do not have residuals which are independent identically distributed and Gaussian.

Note that, unfortunately, in our previous research we used the long rates which are time-inconsistent: DGS10 are taken to be end-of-year, but LTGOV which precede DGS10 are December monthly average. Only in a recent post we correct this, taking both to be monthly average, when we unsuccessfully fit autoregression for long-short bond spread (with and without volatility).

The Python file and data.xlsx in the same GitHub repository shows that we tried to fit Long separately, with and without volatility, and failed. We also tried with (BAA, Long) with and without volatility as vector autoregression, and failed. Finally, we tried the BAA-Long spread, and also did not succeed.

Further tries to switch to log rates instead of rates failed for the Long and combined model. Except one: If we take log of spread, then this fits autoregression without volatility normalization. Together with the model for the BAA rate, this gives us the right model. In fact, we succeeded in our modeling: For  R_1(t) =  \ln(BAA)(t) and  R_2(t) = \ln(\ln(BAA) - \ln(Long))(t) we model  R_1(t) = a + bR_1(t-1) + Z_{1}(t)V(t) and  R_2(t) = c + dR_2(t-1) + Z_{2}(t) for Gaussian independent identically distributed  Z_1, Z_2.

Finally, we consider regression of US stock normalized returns upon the spreads. We try 12 versions, with various combinations of volatility, 6 with original spreads and 6 with log spreads. But we could accept only two versions out of these 12:  Q(t)/V(t) = m + S(t)/V(t) + W(t) with  S(t) standing for either the spread or the log spread. We prefer the model with the log spread because the p-values for the Ljung-Box test are further from 0.05.

This implies we should use this regression of log spreads divided by volatility as a factor in our further models. See the same GitHub repository.

Published by


Leave a comment