Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

forecast

Forecast vector error-correction (VEC) model responses

Syntax

Y = forecast(Mdl,numperiods,Y0)
Y = forecast(Mdl,numperiods,Y0,Name,Value)
[Y,YMSE] = forecast(___)

Description

example

Y = forecast(Mdl,numperiods,Y0) returns a path of minimum mean squared error (MMSE) forecasts (Y) over the length numperiods forecast horizon using the fully specified VEC(p – 1) model Mdl. The forecasted responses represent the continuation of the presample data Y0.

example

Y = forecast(Mdl,numperiods,Y0,Name,Value) uses additional options specified by one or more Name,Value pair arguments. For example, 'X',X,'YF',YF specifies X as future exogenous predictor data for the regression component and YF as future response data for conditional forecasting.

example

[Y,YMSE] = forecast(___) returns the corresponding mean squared error (MSE) of each forecasted response using any of the input arguments in the previous syntaxes.

Examples

collapse all

Consider a VEC model for the following seven macroeconomic series. Then, fit the model to the data and forecast responses 12 quarters into the future.

  • Gross domestic product (GDP)

  • GDP implicit price deflator

  • Paid compensation of employees

  • Nonfarm business sector hours of all persons

  • Effective federal funds rate

  • Personal consumption expenditures

  • Gross private domestic investment

Suppose that a cointegrating rank of 4 and one short-run term are appropriate, that is, consider a VEC(1) model.

Load the Data_USEconVECModel data set.

load Data_USEconVECModel

For more information on the data set and variables, enter Description at the command line.

Determine whether the data needs to be preprocessed by plotting the series on separate plots.

figure;
subplot(2,2,1)
plot(FRED.Time,FRED.GDP);
title('Gross Domestic Product');
ylabel('Index');
xlabel('Date');
subplot(2,2,2)
plot(FRED.Time,FRED.GDPDEF);
title('GDP Deflator');
ylabel('Index');
xlabel('Date');
subplot(2,2,3)
plot(FRED.Time,FRED.COE);
title('Paid Compensation of Employees');
ylabel('Billions of $');
xlabel('Date');
subplot(2,2,4)
plot(FRED.Time,FRED.HOANBS);
title('Nonfarm Business Sector Hours');
ylabel('Index');
xlabel('Date');

figure;
subplot(2,2,1)
plot(FRED.Time,FRED.FEDFUNDS);
title('Federal Funds Rate');
ylabel('Percent');
xlabel('Date');
subplot(2,2,2)
plot(FRED.Time,FRED.PCEC);
title('Consumption Expenditures');
ylabel('Billions of $');
xlabel('Date');
subplot(2,2,3)
plot(FRED.Time,FRED.GPDI);
title('Gross Private Domestic Investment');
ylabel('Billions of $');
xlabel('Date');

Stabilize all series, except the federal funds rate, by applying the log transform. Scale the resulting series by 100 so that all series are on the same scale.

FRED.GDP = 100*log(FRED.GDP);
FRED.GDPDEF = 100*log(FRED.GDPDEF);
FRED.COE = 100*log(FRED.COE);
FRED.HOANBS = 100*log(FRED.HOANBS);
FRED.PCEC = 100*log(FRED.PCEC);
FRED.GPDI = 100*log(FRED.GPDI);

Create a VEC(1) model using the shorthand syntax. Specify the variable names.

Mdl = vecm(7,4,1);
Mdl.SeriesNames = FRED.Properties.VariableNames;

Mdl is a vecm model object. All properties containing NaN values correspond to parameters to be estimated given data.

Estimate the model using the entire data set and the default options.

