Main Content

Forecast VAR Model

This example shows how to use forecast to forecast a VAR model.

forecast enables you to generate MMSE forecasts with error estimates. forecast requires:

  • A fully-specified model (for example, EstMdl in what follows)

  • The number of periods for the forecast (for example, numperiods in what follows)

  • A presample time series (e.g., Y(end-3:end,:) in what follows)

forecast optionally takes:

  • An exogenous data series

  • Extra paths

Load the Data_USEconModel data set. This example uses two time series: the logarithm of real GDP, and the real 3-month T-bill rate, both differenced to be approximately stationary. Suppose that a VAR(4) model is appropriate to describe the time series.

load Data_USEconModel
DEF = log(DataTimeTable.CPIAUCSL);
GDP = log(DataTimeTable.GDP);
rGDP = diff(GDP - DEF); % Real GDP is GDP - deflation
TB3 = 0.01*DataTimeTable.TB3MS;
dDEF = 4*diff(DEF); % Scaling
rTB3 = TB3(2:end) - dDEF; % Real interest is deflated
Y = [rGDP,rTB3];

Fit a VAR(4) model specification:

Mdl = varm(2,4);
Mdl.SeriesNames = {'Transformed real GDP','Transformed real 3-mo T-bill rate'};
EstMdl = estimate(Mdl,Y);

Predict the evolution of the time series:

numperiods = 21;
FDates = dateshift(DataTimeTable.Time(end),'end','quarter',1:numperiods);
[Forecast,ForecastMSE] = forecast(EstMdl,numperiods,Y(end-3:end,:));

Extract the main diagonal elements from the matrices in each cell of ForecastMSE. Apply the square root of the result to obtain standard errors.

extractMSE = @(x)diag(x)';
MSE = cellfun(extractMSE,ForecastMSE,'UniformOutput',false);
SE = sqrt(cell2mat(MSE));

Estimate approximate 95% forecast intervals for each response series.

ForecastFI = zeros(numperiods,Mdl.NumSeries,2);

ForecastFI(:,:,1) = Forecast - 2*SE;
ForecastFI(:,:,2) = Forecast + 2*SE;

Plot the forecasts and the data.

figure
h1 = plot(DataTimeTable.Time((end-49):end),Y((end-49):end,1));
hold on
h2 = plot(FDates,Forecast(:,1));
h3 = plot(FDates,ForecastFI(:,1,1),'k--');
plot(FDates,ForecastFI(:,1,2),'k--');
title('Real GDP Growth Rate')
h = gca;
fill([FDates(1) h.XLim([2 2]) FDates(1)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2 h3],'True','Forecast','95% Forecast interval',...
    'Location','northwest')
hold off

Figure contains an axes object. The axes object with title Real GDP Growth Rate contains 5 objects of type line, patch. These objects represent True, Forecast, 95% Forecast interval.

figure
h1 = plot(DataTimeTable.Time((end-49):end),Y((end-49):end,2));
hold on
h2 = plot(FDates,Forecast(:,2));
h3 = plot(FDates,ForecastFI(:,2,1),'k--');
plot(FDates,ForecastFI(:,2,2),'k--');
title('3-month T-bill rate')
h = gca;
fill([FDates(1) h.XLim([2 2]) FDates(1)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2 h3],'True','Forecast','95% Forecast interval',...
    'Location','northwest')
hold off

Figure contains an axes object. The axes object with title 3-month T-bill rate contains 5 objects of type line, patch. These objects represent True, Forecast, 95% Forecast interval.

See Also

Objects

Functions

Related Topics