NAG CL Interface
g13djc (multi_​varma_​forecast)

1 Purpose

g13djc computes forecasts of a multivariate time series. It is assumed that a vector ARMA model has already been fitted to the appropriately differenced/transformed time series using g13ddc. The standard deviations of the forecast errors are also returned. A reference vector is set up so that, should future series values become available, the forecasts and their standard errors may be updated by calling g13dkc.

2 Specification

#include <nag.h>
void  g13djc (Integer k, Integer n, const double z[], Integer kmax, const Integer tr[], const Integer id[], const double delta[], Integer ip, Integer iq, Nag_IncludeMean mean, const double par[], Integer lpar, double qq[], const double v[], Integer lmax, double predz[], double sefz[], double ref[], Integer lref, NagError *fail)
The function may be called by the names: g13djc, nag_tsa_multi_varma_forecast or nag_tsa_varma_forecast.

3 Description

Let the vector Zt = z1t,z2t,,zkt T , for t=1,2,,n, denote a k-dimensional time series for which forecasts of Zn+1,Zn+2,,Zn+lmax are required. Let Wt = w1t,w2t,,wkt T be defined as follows:
wit=δiBzit*,  i=1,2,,k,  
where δiB is the differencing operator applied to the ith series and where zit* is equal to either zit, zit or logezit depending on whether or not a transformation was required to stabilize the variance before fitting the model.
If the order of differencing required for the ith series is di, then the differencing operator for the ith series is defined by δiB=1-δi1B-δi2B2--δidiBdi where B is the backward shift operator; that is, BZt=Zt-1. The differencing parameters δij, for i=1,2,,k and j=1,2,,di, must be supplied by you. If the ith series does not require differencing, then di=0.
Wt is assumed to follow a multivariate ARMA model of the form:
Wt-μ=ϕ1Wt-1-μ+ϕ2Wt-2-μ++ϕpWt-p-μ+εt-θ1εt-1--θqεt-q, (1)
where εt = ε1t,ε2t,,εkt T , for t=1,2,,n, is a vector of k residual series assumed to be Normally distributed with zero mean and positive definite covariance matrix Σ. The components of εt are assumed to be uncorrelated at non-simultaneous lags. The ϕi and θj are k by k matrices of parameters. The matrices ϕi, for i=1,2,,p, are the autoregressive (AR) parameter matrices, and the matrices θi, for i=1,2,,q, the moving average (MA) parameter matrices. The parameters in the model are thus the p (k by k) ϕ-matrices, the q (k by k) θ-matrices, the mean vector μ and the residual error covariance matrix Σ. The ARMA model (1) must be both stationary and invertible; see g13dxc for a method of checking these conditions.
The ARMA model (1) may be rewritten as
ϕBδBZt*-μ=θBεt,  
where ϕB and θB are the autoregressive and moving average polynomials and δB denotes the k by k diagonal matrix whose ith diagonal elements is δiB and Zt* = z 1t * , z2t* zkt* T .
This may be rewritten as
ϕBδBZt*=ϕBμ+θBεt  
or
Zt*=τ+ψ Bεt=τ+εt+ψ1εt- 1+ψ2εt- 2+  
where ψB=δ-1Bϕ-1BθB and τ=δ-1Bμ is a vector of length k.
Forecasts are computed using a multivariate version of the procedure described in Box and Jenkins (1976). If Z^n*l denotes the forecast of Zn+l*, then Z^n*l is taken to be that linear function of Zn*,Zn-1*, which minimizes the elements of Eenlenl where enl=Zn+l*-Z^n*l is the forecast error. Z^n*l is referred to as the linear minimum mean square error forecast of Zn+l*.
The linear predictor which minimizes the mean square error may be expressed as
Z^n*l=τ+ψlεn+ψl+1εn-1+ψl+2εn-2+.  
The forecast error at t for lead l is then
enl=Zn+l*-Z^n*l=εn+l+ψ1εn+l-1+ψ2εn+l-2++ψl-1εn+1.  
Let d=maxdi, for i=1,2,,k. Unless q=0 the function requires estimates of εt, for t=d+1,,n, which are obtainable from g13ddc. The terms εt are assumed to be zero, for t=n+1,,n+lmax. You may use g13dkc to update these lmax forecasts should further observations, Zn+1,Zn+2,, become available. Note that when lmax or more further observations are available then g13djc must be used to produce new forecasts for Zn+lmax+1,Zn+lmax+2,, should they be required.
When a transformation has been used the forecasts and their standard errors are suitably modified to give results in terms of the original series, Zt; see Granger and Newbold (1976).

4 References

Box G E P and Jenkins G M (1976) Time Series Analysis: Forecasting and Control (Revised Edition) Holden–Day
Granger C W J and Newbold P (1976) Forecasting transformed series J. Roy. Statist. Soc. Ser. B 38 189–203
Wei W W S (1990) Time Series Analysis: Univariate and Multivariate Methods Addison–Wesley