EstMdl = estimate(Mdl,FRED.Variables)
EstMdl = 

  vecm with properties:

             Description: "7-Dimensional Rank = 4 VEC(1) Model"
             SeriesNames: "GDP"  "GDPDEF"  "COE"  ... and 4 more
               NumSeries: 7
                    Rank: 4
                       P: 2
                Constant: [14.1329 8.77841 -7.20359 ... and 4 more]'
              Adjustment: [7×4 matrix]
           Cointegration: [7×4 matrix]
                  Impact: [7×7 matrix]
   CointegrationConstant: [-28.6082 109.555 -77.0912 ... and 1 more]'
      CointegrationTrend: [4×1 vector of zeros]
                ShortRun: {7×7 matrix} at lag [1]
                   Trend: [7×1 vector of zeros]
                    Beta: [7×0 matrix]
              Covariance: [7×7 matrix]

EstMdl is an estimated vecm model object. It is fully specified because all parameters have known values. By default, estimate imposes the constraints of the H1 Johansen VEC model form by removing the cointegrating trend and linear trend terms from the model. Parameter exclusion from estimation is equivalent to imposing equality constraints to zero.

Forecast responses from the estimated model over a three-year horizon. Specify the entire data set as presample observations.

numperiods = 12;
Y0 = FRED.Variables;
Y = forecast(EstMdl,numperiods,Y0);

Y is a 12-by-7 matrix of forecasted responses. Rows correspond to the forecast horizon, and columns correspond to the variables in EstMdl.SeriesNames.

Plot the forecasted responses and the last 50 true responses.

fh = dateshift(FRED.Time(end),'end','quarter',1:12);

