In this project, we evaluate different models for forecasting one-year-ahead March inflation in order to build a time series of March real interest rates. In particular, we compare the predictive accuracy between two models: AR(1) and Simple Exponential Smoothing (SES). We evaluate the predictive accuracy of one-year-ahead forecasts using roll-forward partioning, where the training window is expanded by one observation for every one-year-ahead forecast. Throughout this process, we attempt to find the optimal learning rate, alpha, for SES.
Our results reveal that there is no significant difference between an AR(1) and SES in terms of forecasting accuracy. No rate of alpha could alter these results.
Finally, we plot a times series of real interest rates, in which the values from the one-year-ahead AR(1) and SES forecasts are used as proxies for expected inflation.
March 10-, 5-, 3-, and 1-Year Treasury yields (Constant Maturity) from 1954 to 2018
March CPI from 1947 to 2019
March inflation from 1948 to 2019, which is computed by taking the difference of logs of consecutive March CPI’s,like so: inflation[y] = log(CPI[y]) - log(CPI[y-1])
We use the data frame \(rates.yearly\) to store 18 variables:
\(date\), which stores annual dates from March 1954 to March 2018
\(tcmnom\)_\(y10\), the 10-Year Treasury Yield (CM) used as a proxy for the nominal rate
\(tcmnom\)_\(y5\), the 5-Year Treasury Yield (CM)
\(tcmnom\)_\(y3\), the 3-Year Treasury Yield (CM)
\(tcmnom\)_\(y1\), the 1-Year Treasury Yield (CM)
\(pi.realized\) stores the one-year-ahead inflation rate relative to the nominal rate (i.e. inflation at \(t+1\)), from March 1955 to March 2019
\(r\)_\(y10\), the 10-Year realized real interest rate from March 1954 to March 2018, which is computed the following way: tcmnom_y10 - pi.realized
\(r\)_\(y5\), the 5-Year realized real interest rate
\(r\)_\(y3\), the 3-Year realized real interest rate
\(r\)_\(y1\), the 1-Year realized real interest rate
\(r\)_\(y10.ar1.roll\) stores the 10-Y real rate forecasted using one-year-ahead AR(1) forecasts of inflation with roll-forward partioning
\(r\)_\(y10.ses.roll\) stores the 10-Year real rate forecasted using one-year-ahead Simple Exponential Smoothing forecasts of inflation with roll-forward partioning
\(r\)_\(y5.ar1.roll\) stores the forecasted 5-Y real rate using AR(1)
\(r\)_\(y5.ses.roll\) stores the forecasted 5-Y real rate using SES
\(r\)_\(y3.ar1.roll\) stores the forecasted 3-Y real rate using AR(1)
\(r\)_\(y3.ses.roll\) stores the forecasted 3-Y real rate using SES
\(r\)_\(y1.ar1.roll\) stores the forecasted 1-Y real rate using AR(1)
\(r\)_\(y1.ses.roll\) stores the forecasted 1-Y real rate using SES
In order to build a times series of real interest rates, we attempt to find the best model for predicting inflation based on litterature and statistical testing. Autocorrelation plots as well as the Bayesian Information Criterion (BIC) suggest that March inflation follows an AR(1) process (although Dickey-Fuller suggests otherwise). We wanted to test the AR(1) against a Simple Exponential Smoothing (SES) model knowing that stationary models of inflation tend to perform worse than models which account for a time varying mean (“Forecasting Inflation” by Faust and Wright). We try to to find the optimal learning rate, alpha, for SES and set it to a default value of 0.2. It is important to note, however, that a high learning rate (alpha) leads to overfitting (“Practical Time Series Forecasting with R” by Schmueli and Lichtendahl Jr).
We first estimate an AR(1) and a SES model on inflation. The Diebold-Mariano test reveals no significant difference between the two models. This is true for any rate of alpha.
Then, we measure the long-term forecasting accuracy of AR(1) and SES using fixed partioning (i.e. the training set is fixed throughout the forecast horizon). The 30-year-ahead forecast spans from March 1989 up to March 2019. No significant difference was found between the two forecasts at any level of alpha.
Roll-forward partioning was used next to forecast one-year-ahead between 1955 and 2019. With roll-forward partioning, the size of the training set increases by one for each one-year-ahead forecast as we add the next observed (realized) datapoint to the set. Roll-forward partitioning enables us to generate multiple one-year-ahead forecasts and thus gain a more accurate understanding of how the forecast peforms on average. No significant difference was found between AR(1) and SES.
Finally, we plot four graphs for every type of interest rates (10Y, 5Y, 3Y, & 1Y), each of which contains the following curves from March 1954 to March 2018:
the realized real rate (nominal rate minus one-year-ahead realized inflation)
the forecasted real rate using AR(1) roll-forward forecasts of inflation
the forecasted real rate using SES roll-forward forecasts of inflation
1. Plotting Realized Inflation
Geometric Decay of autocorrelations suggests AR(1)
Large significant autocorrelation at lag 1 suggests AR(1)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.4825 -0.6451 0.3273 1.3877 9.6189
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -0.11793 0.06267 -1.882 0.0642 .
## z.diff.lag -0.15213 0.11550 -1.317 0.1922
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.205 on 68 degrees of freedom
## Multiple R-squared: 0.09214, Adjusted R-squared: 0.06544
## F-statistic: 3.451 on 2 and 68 DF, p-value: 0.03738
##
##
## Value of test-statistic is: -1.8817
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.6 -1.95 -1.61
Suprisingly, Dickey-Fuller Test reveals a unit root (cannot reject null a 5% lvl), therefore, inflation series follows a random walk. This is contrary to the findings using monthly data and annual January data
## Series: pi.ts
## ARIMA(1,0,0) with non-zero mean
##
## Coefficients:
## ar1 mean
## 0.630 3.4359
## s.e. 0.091 0.6565
##
## sigma^2 estimated as 4.574: log likelihood=-156.14
## AIC=318.28 AICc=318.63 BIC=325.11
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.03752273 2.108838 1.437376 151.9024 238.1562 0.9412812
## ACF1
## Training set -0.03594673
However, model selection using BIC still suggests AR(1).
2. Comparing Ar(1) with Simple Exponential Smoothing (SES)
## [1] "RMSE for AR(1):"
## [1] 2.108838
## [1] "RMSE for SES:"
## [1] 2.267202
##
## Diebold-Mariano Test
##
## data: ar1.mod$residualsses.mod$residuals
## DM = -0.93116, Forecast horizon = 1, Loss function power = 2, p-value =
## 0.3549
## alternative hypothesis: two.sided
RMSE of AR(1) is 2.102 which is lower than for SES (RMSE= 2.267). The Diebold-Mariano test shows no significant difference in accuracy between both models at a 5% lvl (p-value for two-sided test = 0.354). No rate of alpha could change this.
1. 30-year-ahead Forecast with fixed partitioning (forecast horizon: 1990 to 2019)
## [1] "RMSE of AR(1) forecast:"
## [1] 2.112149
## [1] "RMSE of SES forecast:"
## [1] 2.501827
##
## Diebold-Mariano Test
##
## data: ar1.fixed$residualsses.fixed$residuals
## DM = -1.0844, Forecast horizon = 1, Loss function power = 2, p-value =
## 0.2845
## alternative hypothesis: two.sided
RMSE for AR(1) is lower than for SES. D-M test reveals no significant difference in accuracy at a 5% lvl. Again, no significant value for alpha.
2. Forecasting with Roll-Forward partitioning (horizon: 1955 to 2019)
## [1] "RMSE for recursive AR(1)"
## [1] 2.100374
## [1] "RMSE for recursive SES"
## [1] 2.065069
##
## Diebold-Mariano Test
##
## data: valid.roll - ar1.rollvalid.roll - ses.roll
## DM = 0.28795, Forecast horizon = 1, Loss function power = 2, p-value =
## 0.7743
## alternative hypothesis: two.sided
In this case, RMSE for SES is lower than for AR(1), however, the difference is not significant at a 5% lvl. No value of alpha can change this.
Conclusion: There is no significant difference between AR(1) and SES long-term forecasts. This is also true for one-year-ahead forecasts.
In the graph above, we can see the nominal rate plotted against the realized real rate as well as the forecasted real rates. For each forecasted real rate (AR(1) & SES), the value of \(r\) at year \(y\) is computed by subtracting forecasted inflation at year \(y+1\) from the nominal rate at year \(y\).
Forecasting Inflation: Faust & Wright, Chapter Chapter 1 in Handbook of Economic Forecasting, 2013, vol. 2, pp 2-56 from Elsevier
TS forecasting in R: Schmueli, G. C., & Lichtendahl, K. C. (2016). Practical Time Series Forecasting in R (2nd ed.). Axelrod Schnall.