Convert from vgx
Functions to Model Objects
In R2017a, the functions varm
, arma2ar
, arma2ma
, and isStable
replaced vgxar
, vgxcount
, vgxdisp
, vgxget
, vgxinfer
, vgxloglik
, vgxma
, vgxplot
, vgxpred
, vgxproc
, vgxqual
, vgxset
, vgxsim
, and vgxvarx
. If you use the older vgx
multivariate data analysis functions in releases after R2017b, MATLAB® issues an error. This topic shows you how to convert common tasks that use the vgx
functions to the newer functionality.
Assume these conditions:
You want to model three response variables simultaneously by using a VARX(4) model. The model contains a regression component for two predictor variables, a constant vector, and a linear time-trend term.
The presample response data is in the 4-by-3 matrix
Y0
.The estimation sample response data is in the 100-by-3 matrix
Y
.The exogenous data is in the 100-by-2 matrix
X
.
This table compares the old and new ways to complete common tasks, based on the stated conditions.
Task | Old Functionality or Behavior | New Functionality or Behavior |
---|---|---|
Create a VAR(4) model template for estimation. |
Mdl = vgxset('n',3,'nAR',4,'Constant',true); |
Mdl = varm(3,4); Mdl.Trend = nan(3,1); |
Retrieve model properties, such as, the innovations covariance matrix. |
vgxget(Mdl,'Q') |
Mdl.Covariance |
Set equality constraints for estimation; for example, set the model constant to a vector of ones. |
Mdl = vgxset(Mdl,'a',ones(3,1),'asolve',false(3,1)); |
Mdl.Constant = ones(3,1); |
Fit an unrestricted model with a time trend to the data. All exogenous predictors occur in each response equation and do not share coefficients. | Xk = [(1:100)' X]; % Include linear trend Xk = kron(Xk,eye(3)); % Create design matrix Xk = mat2cell(Xk,3*ones(100,1),size(Xk,2)); % Pack into 100-by-1 cell vector Mdl.nX = size(Xk{1},2); % vgxvarx must know the number ... % of exogenous variables EstMdl = vgxvarx(Mdl,Y,Xk,Y0); vgxvarx requires a design matrix rather than a matrix of data. A linear trend and two exogenous variables yield nine columns in the design matrix. |
EstMdl = estimate(Mdl,Y,'Y0',Y0,'X',X); |
Fit the model to the data. X(:,1) appears in all equations, but X(:,2) appears in the first equation only. |
Xk = [(1:100)' X]; Xk = [kron(Xk(:,1:2),eye(3)) kron(Xk(:,3),[1; 0; 0])]; Xk = mat2cell(Xk,3*ones(100,1),size(Xk,2)); EstMdl = vgxvarx(Mdl,Y,Xk,Y0); |
Mdl.Beta = nan(3,2); Mdl.Beta(2:3,2) = 0; EstMdl = estimate(Mdl,Y,'Y0',Y0,'X',X); |
Obtain estimated regression coefficients. |
|
|
Display the estimated model. |
vgxdisp(EstMdl) |
summarize(EstMdl) |
Obtain the number of unrestricted or estimated parameters in the model. | [~,numactive] = vgxcount(EstMdl); numactive includes estimated elements in the innovations covariance matrix. | results = summarize(EstMdl); numactive = results.NumEstimatedParameters; numactive does not include estimated elements of the innovations covariance matrix. |
Infer residuals. |
[EstMdl,~,~,E] = vgxvarx(Mdl,Y,Xk,Y0); % Method 1 E = vgxinfer(EstMdl,Y,X,Y0); % Method 2 |
[EstMdl,~,~,E] = estimate(Mdl,Y,'Y0',Y0,'X',X); E = infer(EstMdl,Y,'Y0',Y0,'X',X); |
Obtain fit statistics. |
logl = vgxloglik(EstMdl,E); [aic,bic] = aicbic(logl,numactive - 6,100) ... % Remove count of estimated covariance elements |
logl = results.LogLikelihood; aic = results.AIC; bic = results.BIC; |
Determine model stability. |
isstable = vgxqual(EstMdl); |
ARLagOp = LagOp([{eye(3)} EstMdl.AR]); isstable = isStable(ARLagOp); |
Simulate 1000 paths of responses during the estimation period. |
YSim = vgxproc(EstMdl,100,X,Y0,[],1000); |
YSim = simulate(EstMdl,100,'Y0',Y0,... 'X',X,'NumPaths',1000); |
Forecast the model into an 8-period horizon with 8-by-2 matrix XF containing the future exogenous data. |
XFk = [(101:108)' XF];
XFk = kron(XFk,eye(3)); % Create design matrix
XFk = mat2cell(XFk,3*ones(8,1),size(XFk,2));
YF = vgxpred(EstMdl,8,XFk,Y); |
YF = forecast(EstMdl,8,Y,'X',XF); |
Some notable differences between the vgx
and varm
functionalities are:
varm
does not support the creation of models with structural or MA components. However, you can perform some tasks using an implicit SVARMA model. Seearma2ar
,arma2ma
,armairf
, andarmafevd
.estimate
does not support the specification of a diagonal covariance matrix for estimation.varm
does not allow the same regression coefficient in multiple equations. Each exogenous variable is associated with a unique regression coefficient across equations.Functions in the
varm
framework do not accommodate multiple paths of exogenous data. Instead, when a function operates on multiple paths of responses or innovations, the function applies the same exogenous data to all paths.