5 Arguments

The quantities k, n, kmax, ip, iq, par, npar, qq and v from g13ddc are suitable for input to g13djc.
1: k Integer Input
On entry: k, the dimension of the multivariate time series.
Constraint: k1.
2: n Integer Input
On entry: n, the number of observations in the series, Zt, prior to differencing.
Constraint: n3.
The total number of observations must exceed the total number of parameters in the model; that is
  • if mean=Nag_MeanZero, n×k>ip+iq×k×k+k×k+1/2;
  • if mean=Nag_MeanInclude, n×k>ip+iq×k×k+k+k×k+1/2,
(see the arguments ip, iq and mean).
3: z[kmax×n] const double Input
On entry: z[t-1×kmax+i-1] must contain the ith series at time t, for t=1,2,,n and i=1,2,,k.
4: kmax Integer Input
On entry: the stride separating row elements in the two-dimensional data stored in the arrays z, delta, qq, v, predz, sefz.
Constraint: kmaxk.
5: tr[k] const Integer Input
On entry: tr[i-1] indicates whether the ith series is to be transformed, for i=1,2,,k.
tr[i-1]=-1
A square root transformation is used.
tr[i-1]=0
No transformation is used.
tr[i-1]=1
A log transformation is used.
Constraint: tr[i-1]=-1, 0 or 1, for i=1,2,,k.
6: id[k] const Integer Input
On entry: id[i-1] must specify, di, the order of differencing required for the ith series.
Constraint: 0id[i-1]<n-maxip,iq, for i=1,2,,k.
7: delta[dim] const double Input
Note: the dimension, dim, of the array delta must be at least kmax×d, where d=maxid[i-1].
On entry: if id[i-1]>0, then delta[j-1×kmax+i-1] must be set equal to δij, for j=1,2,,di and i=1,2,,k.
If d=0, delta is not referenced.
8: ip Integer Input
On entry: p, the number of AR parameter matrices.
Constraint: ip0.
9: iq Integer Input
On entry: q, the number of MA parameter matrices.
Constraint: iq0.
10: mean Nag_IncludeMean Input
On entry: mean=Nag_MeanInclude, if components of μ have been estimated and mean=Nag_MeanZero, if all elements of μ are to be taken as zero.
Constraint: mean=Nag_MeanInclude or Nag_MeanZero.
11: par[lpar] const double Input
On entry: must contain the parameter estimates read in row by row in the order ϕ1,ϕ2,,ϕp, θ1,θ2,,θq, μ.
Thus,
  • if ip>0, par[l-1×k×k+i-1×k+j-1] must be set equal to an estimate of the i,jth element of ϕl, for l=1,2,,p, i=1,2,,k and j=1,2,,k;
  • if iq>0, par[p×k×k+l-1×k×k+i-1×k+j-1] must be set equal to an estimate of the i,jth element of θl, for l=1,2,,q, i=1,2,,k and j=1,2,,k;
  • if mean=Nag_MeanInclude, par[p+q×k×k+i-1] must be set equal to an estimate of the ith component of μ, for i=1,2,,k.
Constraint: the first ip×k×k elements of par must satisfy the stationarity condition and the next iq×k×k elements of par must satisfy the invertibility condition.
12: lpar Integer Input
On entry: the dimension of the array par.
Constraints:
  • if mean=Nag_MeanZero, lparmax1,ip+iq×k×k;
  • if mean=Nag_MeanInclude, lparip+iq×k×k+k.
13: qq[kmax×k] double Input/Output
On entry: qq[j-1×kmax+i-1] must contain an estimate of the i,jth element of Σ. The lower triangle only is needed.
Constraint: qq must be positive definite.
On exit: if fail.code= NE_EIGENVALUES, NE_G13D_AR, NE_G13D_MA, NE_NEARLY_POS_DEF, NE_NOT_POS_DEF, NE_OVERFLOW_LIKELY or NE_TRANSFORMATION, then the upper triangle is set equal to the lower triangle.
14: v[dim] const double Input
Note: the dimension, dim, of the array v must be at least kmax×(n-d), where d=maxid[i-1].
On entry: v[t-1×kmax+i-1] must contain an estimate of the ith component of εt+d, for i=1,2,,k and t=1,2,,n-d.
If q=0, v is not used.
15: lmax Integer Input
On entry: the number, lmax, of forecasts required.
Constraint: lmax1.
16: predz[kmax×lmax] double Output
On exit: predz[l-1×kmax+i-1] contains the forecast of zi,n+l, for i=1,2,,k and l=1,2,,lmax.
17: sefz[kmax×lmax] double Output
On exit: sefz[l-1×kmax+i-1] contains an estimate of the standard error of the forecast of zi,n+l, for i=1,2,,k and l=1,2,,lmax.
18: ref[lref] double Output
On exit: the reference vector which may be used to update forecasts using g13dkc. The first lmax-1×k×k elements contain the ψ weight matrices, ψ1,ψ2,,ψlmax-1. The next k×lmax elements contain the forecasts of the transformed series Z^n+1*,Z^n+2*,, Z^n+lmax* and the next k×lmax contain the variances of the forecasts of the transformed variables. The last k elements are used to store the transformations for the series.
19: lref Integer Input
On entry: the dimension of the array ref.
Constraint: lreflmax-1×k×k+2×k×lmax+k.
20: fail NagError * Input/Output
The NAG error argument (see Section 7 in the Introduction to the NAG Library CL Interface).

