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 timetrend term.
The presample response data is in the 4by3 matrix
Y0
.The estimation sample response data is in the 100by3 matrix
Y
.The exogenous data is in the 100by2 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 100by1 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 8period horizon with 8by2 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.