# NAG C Library Function Document

## 1Purpose

nag_tsa_varma_update (g13dkc) accepts a sequence of new observations in a multivariate time series and updates both the forecasts and the standard deviations of the forecast errors. A call to nag_tsa_varma_forecast (g13djc) must be made prior to calling this function in order to calculate the elements of a reference vector together with a set of forecasts and their standard errors. On a successful exit from nag_tsa_varma_update (g13dkc) the reference vector is updated so that should future series values become available these forecasts may be updated by recalling nag_tsa_varma_update (g13dkc).

## 2Specification

 #include #include
 void nag_tsa_varma_update (Integer k, Integer lmax, Integer m, Integer *mlast, const double z[], Integer kmax, double ref[], Integer lref, double v[], double predz[], double sefz[], NagError *fail)

## 3Description

Let ${Z}_{\mathit{t}}={\left({z}_{1\mathit{t}},{z}_{2\mathit{t}},\dots ,{z}_{k\mathit{t}}\right)}^{\mathrm{T}}$, for $\mathit{t}=1,2,\dots ,n$, denote a $k$-dimensional time series for which forecasts of ${\stackrel{^}{Z}}_{n+1},{\stackrel{^}{Z}}_{n+2},\dots ,{\stackrel{^}{Z}}_{n+{l}_{\mathrm{max}}}$ have been computed using nag_tsa_varma_forecast (g13djc). Given $m$ further observations ${Z}_{n+1},{Z}_{n+2},\dots ,{Z}_{n+m}$, where $m<{l}_{\mathrm{max}}$, nag_tsa_varma_update (g13dkc) updates the forecasts of ${Z}_{n+m+1},{Z}_{n+m+2},\dots ,{Z}_{n+{l}_{\mathrm{max}}}$ and their corresponding standard errors.
nag_tsa_varma_update (g13dkc) uses a multivariate version of the procedure described in Box and Jenkins (1976). The forecasts are updated using the $\psi$ weights, computed in nag_tsa_varma_forecast (g13djc). If ${Z}_{t}^{*}$ denotes the transformed value of ${Z}_{t}$ and ${\stackrel{^}{Z}}_{t}^{*}\left(l\right)$ denotes the forecast of ${Z}_{t+l}^{*}$ from time $t$ with a lead of $l$ (that is the forecast of ${Z}_{t+l}^{*}$ given observations ${Z}_{t}^{*},{Z}_{t-1}^{*},\dots \text{}$), then
 $Z^t+1*l=τ+ψlεt+1+ψl+1εt+ψl+2εt-1+⋯$
and
 $Z^t*l+ 1=τ+ψl+ 1εt+ψl+ 2εt- 1+⋯$
where $\tau$ is a constant vector of length $k$ involving the differencing parameters and the mean vector $\mu$. By subtraction we obtain
 $Z^t+1*l=Z^t*l+1+ψlεt+1.$
Estimates of the residuals corresponding to the new observations are also computed as ${\epsilon }_{n+\mathit{l}}={Z}_{n+\mathit{l}}^{*}-{\stackrel{^}{Z}}_{n}^{*}\left(\mathit{l}\right)$, for $\mathit{l}=1,2,\dots ,m$. These may be of use in checking that the new observations conform to the previously fitted model.
On a successful exit, the reference array is updated so that nag_tsa_varma_update (g13dkc) may be called again should future series values become available, see Section 9.
When a transformation has been used the forecasts and their standard errors are suitably modified to give results in terms of the original series ${Z}_{t}$; see Granger and Newbold (1976).
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

## 5Arguments

