Main Content

## 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.

TaskOld Functionality or BehaviorNew 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.

`EstMdl.b`, a 9-by-1 vector in which:

• `EstMdl.b(1:3)` are the estimated time trends for equations 1–3, respectively.

• `EstMdl.b(4:6)` are the estimated regression coefficients of exogenous variable `X(:,1)` for equations 1–3, respectively.

• `EstMdl.b(7:9)` are the estimated regression coefficients of exogenous variable `X(:,2)` for equations 1–3, respectively.

`EstMdl.Beta`, a 3-by-2 matrix with rows corresponding to equations (columns of `Y`) and columns corresponding to exogenous variables (columns of `X`)

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. See `arma2ar`, `arma2ma`, `armairf`, and `armafevd`.

• `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.

Download ebook