Title: | Forecast Combinations |
---|---|
Description: | Aim: Supports the most frequently used methods to combine forecasts. Among others: Simple average, Ordinary Least Squares, Least Absolute Deviation, Constrained Least Squares, Variance-based, Best Individual model, Complete subset regressions and Information-theoretic (information criteria based). |
Authors: | Eran Raviv |
Maintainer: | Eran Raviv <[email protected]> |
License: | GPL-2 |
Version: | 1.1 |
Built: | 2024-12-12 06:50:53 UTC |
Source: | CRAN |
Combine different forecasts. Use simple average, Ordinary Least Squares (OLS), robust regression, inverse mean squared error (IMSE), constrained least squares (CLS), or simply use the best forecast based on the MSE metric.
Forecast_comb(obs, fhat, fhat_new= NULL, Averaging_scheme= c("simple", "ols", "robust", "cls", "variance based", "best") )
Forecast_comb(obs, fhat, fhat_new= NULL, Averaging_scheme= c("simple", "ols", "robust", "cls", "variance based", "best") )
obs |
Observed series |
fhat |
fhat Matrix of available forecasts. These are used to retrieve the weights. How each forecast should be weighted in the overall combined forecast. |
fhat_new |
Matrix of available forecasts as a test set. Optional, default to NULL. |
Averaging_scheme |
Which averaging scheme should be used? |
Performs simple forecast averaging where each forecast carries equal weight: with p the column dimension of
fhat
. OLS forecast combination is based on
where is the observed values and
is the forecast, one out of the p forecasts available.
Robust regression performs the same, but minimize different loss function, which is less sensitive to outliers (see quantile regression and references therein).
Constrained least squares minimize the sum of squared errors under the restriction that the weights sum up to 1, and that the forecasts themselves are unbiased (no intercept in the regression).
The variance-based method computes the mean squared error and weigh the forecasts according to their accuracy. Accurate forecasts (based on MSE metric) receive relatively more weight.
The best restric all the weights to zero apart from the best forecast, again based on the MSE. Essentially selecting only one forecast to be used.
Forecast_comb
returns a list that contains the following objects:
fitted |
Vector of fitted values. |
pred |
Vector of prediction. This object is empty if there was no test matrix |
weights |
Vector of weights based on the |
Eran Raviv ([email protected])
Bates, J. M., Granger, C.W. (1969), The combination of forecasts, Operations Research Quarterly, 20(4), 451-468
Clemen, R.T. (1989) Combining forecasts: A review and annotated bibliography. International Journal of Forecasting 5, 559-583.
Koenker, R. (2005) Quantile Regression. Cambridge University Press.
Timmermann, A.G. (2006) Forecast combinations. In: Elliott, G., Granger, C.W., Timmermann, A. (Eds.), Handbook of Economic Forecasting, Elsevier, 135-196.
library(MASS) tt <- NROW(Boston)/2 TT <- NROW(Boston) y <- Boston[1:tt, 14] # dependent variable is columns number 14 # Create two sets of explanatory variables x1 <- Boston[1:tt, 1:6] # The first 6 explanatories x2 <- Boston[1:tt, 7:13]# The last 6 explanatories #create two forecasts based on the two different x1 and x2 coef1 <- lm(y~as.matrix(x1))$coef coef2 <- lm(y~as.matrix(x2))$coef f1 <- t(coef1 %*% t(cbind(rep(1,tt), Boston[(tt+1):TT, 1:6] ))) f2 <- t(coef2 %*% t(cbind(rep(1,tt), Boston[(tt+1):TT, 7:13] ))) ff <- cbind(f1, f2) scheme=c("simple", "ols", "robust", "variance based", "cls", "best") example0 <- list() for ( i in scheme) { example0[[i]] <- Forecast_comb(obs = Boston[(tt+1):TT, 14] , fhat = ff, Averaging_scheme = i) cat(i, ":", sqrt(mean((example0[[i]]$fitted - Boston[(tt+1):TT, 14] )^2)), "\n" ) } # Compare with apply(ff, 2, function(x) { sqrt(mean((x - Boston[(tt+1):TT, 14])^2)) } )
library(MASS) tt <- NROW(Boston)/2 TT <- NROW(Boston) y <- Boston[1:tt, 14] # dependent variable is columns number 14 # Create two sets of explanatory variables x1 <- Boston[1:tt, 1:6] # The first 6 explanatories x2 <- Boston[1:tt, 7:13]# The last 6 explanatories #create two forecasts based on the two different x1 and x2 coef1 <- lm(y~as.matrix(x1))$coef coef2 <- lm(y~as.matrix(x2))$coef f1 <- t(coef1 %*% t(cbind(rep(1,tt), Boston[(tt+1):TT, 1:6] ))) f2 <- t(coef2 %*% t(cbind(rep(1,tt), Boston[(tt+1):TT, 7:13] ))) ff <- cbind(f1, f2) scheme=c("simple", "ols", "robust", "variance based", "cls", "best") example0 <- list() for ( i in scheme) { example0[[i]] <- Forecast_comb(obs = Boston[(tt+1):TT, 14] , fhat = ff, Averaging_scheme = i) cat(i, ":", sqrt(mean((example0[[i]]$fitted - Boston[(tt+1):TT, 14] )^2)), "\n" ) } # Compare with apply(ff, 2, function(x) { sqrt(mean((x - Boston[(tt+1):TT, 14])^2)) } )
Combine different forecasts using complete subset regressions. Apart from the simple averaging, weights based on information criteria (AIC, corrected AIC, Hannan Quinn and BIC) or based on the Mallow criterion are also available.
Forecast_comb_all(obs, fhat, fhat_new = NULL)
Forecast_comb_all(obs, fhat, fhat_new = NULL)
obs |
Observed series. |
fhat |
fhat Matrix of available forecasts. |
fhat_new |
Matrix of available forecasts as a test set. Optional, default to NULL. |
OLS forecast combination is based on
where is the observed values and
is the forecast, one out of the
forecasts available.
The function computes the complete subset regressions. So a matrix of forecasts based on all possible subsets of fhat
is returned.
Those forecasts can later be cross-sectionally averaged to create a single combined forecast.
Additional weight-vectors which are based on different information criteria are also returned. This is in case the user would like to perform the frequensit version of forecast averaging or based on the Mallows criterion (see references for more details).
Although the function is geared towards forecast averaging, it can be used in any other application as a generic complete subset regression.
Forecast_comb_all
returns a list that contains the following objects:
pred |
Vector of fitted values if |
full_model_crit |
List. The values of information criteria computed based on a full model, the one which includes all available forecasts. |
aic |
A vector of weights for all possible forecast combinations based on the Akaike's information criterion. |
aicc |
A vector of weights for all possible forecast combinations based on the corrected Akaike's information criterion. |
bic |
A vector of weights for all possible forecast combinations based on the Bayesian's information criterion. |
hq |
A vector of weights for all possible forecast combinations based on the Hannan Quinn's information criterion. |
mal |
A vector of weights for all possible forecast combinations based on the Mallow's information criterion. |
Eran Raviv ([email protected])
Hansen, B. (2008) Least-squares forecast averaging. Journal of Econometrics, Vol. 146, No. 2. , pp. 342-350
Kapetanios, G., Labhard V., Price, S. Forecasting Using Bayesian and Information-Theoretic Model Averaging. Journal of Business & Economic Statistics, Vol. 26, Iss. 1, 2008
Koenker R. (2005) Quantile Regression. Cambridge University Press.
Graham, E., Garganob, A., Timmermann, A. (2013) Complete subset regressions. Journal of Econometrics. Vol 177, 2, pp. 357-373.
library(MASS) tt <- NROW(Boston)/2 TT <- NROW(Boston) y <- Boston[1:tt, 14] # dependent variable is columns number 14 # Create two sets of explanatory variables x1 <- Boston[1:tt, 1:6] # The first 6 explanatories x2 <- Boston[1:tt, 7:13]# The last 6 explanatories # create two forecasts based on the two different x1 and x2 coef1 <- lm(y ~ as.matrix(x1))$coef coef2 <- lm(y ~ as.matrix(x2))$coef f1 <- t(coef1 %*% t(cbind(rep(1,tt), Boston[(tt+1):TT, 1:6] ))) f2 <- t(coef2 %*% t(cbind(rep(1,tt), Boston[(tt+1):TT, 7:13] ))) ff <- cbind(f1,f2) comb_all <- Forecast_comb_all(obs = Boston[(tt+1):TT, 14], fhat = ff) # To get the combined forecasts from the all subset regression: Combined_forecast <- apply(comb_all$pred, 1, mean) # To get the combined forecasts based on aic criteria for example: Combined_forecast_aic <- t(comb_all$aic %*% t(comb_all$pred))
library(MASS) tt <- NROW(Boston)/2 TT <- NROW(Boston) y <- Boston[1:tt, 14] # dependent variable is columns number 14 # Create two sets of explanatory variables x1 <- Boston[1:tt, 1:6] # The first 6 explanatories x2 <- Boston[1:tt, 7:13]# The last 6 explanatories # create two forecasts based on the two different x1 and x2 coef1 <- lm(y ~ as.matrix(x1))$coef coef2 <- lm(y ~ as.matrix(x2))$coef f1 <- t(coef1 %*% t(cbind(rep(1,tt), Boston[(tt+1):TT, 1:6] ))) f2 <- t(coef2 %*% t(cbind(rep(1,tt), Boston[(tt+1):TT, 7:13] ))) ff <- cbind(f1,f2) comb_all <- Forecast_comb_all(obs = Boston[(tt+1):TT, 14], fhat = ff) # To get the combined forecasts from the all subset regression: Combined_forecast <- apply(comb_all$pred, 1, mean) # To get the combined forecasts based on aic criteria for example: Combined_forecast_aic <- t(comb_all$aic %*% t(comb_all$pred))