The quantities k, lmax, kmax, ref and lref from nag_tsa_varma_forecast (g13djc) are suitable for input to nag_tsa_varma_update (g13dkc).
1:    $\mathbf{k}$IntegerInput
On entry: $k$, the dimension of the multivariate time series.
Constraint: ${\mathbf{k}}\ge 1$.
2:    $\mathbf{lmax}$IntegerInput
On entry: the number, ${l}_{\mathrm{max}}$, of forecasts requested in the call to nag_tsa_varma_forecast (g13djc).
Constraint: ${\mathbf{lmax}}\ge 2$.
3:    $\mathbf{m}$IntegerInput
On entry: $m$, the number of new observations available since the last call to either nag_tsa_varma_forecast (g13djc) or nag_tsa_varma_update (g13dkc). The number of new observations since the last call to nag_tsa_varma_forecast (g13djc) is then ${\mathbf{m}}+{\mathbf{mlast}}$.
Constraint: $0<{\mathbf{m}}<{\mathbf{lmax}}-{\mathbf{mlast}}$.
4:    $\mathbf{mlast}$Integer *Input/Output
On entry: on the first call to nag_tsa_varma_update (g13dkc), since calling
nag_tsa_varma_forecast (g13djc), mlast must be set to $0$ to indicate that no new observations have yet been used to update the forecasts; on subsequent calls mlast must contain the value of mlast as output on the previous call to nag_tsa_varma_update (g13dkc).
On exit: is incremented by $m$ to indicate that ${\mathbf{mlast}}+{\mathbf{m}}$ observations have now been used to update the forecasts since the last call to nag_tsa_varma_forecast (g13djc).
mlast must not be changed between calls to nag_tsa_varma_update (g13dkc), unless a call to nag_tsa_varma_forecast (g13djc) has been made between the calls in which case mlast should be reset to $0$.
Constraint: $0\le {\mathbf{mlast}}<{\mathbf{lmax}}-{\mathbf{m}}$.
5:    $\mathbf{z}\left[{\mathbf{kmax}}×{\mathbf{m}}\right]$const doubleInput
On entry: ${\mathbf{z}}\left[{\mathbf{kmax}}×\left(\mathit{j}-1\right)+\mathit{i}-1\right]$ must contain the value of ${z}_{\mathit{i},n+{\mathbf{mlast}}+\mathit{j}}$, for $\mathit{i}=1,2,\dots ,k$ and $\mathit{j}=1,2,\dots ,m$, and where $n$ is the number of observations in the time series in the last call made to nag_tsa_varma_forecast (g13djc).
Constraint: if the transformation defined in tr in nag_tsa_varma_forecast (g13djc) for the $\mathit{i}$th series is the log transformation, then ${\mathbf{z}}\left[{\mathbf{kmax}}×\left(\mathit{j}-1\right)+\mathit{i}-1\right]>0.0$, and if it is the square-root transformation, then ${\mathbf{z}}\left[{\mathbf{kmax}}×\left(\mathit{j}-1\right)+\mathit{i}-1\right]\ge 0.0$, for $\mathit{j}=1,2,\dots ,m$ and $\mathit{i}=1,2,\dots ,k$.
6:    $\mathbf{kmax}$IntegerInput
On entry: the first dimension of the arrays z, predz, sefz and v.
Constraint: ${\mathbf{kmax}}\ge {\mathbf{k}}$.
7:    $\mathbf{ref}\left[{\mathbf{lref}}\right]$doubleInput/Output
On entry: must contain the first $\left({\mathbf{lmax}}-1\right)×{\mathbf{k}}×{\mathbf{k}}+2×{\mathbf{k}}×{\mathbf{lmax}}+{\mathbf{k}}$ elements of the reference vector as returned on a successful exit from nag_tsa_varma_forecast (g13djc) (or a previous call to nag_tsa_varma_update (g13dkc)).
On exit: the elements of ref are updated. The first $\left({\mathbf{lmax}}-1\right)×{\mathbf{k}}×{\mathbf{k}}$ elements store the $\psi$ weights ${\psi }_{1},{\psi }_{2},\dots ,{\psi }_{{l}_{\mathrm{max}}-1}$. The next ${\mathbf{k}}×{\mathbf{lmax}}$ elements contain the forecasts of the transformed series and the next ${\mathbf{k}}×{\mathbf{lmax}}$ elements contain the variances of the forecasts of the transformed variables; see nag_tsa_varma_forecast (g13djc). The last k elements are not updated.
8:    $\mathbf{lref}$IntegerInput
On entry: the dimension of the array ref.
Constraint: ${\mathbf{lref}}\ge \left({\mathbf{lmax}}-1\right)×{\mathbf{k}}×{\mathbf{k}}+2×{\mathbf{k}}×{\mathbf{lmax}}+{\mathbf{k}}$.
9:    $\mathbf{v}\left[{\mathbf{kmax}}×{\mathbf{m}}\right]$doubleOutput
On exit: ${\mathbf{v}}\left[{\mathbf{kmax}}×\left(\mathit{j}-1\right)+\mathit{i}-1\right]$ contains an estimate of the $\mathit{i}$th component of ${\epsilon }_{n+{\mathbf{mlast}}+\mathit{j}}$, for $\mathit{i}=1,2,\dots ,k$ and $\mathit{j}=1,2,\dots ,m$.
10:  $\mathbf{predz}\left[{\mathbf{kmax}}×{\mathbf{lmax}}\right]$doubleInput/Output
On entry: nonupdated values are kept intact.
On exit: ${\mathbf{predz}}\left[{\mathbf{kmax}}×\left(\mathit{j}-1\right)+\mathit{i}-1\right]$ contains the updated forecast of ${z}_{\mathit{i},n+\mathit{j}}$, for $\mathit{i}=1,2,\dots ,k$ and $\mathit{j}={\mathbf{mlast}}+{\mathbf{m}}+1,\dots ,{l}_{\mathrm{max}}$.
The columns of predz corresponding to the new observations since the last call to either nag_tsa_varma_forecast (g13djc) or nag_tsa_varma_update (g13dkc) are set equal to the corresponding columns of z.
11:  $\mathbf{sefz}\left[{\mathbf{kmax}}×{\mathbf{lmax}}\right]$doubleInput/Output
On entry: nonupdated values are kept intact.
On exit: ${\mathbf{sefz}}\left[{\mathbf{kmax}}×\left(\mathit{j}-1\right)+\mathit{i}-1\right]$ contains an estimate of the standard error of the corresponding element of predz, for $\mathit{i}=1,2,\dots ,k$ and $\mathit{j}={\mathbf{mlast}}+{\mathbf{m}}+1,\dots ,{l}_{\mathrm{max}}$.
The columns of sefz corresponding to the new observations since the last call to either nag_tsa_varma_forecast (g13djc) or nag_tsa_varma_update (g13dkc) are set equal to zero.
12:  $\mathbf{fail}$NagError *Input/Output
The NAG error argument (see Section 3.7 in How to Use the NAG Library and its Documentation).

