Bank of America Corporate Bonds: Annual Rates

Here we use annual volatility to model bond rates: annual, end-of-year 1996-2024. We take Bank of America bond portfolios with the following seven rates: AAA, AA, A, BBB (investment-grade) and BB, B, CCC (junk, high-yield). Data and code are available on GitHub/asarantsev depository Annual-Bank-of-America-Rated-Bond-Data.

First, consider the rate on the last day of years 1996-2024. Below is the graph of them.

Let  R(t) be this rate at end of year  t. Model as an autoregression:

 R(t) - R(t-1) = a + bR(t-1) + \delta(t).

And the results are available in the table below. The last three columns are: Autocorrelation function for innovations, sum of absolute values of the first 5 lags (ACFO); same but for absolute values of innovations (ACFA); Pearson test for  b = 0.

Rate b  aStdev of residualsSkewKurtosisShapiro-Wilk  pJarque-Bera  pACFOACFAPearson Test  p
AAA-0.210.00810.0080.9941.2410.0290.0410.6290.6270.051
AA-0.230.00870.0090.7470.8420.1080.180.7160.9180.049
A-0.260.0110.010.5710.530.1380.3970.480.7440.043
BBB-0.330.0170.0120.7991.6710.090.0440.2620.6990.025
BB-0.460.0310.021.4793.9510.007<0.0010.4820.8140.009
B-0.570.0480.0261.6123.6290.003<0.0010.3660.7270.003
CCC-0.570.0820.0551.3382.0510.0070.0010.5760.6260.004

The autocorrelation function (ACF) plots for  \delta(t) and for  |\delta(t)| shows that this is well explained by independent identically distributed random variables (white noise). But these are not necessarily normal, judging by the Shapiro-Wilk and Jarque-Bera normality tests. Especially for junk-rated bonds (BB, B, CCC) but also sometimes for investment-grade bonds. The random walk hypothesis could be rejected (using low  p values) for all rates (even AAA is just barely above  5\% ). See also the plots below. We present only the plots for AAA, other ratings are similar. One can generate these graphs by running the code from the GitHub repository mentioned above.

As usual, we can improve fit and make innovations Gaussian by dividing them by annual volatility. Now we take average annual VIX instead of monthly. This parallels research by Angel Piotrowski mentioned in previous posts. But she computed annual realized volatility, and I use averaged VIX (implied volatility). Let us first fit the log Heston model for VIX 1996-2024:

 \ln V(t) = \alpha + \beta \ln V(t-1) + W(t).

Here,  \alpha = 1.41 and  \beta = 1 - 0.475. Next,  R^2 = 23.5\% and  p = 0.9\% for Student  t test for  \beta = 1. The standard deviation for  W(t) is  0.247. The normality tests for innovations  W(t) give us  p = 27.5\% for Shapiro-Wilk and  p = 60.8\% for Jarque-Bera. The plots for ACF of  W(t) and for  |W(t)| show independent identically distributed. See below. Thus the log volatility is indeed modeled by the autoregression of order 1, statistically significantly mean-reverting, with Gaussian innovations. This is similar to Angel Piotrowski’s research.

Consider the autoregression with normalization of innovations  \delta(t) by dividing them by volatility  V(t). We have then

 R(t) = a + bR(t-1) + V(t)\,\varepsilon(t).

Divide by VIX and then get an ordinary least squares regression with residuals  \varepsilon(t) without intercepts. Let us add intercepts:

 R(t) = a + bR(t-1) + cV(t) + V(t)\,\varepsilon(t).

Results are available below in the table: Coefficients and analysis of innovations  \varepsilon(t).

Rate a  b  10000*c Stdev SkewKurtS-W J-B ACFOACFA
AAA0.01-0.14-2.410.000370.7740.66422%19%0.3520.816
AA0.0099-0.116-2.780.00040.670.80743%24%0.4020.924
A0.0087-0.157-1.060.000440.3420.293%74%0.3950.963
BBB0.0099-0.279-2.10.000510.039-0.496%91%0.4050.779
BB0.015-0.53910.00.000760.303-0.2188%79%0.6560.594
B0.0235-0.7720.30.000960.35-0.12646%74%0.5760.722
CCC0.0217-0.7341.50.001980.580.2536%44%0.8170.948

All correlation between  W(t) and  \varepsilon(t) are not statistically significant. For investment-grade ratings, we have  p higher than 5% for all coefficients. But for junk ratings,  p < 5\% for  b = 0. And for the two bottom ratings,  p < 5\% for  c = 0. Next,  R^2 for linear regression with  cV(t) for most ratings is much higher than without it. So we need to include this term.

Thus we see a joint model: For  \beta \in (0, 1) and  b \in (-1, 0) we get:

 \ln V(t) = \alpha + \beta \ln V(t-1) + W(t)

 R(t)  - R(t-1) = a + bR(t-1) + cV(t) + V(t)\varepsilon(t)

 (W(t), \varepsilon(t)) \sim \mathcal N_2([0, 0], \Sigma) IID

As discussed, we might consider  \Sigma to be the diagonal matrix, but might as well make it a complete matrix. This model fits very well. A disadvantage is that we have only ~30 years of data. We do need to normalize innovations of rates by dividing these by VIX. We do need the term  cV(t).

In our previous research, we proved long-term stability of this bivariate model. This is true not just for Gaussian innovations, but for more general cases, under certain conditions.

We continue this research in the next post, where we model total returns.

Published by


Responses

  1. Bank of America rated bonds: Annual Returns – My Finance

    […] of research in github.com/asarantsev repository Annual-Bank-of-America-Rated-Bond-Data from my previous post. Consider total returns computed from total wealth process as log change: If these were Treasury […]

    Like

  2. Investment-Grade Corporate Bond Returns 1972-2024 – My Finance

    […] the two previous blog posts, we considered rates and returns for Bank of America-rated corporate bond portfolios, with ratings AAA, AA, A, BBB, BB, […]

    Like

  3. Annual Corporate Bank of America Rates – My Finance

    […] from the previous post, which in turn continues the two posts of annual Bank of America-rated bond rates and returns. We fit the 1996-2024 data for corporate bond returns and […]

    Like

Leave a reply to Annual Corporate Bank of America Rates – My Finance Cancel reply