figure;
subplot(2,2,1)
h1 = plot(FRED.Time((end-49):end),FRED.GDP((end-49):end));
hold on
h2 = plot(fh,Y(:,1));
title('Gross Domestic Product');
ylabel('Index (scaled)');
xlabel('Date');
h = gca;
fill([FRED.Time(end) fh([end end]) FRED.Time(end)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,2)
h1 = plot(FRED.Time((end-49):end),FRED.GDPDEF((end-49):end));
hold on
h2 = plot(fh,Y(:,2));
title('GDP Deflator');
ylabel('Index (scaled)');
xlabel('Date');
h = gca;
fill([FRED.Time(end) fh([end end]) FRED.Time(end)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,3)
h1 = plot(FRED.Time((end-49):end),FRED.COE((end-49):end));
hold on
h2 = plot(fh,Y(:,3));
title('Paid Compensation of Employees');
ylabel('Billions of $ (scaled)');
xlabel('Date');
h = gca;
fill([FRED.Time(end) fh([end end]) FRED.Time(end)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,4)
h1 = plot(FRED.Time((end-49):end),FRED.HOANBS((end-49):end));
hold on
h2 = plot(fh,Y(:,4));
title('Nonfarm Business Sector Hours');
ylabel('Index (scaled)');
xlabel('Date');
h = gca;
fill([FRED.Time(end) fh([end end]) FRED.Time(end)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off

figure;
subplot(2,2,1)
h1 = plot(FRED.Time((end-49):end),FRED.FEDFUNDS((end-49):end));
hold on
h2 = plot(fh,Y(:,5));
title('Federal Funds Rate');
ylabel('Percent');
xlabel('Date');
h = gca;
fill([FRED.Time(end) fh([end end]) FRED.Time(end)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,2)
h1 = plot(FRED.Time((end-49):end),FRED.PCEC((end-49):end));
hold on
h2 = plot(fh,Y(:,6));
title('Consumption Expenditures');
ylabel('Billions of $ (scaled)');
xlabel('Date');
h = gca;
fill([FRED.Time(end) fh([end end]) FRED.Time(end)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,3)
h1 = plot(FRED.Time((end-49):end),FRED.GPDI((end-49):end));
hold on
h2 = plot(fh,Y(:,7));
title('Gross Private Domestic Investment');
ylabel('Billions of $ (scaled)');
xlabel('Date');
h = gca;
fill([FRED.Time(end) fh([end end]) FRED.Time(end)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off

Consider the model and data in Forecast Unconditional Response Series from VEC Model.

Load the Data_USEconVECModel data set and preprocess the data.

load Data_USEconVECModel
FRED.GDP = 100*log(FRED.GDP);
FRED.GDPDEF = 100*log(FRED.GDPDEF);
FRED.COE = 100*log(FRED.COE);
FRED.HOANBS = 100*log(FRED.HOANBS);
FRED.PCEC = 100*log(FRED.PCEC);
FRED.GPDI = 100*log(FRED.GPDI);

The Data_Recessions data set contains the beginning and ending serial dates of recessions. Load the data set. Convert the matrix of date serial numbers to a datetime array.

load Data_Recessions
dtrec = datetime(Recessions,'ConvertFrom','datenum');

Create a dummy variable that identifies periods in which the U.S. was in a recession or worse. Specifically, the variable should be 1 if FRED.Time occurs during a recession, and 0 otherwise.

isin = @(x)(any(dtrec(:,1) <= x & x <= dtrec(:,2)));
isrecession = double(arrayfun(isin,FRED.Time));

Create a VEC(1) model using the shorthand syntax. Assume that the appropriate cointegration rank is 4. You do not have to specify the presence of a regression component when creating the model. Specify the variable names.

Mdl = vecm(7,4,1);
Mdl.SeriesNames = FRED.Properties.VariableNames;

Estimate the model using all but the last three years of data. Specify the predictor identifying whether the observation was measured during a recession.

bfh = FRED.Time(end) - years(3);
estIdx = FRED.Time < bfh;
EstMdl = estimate(Mdl,FRED{estIdx,:},'X',isrecession(estIdx));

Forecast a path of quarterly responses three years into the future.

Y0 = FRED{estIdx,:};
Y = forecast(EstMdl,12,Y0,'X',isrecession(~estIdx));

Y is a 12-by-7 matrix of simulated responses. Rows correspond to the forecast horizon, and columns correspond to the variables in EstMdl.SeriesNames.

Plot the forecasted responses and the last 40 true responses.

figure;
subplot(2,2,1)
h1 = plot(FRED.Time((end-39):end),FRED.GDP((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,1));
title('Gross Domestic Product');
ylabel('Index (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,2)
h1 = plot(FRED.Time((end-39):end),FRED.GDPDEF((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,2));
title('GDP Deflator');
ylabel('Index (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,3)
h1 = plot(FRED.Time((end-39):end),FRED.COE((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,3));
title('Paid Compensation of Employees');
ylabel('Billions of $ (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,4)
h1 = plot(FRED.Time((end-39):end),FRED.HOANBS((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,4));
title('Nonfarm Business Sector Hours');
ylabel('Index (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off

figure;
subplot(2,2,1)
h1 = plot(FRED.Time((end-39):end),FRED.FEDFUNDS((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,5));
title('Federal Funds Rate');
ylabel('Percent');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,2)
h1 = plot(FRED.Time((end-39):end),FRED.PCEC((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,6));
title('Consumption Expenditures');
ylabel('Billions of $ (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off
subplot(2,2,3)
h1 = plot(FRED.Time((end-39):end),FRED.GPDI((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,7));
title('Gross Private Domestic Investment');
ylabel('Billions of $ (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','Best')
hold off

Analyze forecast accuracy using forecast intervals over a three-year horizon. This example follows from Forecast Unconditional Response Series from VEC Model.

Load the Data_USEconVECModel data set and preprocess the data.

load Data_USEconVECModel
FRED.GDP = 100*log(FRED.GDP);
FRED.GDPDEF = 100*log(FRED.GDPDEF);
FRED.COE = 100*log(FRED.COE);
FRED.HOANBS = 100*log(FRED.HOANBS);
FRED.PCEC = 100*log(FRED.PCEC);
FRED.GPDI = 100*log(FRED.GPDI);

Estimate a VEC(1) model. Reserve the last three years of data to assess forecast accuracy. Assume that the appropriate cointegration rank is 4, and the H1 Johansen form is appropriate for the model.

bfh = FRED.Time(end) - years(3);
estIdx = FRED.Time < bfh;
Mdl = vecm(7,4,1);
Mdl.SeriesNames = FRED.Properties.VariableNames;
EstMdl = estimate(Mdl,FRED{estIdx,:});

Forecast responses from the estimated model over a three-year horizon. Specify all in-sample observations as a presample. Return the MSE of the forecasts.

numperiods = 12;
Y0 = FRED{estIdx,:};
[Y,YMSE] = forecast(EstMdl,numperiods,Y0);

Y is a 12-by-7 matrix of forecasted responses. YMSE is a 12-by-1 cell vector of 7-by-7 matrices corresponding to the MSEs.

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

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

Estimate approximate 95% forecast intervals for each response series.

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

YFI(:,:,1) = Y - 2*SE;
YFI(:,:,2) = Y + 2*SE;

Plot the forecasted responses and the last 40 true responses.

figure;
subplot(2,2,1)
h1 = plot(FRED.Time((end-39):end),FRED.GDP((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,1));
h3 = plot(FRED.Time(~estIdx),YFI(:,1,1),'k--');
plot(FRED.Time(~estIdx),YFI(:,1,2),'k--');
title('Gross Domestic Product');
ylabel('Index (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2 h3],'True','Forecast','95% Forecast interval',...
    'Location','best');
hold off
subplot(2,2,2)
h1 = plot(FRED.Time((end-39):end),FRED.GDPDEF((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,2));
h3 = plot(FRED.Time(~estIdx),YFI(:,2,1),'k--');
plot(FRED.Time(~estIdx),YFI(:,2,2),'k--');
title('GDP Deflator');
ylabel('Index (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2 h3],'True','Forecast','95% Forecast interval',...
    'Location','best');
hold off
subplot(2,2,3)
h1 = plot(FRED.Time((end-39):end),FRED.COE((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,3));
h3 = plot(FRED.Time(~estIdx),YFI(:,3,1),'k--');
plot(FRED.Time(~estIdx),YFI(:,3,2),'k--');
title('Paid Compensation of Employees');
ylabel('Billions of $ (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2 h3],'True','Forecast','95% Forecast interval',...
    'Location','best');
hold off
subplot(2,2,4)
h1 = plot(FRED.Time((end-39):end),FRED.HOANBS((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,4));
h3 = plot(FRED.Time(~estIdx),YFI(:,4,1),'k--');
plot(FRED.Time(~estIdx),YFI(:,4,2),'k--');
title('Nonfarm Business Sector Hours');
ylabel('Index (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2 h3],'True','Forecast','95% Forecast interval',...
    'Location','best');
hold off

figure;
subplot(2,2,1)
h1 = plot(FRED.Time((end-39):end),FRED.FEDFUNDS((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,5));
h3 = plot(FRED.Time(~estIdx),YFI(:,5,1),'k--');
plot(FRED.Time(~estIdx),YFI(:,5,2),'k--');
title('Federal Funds Rate');
ylabel('Percent');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2 h3],'True','Forecast','95% Forecast interval',...
    'Location','best');
hold off
subplot(2,2,2)
h1 = plot(FRED.Time((end-39):end),FRED.PCEC((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,6));
h3 = plot(FRED.Time(~estIdx),YFI(:,6,1),'k--');
plot(FRED.Time(~estIdx),YFI(:,6,2),'k--');
title('Consumption Expenditures');
ylabel('Billions of $ (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2 h3],'True','Forecast','95% Forecast interval',...
    'Location','best');
hold off
subplot(2,2,3)
h1 = plot(FRED.Time((end-39):end),FRED.GPDI((end-39):end));
hold on
h2 = plot(FRED.Time(~estIdx),Y(:,7));
h3 = plot(FRED.Time(~estIdx),YFI(:,7,1),'k--');
plot(FRED.Time(~estIdx),YFI(:,7,2),'k--');
title('Gross Private Domestic Investment');
ylabel('Billions of $ (scaled)');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2 h3],'True','Forecast','95% Forecast interval',...
    'Location','best');
hold off

Input Arguments

collapse all

VEC model, specified as a vecm model object created by vecm or estimate. Mdl must be fully specified.

Forecast horizon length, specified as a positive integer.

The periods in the forecast horizon are consistent with the periodicity of Mdl and the presample data Y0.

Data Types: double

Presample responses that provide initial values for the forecasts, specified as a numpreobs-by-numseries numeric matrix or a numpreobs-by-numseries-by-numprepaths numeric array. Rows represent observations, columns represent response variables, and pages represent separate response paths. Among all pages, observations in a particular row occur at the same time.

Y0 must have Mdl.NumSeries columns and at least Mdl.P rows. If you supply more rows than necessary, estimate uses the latest Mdl.P observations only. The last row contains the latest observation.

  • If you do not specify the YF name-value pair argument, then forecast initializes each forecasted path (page) using the corresponding page of Y0. Therefore, the output argument Y has numprepaths pages.

  • If you do specify the YF name-value pair argument, then forecast takes one of these actions.

    • If Y0 is a matrix, then forecast initializes each forecast path (page) in YF using Y0. Therefore, all paths in the output argument Y derive from common initial conditions.

    • Otherwise, forecast applies Y0(:,:,j) to initialize forecasting path j. Y0 must have at least numpaths pages, and forecast uses only the first numpaths pages.

Data Types: double

Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside single quotes (' '). You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

Example: 'X',X,'YF',YF uses the matrix X as predictor data in the regression component, and the matrix YF as partially known future responses for conditional forecasting.

collapse all

Forecasted time series of predictors to include in the model regression component, specified as the comma-separated pair consisting of 'X' and a numeric matrix containing numpreds columns. numpreds is size(Mdl.Beta,2). Rows correspond to observations, and columns correspond to individual predictor variables. Row j contains the j-step-ahead forecast. All predictor variables are present in the regression component of each response equation. forecast applies X to each path (page); that is, X represents one path of observed predictors.

X must have at least numperiods rows. If you supply more rows than necessary, then forecast uses only the earliest numperiods observations. The first row contains the earliest observation.

If Mdl has a regression component, then, to maintain model consistency into the forecast horizon, it is good practice to specify forecasted predictors.

By default, forecast excludes the regression component, regardless of its presence in Mdl.

Data Types: double

Future multivariate response series for conditional forecasting, specified as the comma-separated pair consisting of 'YF' and a numeric matrix or array containing numseries columns, where numseries is Mdl.NumSeries. Rows correspond to observations, columns correspond to response variables, and pages correspond to sample paths. YF must have at least numperiods rows to cover the forecast horizon. If you supply more rows than necessary, then forecast uses only the first numperiods rows. The first row contains the earliest observation.

Path k of YF (YF(:,:,k)) captures the state, or knowledge, of response series as they evolve from the presample past (Y0) into the future. Row j (YF(j,:,k)) contains the responses j periods into the future.

Elements of YF can be numeric scalars or missing values (indicated by NaN values). forecast treats numeric scalars as deterministic future responses that are known in advance, for example, set by policy. forecast forecasts responses for corresponding NaN values conditional on the known values.

  • If YF is a matrix, then forecast applies YF to each of the numpaths output paths (see Y0).

  • Otherwise, YF must have at least numpaths pages. If you supply more pages than necessary, then forecast uses only the first numpaths pages.

By default, YF is an array composed of NaN values indicating a complete lack of knowledge of the future state of all responses in the forecast horizon. Therefore, forecast estimates conventional MMSE forecasts.

For more details, see Algorithms.

Example: Consider forecasting one path of a VEC model composed of four response series three periods into the future. Suppose that you have prior knowledge about some of the future values of the responses, and you want to forecast the unknown responses conditional on your knowledge. Specify YF as a matrix containing the values that you know, and use NaN for values you do not know but want to forecast. For example, 'YF',[NaN 2 5 NaN; NaN NaN 0.1 NaN; NaN NaN NaN NaN] specifies that you have no knowledge of the future values of the first and fourth response series; you know the value for period 1 in the second response series, but no other value; and you know the values for periods 1 and 2 in the third response series, but not the value for period 3.

Data Types: double

Note

NaN values in Y0 and X indicate missing values. forecast removes missing values from the data by list-wise deletion. If Y0 is a 3-D array, then forecast performs these steps.

  1. Horizontally concatenate pages to form a numpreobs-by-numpaths*numseries matrix.

  2. Remove any row that contains at least one NaN from the concatenated data.

In the case of missing observations, the results obtained from multiple paths of Y0 can differ from the results obtained from each path individually.

For missing values in X, forecast removes the corresponding row from each page of YF. After row removal from X and YF, if the number of rows is less than numperiods, then forecast throws an error.

Output Arguments

collapse all

MMSE forecasts of the multivariate response series, returned as a numobs-by-numseries numeric matrix or a numobs-by-numseries-by-numpaths numeric array. Y represents the continuation of the presample responses in Y0. Rows correspond to observations, columns correspond to response variables, and pages correspond to sample paths. Row j is the j-period-ahead forecast.

If you specify future responses for conditional forecasting using the YF name-value pair argument, then the known values in YF appear in the same positions in Y. However, Y contains forecasted values for the missing observations in YF.

MSE matrices of the forecasted responses in Y, returned as a numperiods-by-1 cell vector of numseries-by-numseries numeric matrices. Cells of YMSE compose a time series of forecast error covariance matrices. Cell j contains the j-period-ahead MSE matrix.

YMSE is identical for all paths.

Because forecast treats predictor variables in X as exogenous and non-stochastic, YMSE reflects the error covariance associated with the autoregressive component of the input model Mdl only.

Algorithms

  • forecast estimates unconditional forecasts using the equation

    Δy^t=A^B^y^t1+Φ^1Δy^t1+...+Φ^pΔy^tp+c^+d^t+xtβ^,

    where t = 1,...,numperiods. forecast filters a numperiods-by-numseries matrix of zero-valued innovations through Mdl. forecast uses specified presample innovations (Y0) wherever necessary.

  • forecast estimates conditional forecasts using the Kalman filter.

    1. forecast represents the VEC model Mdl as a state-space model (ssm model object) without observation error.

    2. forecast filters the forecast data YF through the state-space model. At period t in the forecast horizon, any unknown response is

      Δy^t=A^B^y^t1+Φ^1Δy^t1+...+Φ^pΔy^tp+c^+d^t+xtβ^,

      where y^s, s < t, is the filtered estimate of y from period s in the forecast horizon. forecast uses specified presample values in Y0 for periods before the forecast horizon.

    For more details, see filter and [4], pp. 612 and 615.

  • The way forecast determines numpaths, the number of pages in the output argument Y, depends on the forecast type.

    • If you estimate unconditional forecasts, which means you do not specify the name-value pair argument YF, then numpaths is the number of pages in the input argument Y0.

    • If you estimate conditional forecasts and Y0 and YF have more than one page, then numpaths is the number of pages in the array with fewer pages. If the number of pages in Y0 or YF exceeds numpaths, then forecast uses only the first numpaths pages.

    • If you estimate conditional forecasts and either Y0 or YF has one page, then numpaths is the number of pages in the array with the most pages. forecast uses the array with one page for each path.

  • forecast sets the time origin of models that include linear time trends (t0) to size(Y0,1)Mdl.P (after removing missing values). Therefore, the times in the trend component are t = t0 + 1, t0 + 2,..., t0 + numobs. This convention is consistent with the default behavior of model estimation in which estimate removes the first Mdl.P responses, reducing the effective sample size. Although forecast explicitly uses the first Mdl.P presample responses in Y0 to initialize the model, the total number of observations (excluding missing values) determines t0.

References

[1] Hamilton, J. D. Time Series Analysis. Princeton, NJ: Princeton University Press, 1994.

[2] Johansen, S. Likelihood-Based Inference in Cointegrated Vector Autoregressive Models. Oxford: Oxford University Press, 1995.

[3] Juselius, K. The Cointegrated VAR Model. Oxford: Oxford University Press, 2006.

[4] Lütkepohl, H. New Introduction to Multiple Time Series Analysis. Berlin: Springer, 2005.

See Also

Using Objects

Functions

Introduced in R2017b

Was this topic helpful?