6 Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
See Section 3.1.2 in the Introduction to the NAG Library CL Interface for further information.
NE_BAD_PARAM
On entry, argument value had an illegal value.
NE_EIGENVALUES
An excessive number of iterations were needed to evaluate the eigenvalues of the matrices used to test for stationarity and invertibility.
NE_G13D_AR
On entry, the AR parameter matrices are outside the stationarity region. To proceed you must supply different parameter estimates in the arrays par and qq.
NE_G13D_MA
On entry, the MA parameter matrices are outside the invertibility region. To proceed you must supply different parameter estimates in the arrays par and qq.
NE_INT
On entry, ip=value.
Constraint: ip0.
On entry, iq=value.
Constraint: iq0.
On entry, k=value.
Constraint: k1.
On entry, lmax=value.
Constraint: lmax1.
On entry, lpar is too small: lpar=value and the minimum size required=value.
On entry, lref=value and the minimum size required=value.
Constraint: lreflmax-1×k×k+2×k×lmax+k.
On entry, n=value.
Constraint: n3.
NE_INT_2
On entry, kmax=value and k=value.
Constraint: kmaxk.
NE_INT_ARRAY
On entry, i=value, id[i-1]=value and n-maxip,iq=value.
Constraint: 0id[i-1]<n-maxip,iq.
On entry, tr[value]=value.
Constraint: tr[i]=-1, 0 or 1.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
See Section 7.5 in the Introduction to the NAG Library CL Interface for further information.
NE_NEARLY_POS_DEF
The covariance matrix may be nearly non-positive definite. In this case the standard deviations of the forecast errors may be non-positive. To proceed you must supply different parameter estimates in the array qq.
NE_NO_LICENCE
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library CL Interface for further information.
NE_NOT_POS_DEF
On entry, the covariance matrix qq is not positive definite. To proceed you must supply different parameter estimates in the arrays par and qq.
NE_OBSERV_LT_P
On entry, number of observations =value and number of parameters =value.
Constraint: number of observationsnumber of parameters.
NE_OVERFLOW_LIKELY
The forecasts will overflow if computed. You should check whether the transformations requested in the array tr are sensible.
NE_TRANSFORMATION
On entry, one (or more) of the transformations requested is invalid. Check that you are not trying to log or square-root a series, some of whose values are negative.

7 Accuracy

The matrix computations are believed to be stable.

8 Parallelism and Performance

g13djc is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.
g13djc makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.
Please consult the X06 Chapter Introduction for information on how to control and interrogate the OpenMP environment used within this function. Please also consult the Users' Note for your implementation for any additional implementation-specific information.

9 Further Comments

The same differencing operator does not have to be applied to all the series. For example, suppose we have k=2, and wish to apply the second order differencing operator 2 to the first series and the first-order differencing operator to the second series:
w1t=2z1t= 1-B 2z1t=1-2B+B2Z1t,   and w2t=z2t=1-Bz2t.  
Then d1=2,d2=1, d=maxd1,d2=2, and
delta= δ11 δ12 δ21 = 2 -1 1 .  
Note:  although differencing may already have been applied prior to the model fitting stage, the differencing parameters supplied in delta are part of the model definition and are still required by this function to produce the forecasts.
g13djc should not be used when the moving average parameters lie close to the boundary of the invertibility region. The function does test for both invertibility and stationarity but if in doubt, you may use g13dxc, before calling this function, to check that the VARMA model being used is invertible.
On a successful exit, the quantities k, lmax, kmax, ref and lref will be suitable for input to g13dkc.

10 Example

This example computes forecasts of the next five values in two series each of length 48. No transformation is to be used and no differencing is to be applied to either of the series. g13ddc is first called to fit an AR(1) model to the series. The mean vector μ is to be estimated and ϕ12,1 constrained to be zero.

10.1 Program Text

Program Text (g13djce.c)

10.2 Program Data

Program Data (g13djce.d)

10.3 Program Results

Program Results (g13djce.r)