## 6Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
See Section 2.3.1.2 in How to Use the NAG Library and its Documentation for further information.
On entry, argument $〈\mathit{\text{value}}〉$ had an illegal value.
NE_INT
On entry, ${\mathbf{k}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{k}}\ge 1$.
On entry, ${\mathbf{lmax}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{lmax}}\ge 2$.
On entry, ${\mathbf{lref}}=〈\mathit{\text{value}}〉$ and the minimum size $\text{required}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{lref}}\ge \left({\mathbf{lmax}}-1\right)×{\mathbf{k}}×{\mathbf{k}}+2×{\mathbf{k}}×{\mathbf{lmax}}+{\mathbf{k}}$.
On entry, ${\mathbf{m}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{m}}>0$.
On entry, ${\mathbf{mlast}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{mlast}}\ge 0$.
NE_INT_2
On entry, ${\mathbf{kmax}}=〈\mathit{\text{value}}〉$ and ${\mathbf{k}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{kmax}}\ge {\mathbf{k}}$.
NE_INT_3
On entry, ${\mathbf{m}}=〈\mathit{\text{value}}〉$, ${\mathbf{lmax}}=〈\mathit{\text{value}}〉$ and ${\mathbf{mlast}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{m}}<{\mathbf{lmax}}-{\mathbf{mlast}}$.
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 2.7.6 in How to Use the NAG Library and its Documentation for further information.
NE_NO_LICENCE
Your licence key may have expired or may not have been installed correctly.
See Section 2.7.5 in How to Use the NAG Library and its Documentation for further information.
NE_REF_VEC
On entry, some of the elements of the array ref have been corrupted.
NE_RESULT_OVERFLOW
The updated forecasts will overflow if computed.
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.

## 7Accuracy

The matrix computations are believed to be stable.

## 8Parallelism and Performance

nag_tsa_varma_update (g13dkc) 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.

If a further ${m}^{*}$ observations, ${Z}_{n+{\mathbf{mlast}}+1},{Z}_{n+{\mathbf{mlast}}+2},\dots ,{Z}_{n+{\mathbf{mlast}}+{m}^{*}}$, become available, then forecasts of ${Z}_{n+{\mathbf{mlast}}+{m}^{*}+1},{Z}_{n+{\mathbf{mlast}}+{m}^{*}+2},\dots ,{Z}_{n+{l}_{\mathrm{max}}}$ may be updated by recalling nag_tsa_varma_update (g13dkc) with ${\mathbf{m}}={m}^{*}$. Note that m and the contents of the array z are the only quantities which need updating; mlast is updated on exit from the previous call. On a successful exit, v contains estimates of ${\epsilon }_{n+{\mathbf{mlast}}+1},{\epsilon }_{n+{\mathbf{mlast}}+2},\dots ,{\epsilon }_{n+{\mathbf{mlast}}+{m}^{*}}$; columns ${\mathbf{mlast}}+1,{\mathbf{mlast}}+2,\dots ,{\mathbf{mlast}}+{m}^{*}$ of predz contain the new observed values ${Z}_{n+{\mathbf{mlast}}+1},{Z}_{n+{\mathbf{mlast}}+2},\dots ,{Z}_{n+{\mathbf{mlast}}+{m}^{*}}$ and columns ${\mathbf{mlast}}+1,{\mathbf{mlast}}+2,\dots ,{\mathbf{mlast}}+{m}^{*}$ of sefz are set to zero.

## 10Example

This example shows how to update the forecasts of two series each of length $48$. No transformation has been used and no differencing applied to either of the series. nag_tsa_varma_estimate (g13ddc) is first called to fit an AR(1) model to the series. $\mu$ is to be estimated and ${\varphi }_{1}\left(2,1\right)$ constrained to be zero. A call to nag_tsa_varma_forecast (g13djc) is then made in order to compute forecasts of the next five series values. After one new observation becomes available the four forecasts are updated. A further observation becomes available and the three forecasts are updated.

### 10.1Program Text

Program Text (g13dkce.c)

### 10.2Program Data

Program Data (g13dkce.d)

### 10.3Program Results

Program Results (g13dkce.r)