NAG CL Interface
g13bjc (multi_inputmod_forecast)
1
Purpose
g13bjc produces forecasts of a time series (the output series) which may depend on one or more other (input) series via a previously estimated multiinput model. The future values of any input series must be supplied. Standard errors of the forecasts are produced. If future values of some of the input series have been obtained as forecasts using ARIMA models for those series, this may be allowed for in the calculation of the standard errors.
2
Specification
void 
g13bjc (Nag_ArimaOrder *arimav,
Integer nseries,
Nag_TransfOrder *transfv,
double para[],
Integer npara,
Integer nev,
Integer nfv,
const double xxy[],
Integer tdxxy,
double rmsxy[],
const Integer mrx[],
Integer tdmrx,
const double parx[],
Integer ldparx,
Integer tdparx,
double fva[],
double fsd[],
Nag_G13_Opt *options,
NagError *fail) 

The function may be called by the names: g13bjc, nag_tsa_multi_inputmod_forecast or nag_tsa_multi_inp_model_forecast.
3
Description
g13bjc has two stages. The first stage is essentially the same as a call to the model estimation function
g13bec, with zero iterations. In particular, all the arguments remain unchanged in the supplied input series transfer function models and output noise series ARIMA model except that a further iteration takes place for any
$\omega $ corresponding to a simple input. The internal nuisance arguments associated with the preobservation period effects of the input series are estimated where requested, and so are any backforecasts of the output noise series. The output components
${z}_{t}$ and
${n}_{t}$, and residuals
${a}_{t}$ are calculated exactly as described in the
Section 3 of
g13bec.
In the second stage, the forecasts of the output series ${y}_{t}$ are calculated for $t=n+1,n+2,\dots ,n+L$ where $n$ is the latest time point of the observations and $L$ is the maximum lead time of the forecasts.
First the new values, ${x}_{t}$ for any input series are used to form the input components ${z}_{t}$ for $t=n+1,n+2,\dots ,n+L$ using the transfer function models:

(a)${z}_{t}={\delta}_{1}{z}_{t1}+{\delta}_{2}{z}_{t2}+\cdots +{\delta}_{p}{z}_{tp}+{\omega}_{0}{x}_{tb}{\omega}_{1}{x}_{tb1}\cdots {\omega}_{q}{x}_{tbq}$.
The output noise component ${n}_{t}$ for $t=n+1,n+2,\dots ,n+L$ is then forecast by setting ${a}_{t}=0$ for $t=n+1,n+2,\dots ,n+L$ and using the ARIMA model equations:

(b)${e}_{t}={\varphi}_{1}{e}_{t1}+{\varphi}_{2}{e}_{t2}+\cdots +{\varphi}_{p}{e}_{tp}+{a}_{t}{\theta}_{1}{a}_{t1}{\theta}_{2}{a}_{t2}\cdots {\theta}_{q}{a}_{tq}$.

(c)${w}_{t}={\Phi}_{1}{w}_{ts}+{\Phi}_{2}{w}_{t2\times s}+\cdots +{\Phi}_{P}{w}_{tP\times s}+{e}_{t}{\Theta}_{1}{e}_{ts}{\Theta}_{2}{e}_{t2\times s}\cdots {\Theta}_{Q}{e}_{tQ\times s}$.

(d)${n}_{t}={\left({\nabla}^{d}{\nabla}_{s}^{D}\right)}^{1}\left({w}_{t}+c\right)$.
This last step of ‘integration’ reverses the process of differencing. Finally the output forecasts are calculated as
The forecast error variance of
${y}_{t+l}$ (i.e., at lead time
$l$) is
${S}_{l}^{2}$, which is the sum of parts which arise from the various input series, and the output noise component. That part due to the output noise is
${V}_{n}$ is the estimated residual variance of the output noise ARIMA model, and
${\psi}_{0},{\psi}_{1},\dots $, are the ‘psiweights’ of this model as defined in
Box and Jenkins (1976). They are calculated by applying the equations (b), (c) and (d) above for
$t=0,1,\dots ,L$, but with artificial values for the various series and with the constant
$c$ set to
$0$. Thus all values of
${a}_{t}$,
${e}_{t}$,
${w}_{t}$ and
${n}_{t}$ are taken as zero for
$t<0$;
${a}_{t}$ is taken to be 1 for
$t=0$ and 0 for
$t>0$. The resulting values of
${n}_{t}$ for
$t=0,1,\dots ,L$ are precisely
${\psi}_{0},{\psi}_{1},\dots ,{\psi}_{L}$ as required.
Further contributions to
${S}_{l}^{2}$ come only from those input series, for which future values are forecasts which have been obtained by applying input series ARIMA models. For such a series the contribution is
${V}_{x}$ is the estimated residual variance of the input series ARIMA model. The coefficients
${\nu}_{0},{\nu}_{1},\dots $ are calculated by applying the transfer function model equation (a) above for
$t=0,1,\dots ,L$, but again with artificial values of the series. Thus all values of
${z}_{t}$ and
${x}_{t}$ for
$t<0$ are taken to be zero, and
${x}_{0},{x}_{1},\dots $ are taken to be the psiweight sequence
${\psi}_{0},{\psi}_{1},\dots $ for the input series ARIMA model. The resulting values of
${z}_{t}$ for
$t=0,1,\dots ,L$ are precisely
${\nu}_{0},{\nu}_{1},\dots ,{\nu}_{L}$ as required.
In adding such contributions ${sz}_{l}^{2}$ to ${sn}_{l}^{2}$ to make up the total forecast error variance ${S}_{l}^{2}$, it is assumed that the various input series with which these contributions are associated, are statistically independent of each other.
When using the function in practice an ARIMA model is required for all the input series. In the case of those inputs for which no such ARIMA model is available (or its effects are to be excluded), the corresponding orders and arguments and the estimated residual variance should be set to zero.
4
References
Box G E P and Jenkins G M (1976) Time Series Analysis: Forecasting and Control (Revised Edition) Holden–Day
5
Arguments

1:
$\mathbf{arimav}$ – Nag_ArimaOrder *

Pointer to structure of type Nag_ArimaOrder with the following members:
 p – Integer
 d – IntegerInput
 q – IntegerInput
 bigp – IntegerInput
 bigd – IntegerInput
 bigq – IntegerInput
 s – IntegerInput

On entry: these seven members of
arimav must specify the orders vector
$\left(p,d,q,P,D,Q,s\right)$, respectively, of the ARIMA model for the output noise component.
$p$, $q$, $P$ and $Q$ refer, respectively, to the number of autoregressive $\left(\varphi \right)$, moving average $\left(\theta \right)$, seasonal autoregressive $\left(\Phi \right)$ and seasonal moving average $\left(\Theta \right)$ arguments.
$d$, $D$ and $s$ refer, respectively, to the order of nonseasonal differencing, the order of seasonal differencing and the seasonal period.
Constraints:
 $p$, $d$, $q$, $P$, $D$, $Q$, $s\ge 0$;
 $p+q+P+Q>0$;
 $s\ne 1$;
 if $s=0$, $P+D+Q=0$;
 if $s>1$, $P+D+Q>0$;
 $d+s\times \left(P+D\right)\le n$;
 $p+dq+s\times \left(P+DQ\right)\le n$.

2:
$\mathbf{nseries}$ – Integer
Input

On entry: the number of input and output series. There may be any number of input series (including none), but only one output series.
Constraint:
${\mathbf{nseries}}>1$ if there are no arguments in the model (that is $p=q=P=Q=0$ and ${\mathbf{options}}\mathbf{.}{\mathbf{cfixed}}=\mathrm{Nag\_TRUE}$), ${\mathbf{nseries}}\ge 1$ otherwise.

3:
$\mathbf{transfv}$ – Nag_TransfOrder *

Pointer to structure of type Nag_TransfOrder with the following members:
 b – Integer *Input
 q – Integer *Input
 p – Integer *
 r – Integer *Input

On entry: before use these member pointers
must be allocated memory by calling
g13byc which allocates
${\mathbf{nseries}}1$ elements to each pointer. The memory allocated to these pointers must be given the transfer function model orders
$b$,
$q$ and
$p$ of each of the input series. The order arguments for input series
$i$ are held in the
$i$th element of the allocated memory for each pointer.
$\mathbf{transfv}\mathbf{\to}\mathbf{b}\left[i1\right]$ holds the value
${b}_{i}$,
$\mathbf{transfv}\mathbf{\to}\mathbf{q}\left[i1\right]$ holds the value
${q}_{i}$ and
$\mathbf{transfv}\mathbf{\to}\mathbf{p}\left[i1\right]$ holds the value
${p}_{i}$.
For a simple input, ${b}_{i}={q}_{i}={p}_{i}=0$.
$\mathbf{transfv}\mathbf{\to}\mathbf{r}\left[i1\right]$ holds the value ${r}_{i}$, where ${r}_{i}=1$ for a simple input, and ${r}_{i}=2$ or 3 for a transfer function input.
The choice ${r}_{i}=3$ leads to estimation of the preperiod input effects as nuisance arguments, and ${r}_{i}=2$ suppresses this estimation. This choice may affect the returned forecasts.
When ${r}_{i}=1$, any nonzero contents of the $i$th element of the memory of $\mathbf{transfv}\mathbf{\to}\mathbf{b}$, $\mathbf{transfv}\mathbf{\to}\mathbf{q}$ and $\mathbf{transfv}\mathbf{\to}\mathbf{p}$ are ignored.
Constraint:
$\mathbf{transfv}\mathbf{\to}\mathbf{r}\left[\mathit{i}1\right]=1$,
$2$ or
$3$, for
$\mathit{i}=1,2,\dots ,{\mathbf{nseries}}1$The memory allocated to the members of
transfv must be freed by a call to
g13bzc

4:
$\mathbf{para}\left[{\mathbf{npara}}\right]$ – double
Input/Output

On entry: estimates of the multiinput model arguments. These are in order firstly the ARIMA model arguments:
$p$ values of
$\varphi $ arguments,
$q$ values of
$\theta $ arguments,
$P$ values of
$\Phi $ arguments,
$Q$ values of
$\Theta $ arguments. These are followed by the transfer function model argument values
${\omega}_{0},{\omega}_{1},\dots ,{\omega}_{{q}_{1}}$, and
${\delta}_{1},{\delta}_{2},\dots ,{\delta}_{{p}_{1}}$ for the first of any input series and similarly for each subsequent input series. The final component of
para is the value of the constant
$c$.
On exit: the input estimates are unaltered except that any $\omega $ estimates corresponding to a simple input will be undated by a single iteration.

5:
$\mathbf{npara}$ – Integer
Input

On entry: the exact number of $\varphi $, $\theta $, $\Phi $, $\Theta $, $\omega $, $\delta $, $c$ arguments, so that ${\mathbf{npara}}=p+q+P+Q+{\mathbf{nseries}}+\sum \left({p}_{i}+{q}_{i}\right)$, the summation being over all the input series. ($c$ must be included whether its value was previously estimated or was set fixed.)

6:
$\mathbf{nev}$ – Integer
Input

On entry: the number of original (undifferenced) values in each of the input and output timeseries.

7:
$\mathbf{nfv}$ – Integer
Input

On entry: the number of forecast values of the output series required.
Constraint:
${\mathbf{nfv}}>0$.

8:
$\mathbf{xxy}\left[\left({\mathbf{nev}}+{\mathbf{nfv}}\right)\times {\mathbf{tdxxy}}\right]$ – const double
Input

Note: the $\left(i,j\right)$th element of the matrix is stored in ${\mathbf{xxy}}\left[\left(i1\right)\times {\mathbf{tdxxy}}+j1\right]$.
On entry: the columns of
xxy must contain in the first
nev places, the past values of each of the input and output series, in that order. In the next
nfv places, the columns relating to the input series (i.e., columns 0 to
${\mathbf{nseries}}2$) contain the future values of the input series which are necessary for construction of the forecasts of the output series
$y$.

9:
$\mathbf{tdxxy}$ – Integer
Input

On entry: the stride separating matrix column elements in the array
xxy.
Constraint:
${\mathbf{tdxxy}}\ge {\mathbf{nseries}}$.

10:
$\mathbf{rmsxy}\left[{\mathbf{nseries}}\right]$ – double
Input/Output

On entry: elements of
${\mathbf{rmsxy}}\left[0\right]$ to
${\mathbf{rmsxy}}\left[{\mathbf{nseries}}2\right]$ must contain the estimated residual variance of the input series ARIMA models. In the case of those inputs for which no ARIMA model is available or its effects are to be excluded in the calculation of forecast standard errors, the corresponding entry of
rmsxy should be set to 0.
On exit:
${\mathbf{rmsxy}}\left[{\mathbf{nseries}}1\right]$ contains the estimated residual variance of the output noise ARIMA model which is calculated from the supplied series. Otherwise
rmsxy is unchanged.

11:
$\mathbf{mrx}\left[7\times {\mathbf{tdmrx}}\right]$ – const Integer
Input

On entry: the orders array for each of the input series ARIMA models. Thus, column
$i1$ contains values of
$p$,
$d$,
$q$,
$P$,
$D$,
$Q$,
$s$ for input series
$i$. In the case of those inputs for which no ARIMA model is available, the corresponding orders should be set to 0.
If there are no input series then
NULL may be supplied in place of
mrx.

12:
$\mathbf{tdmrx}$ – Integer
Input

On entry: the stride separating matrix column elements in the array
mrx.
Constraint:
${\mathbf{tdmrx}}\ge {\mathbf{nseries}}1$.

13:
$\mathbf{parx}\left[{\mathbf{ldparx}}\times {\mathbf{tdparx}}\right]$ – const double
Input

Note: the $\left(i,j\right)$th element of the matrix is stored in ${\mathbf{parx}}\left[\left(i1\right)\times {\mathbf{tdparx}}+j1\right]$.
On entry: values of the arguments (
$\varphi $,
$\theta $,
$\Phi $, and
$\Theta $) for each of the input series ARIMA models. Thus column
$i$ contains
${\mathbf{mrx}}\left[i\right]$ values of
$\varphi $,
${\mathbf{mrx}}\left[\left(2\right)\times {\mathbf{tdmrx}}+i\right]$ values of
$\theta $,
${\mathbf{mrx}}\left[\left(3\right)\times {\mathbf{tdmrx}}+i\right]$ values of
$\Phi $ and
${\mathbf{mrx}}\left[\left(5\right)\times {\mathbf{tdmrx}}+i\right]$ values of
$\Theta $ – in that order.
Values in the columns relating to those input series for which no ARIMA model is available are ignored.
If there are no input series then
NULL may be supplied in place of
parx.

14:
$\mathbf{ldparx}$ – Integer
Input

On entry: the maximum number of arguments in any of the input series ARIMA models. If there are no input series then
ldparx is not referenced.
Constraint:
${\mathbf{ldparx}}\ge nce=\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,\left({\mathbf{mrx}}\left[\mathit{i}\right]+{\mathbf{mrx}}\left[\left(2\right)\times {\mathbf{tdmrx}}+\mathit{i}\right]+{\mathbf{mrx}}\left[\left(3\right)\times {\mathbf{tdmrx}}+\mathit{i}\right]+{\mathbf{mrx}}\left[\left(5\right)\times {\mathbf{tdmrx}}+\mathit{i}\right]\right)\right)$, for $\mathit{i}=0,1,\dots ,{\mathbf{nseries}}1$.

15:
$\mathbf{tdparx}$ – Integer
Input

On entry: the stride separating matrix column elements in the array
parx.
Constraint:
${\mathbf{tdparx}}\ge {\mathbf{nseries}}1$.

16:
$\mathbf{fva}\left[{\mathbf{nfv}}\right]$ – double
Output

On exit: the required forecast values for the output series.

17:
$\mathbf{fsd}\left[{\mathbf{nfv}}\right]$ – double
Output

On exit: the standard errors for each of the forecast values.

18:
$\mathbf{options}$ – Nag_G13_Opt *
Input/Output

On entry/exit: a pointer to a structure of type Nag_G13_Opt whose members are optional parameters for
g13bjc. If the optional parameters are not required, then the null pointer,
G13_DEFAULT, can be used in the function call to
g13bjc. Details of the optional parameters and their types are given below in
Section 11.

19:
$\mathbf{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_2_INT_ARG_LT

On entry,
${\mathbf{ldparx}}=\u2329\mathit{\text{value}}\u232a$ while
$nce=\u2329\mathit{\text{value}}\u232a$. These arguments must satisfy
${\mathbf{ldparx}}\ge nce$. (See the expression for
$nce$ in
Section 5 where
ldparx is described).
On entry, ${\mathbf{tdmrx}}=\u2329\mathit{\text{value}}\u232a$ while ${\mathbf{nseries}}1=\u2329\mathit{\text{value}}\u232a$. These arguments must satisfy ${\mathbf{tdmrx}}\ge {\mathbf{nseries}}1$.
On entry, ${\mathbf{tdparx}}=\u2329\mathit{\text{value}}\u232a$ while ${\mathbf{nseries}}1=\u2329\mathit{\text{value}}\u232a$. These arguments must satisfy ${\mathbf{tdparx}}\ge {\mathbf{nseries}}1$.
On entry, ${\mathbf{tdxxy}}=\u2329\mathit{\text{value}}\u232a$ while ${\mathbf{nseries}}=\u2329\mathit{\text{value}}\u232a$. These arguments must satisfy ${\mathbf{tdxxy}}\ge {\mathbf{nseries}}$.
 NE_ALLOC_FAIL

Dynamic memory allocation failed.
 NE_ARIMA_TEST_FAILED

On entry, or during execution, one or more sets of the ARIMA ($\varphi $, $\theta $, $\Phi $ or $\Theta $) arguments do not satisfy the stationarity or invertibility test conditions.
 NE_BAD_PARAM

On entry, argument ${\mathbf{options}}\mathbf{.}{\mathbf{cfixed}}$ had an illegal value.
 NE_CONSTRAINT

General constraint: $\u2329\mathit{\text{value}}\u232a$.
 NE_DELTA_TEST_FAILED

On entry, or during execution, one or more sets of $\delta $ arguments do not satisfy the stationarity or invertibility test conditions.
 NE_G13_OPTIONS_NOT_INIT

On entry, the option structure,
options, has not been initialized using
g13bxc.
 NE_G13_ORDERS_NOT_INIT

On entry, the orders array structure
transfv in function
g13byc has not been initialized.
 NE_INT_ARG_LE

On entry, ${\mathbf{nfv}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{nfv}}>0$.
 NE_INT_ARG_LT

On entry, ${\mathbf{nseries}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{nseries}}\ge 1$.
 NE_INT_ARRAY_2

Value $\u2329\mathit{\text{value}}\u232a$ given to $\mathbf{transfv}\mathbf{\to}\mathbf{r}\left[\u2329\mathit{\text{value}}\u232a\right]$ not valid. Correct range for elements if $\mathbf{transfv}\mathbf{\to}\mathbf{r}$ is $1\le \mathbf{transfv}\mathbf{\to}\mathbf{r}\left[i\right]\le 3$.
 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.
 NE_INVALID_NSER

On entry, ${\mathbf{nseries}}=1$ and there are no arguments in the model, i.e., ($p=q=P=Q=0$ and ${\mathbf{options}}\mathbf{.}{\mathbf{cfixed}}=\mathrm{Nag\_TRUE}$).
 NE_MAT_NOT_POS_DEF

Attempt to invert the second derivative matrix needed in the calculation of the covariance matrix of the parameter estimates has failed. The matrix is not positive definite, possibly due to rounding errors.
 NE_NPARA_MR_MT_INCONSIST

On entry, there is inconsistency between
npara on the one hand and the elements in the orders structures,
arimav and
transfv on the other.
 NE_NSER_INCONSIST

Value of
nseries passed to
g13byc was
$\u2329\mathit{\text{value}}\u232a$ which is not equal to the value
$\u2329\mathit{\text{value}}\u232a$ passed in this function.
 NE_SOLUTION_FAIL_CONV

Iterative refinement has failed to improve the solution of the equations giving the latest estimates of the arguments. This occurred because the matrix of the set of equations is too illconditioned.
7
Accuracy
The computation used is believed to be stable.
8
Parallelism and Performance
g13bjc is not threaded in any implementation.
The time taken by g13bjc is approximately proportional to the product of the length of each series and the square of the number of arguments in the multiinput model.
10
Example
The data in this example relate to 40 observations of an output time series and 5 input time series. This example differs from
Section 10 in
g13bec in
g13bec in that there are now 4 simple input series. The output series has one autoregressive
$\left(\varphi \right)$ argument and one seasonal moving average
$\left(\Theta \right)$ argument. The seasonal period is
$4$. The transfer function input (the fifth in the set) is defined by orders
${b}_{5}=1$,
${q}_{5}=0$,
${p}_{5}=1$,
${r}_{5}=3$, so that it allows for preobservation period effects. The initial values of the specified model are:
A further eight values of the input series are supplied, and it is assumed that the values for the fifth series have themselves been forecast from an ARIMA model with orders 2 0 2 0 1 1 4, in which ${\varphi}_{1}=1.6743$, ${\varphi}_{2}=0.9505$, ${\theta}_{1}=1.4605$, ${\theta}_{2}=0.4862$ and ${\Theta}_{1}=0.8993$, and for which the residual mean square is 0.1720.
The following are computed and printed out: the estimated residual variance for the output noise series, the eight forecast values and their standard errors, and the values of the components ${z}_{t}$ and the output noise component ${n}_{t}$.
10.1
Program Text
10.2
Program Data
10.3
Program Results
11
Optional Parameters
A number of optional input and output arguments to
g13bjc are available through the structure argument
options of type Nag_G13_Opt. An argument may be selected by assigning an appropriate value to the relevant structure member and those arguments not selected will be assigned default values. If no use is to be made of any of the optional parameters you should use the null pointer,
G13_DEFAULT, in place of
options when calling
g13bjc; the default settings will then be used for all arguments.
Before assigning values to
options the structure must be initialized by a call to the function
g13bxc. Values may then be assigned directly to the structure members in the normal C manner.
Options selected by direct assignment are checked within g13bjc for being within the required range, if outside the range, an error message is generated.
When all calls to
g13bjc have been completed and the results contained in the options structure are no longer required; then
g13xzc should be called to free the NAG allocated memory from
options.
11.1
Optional Parameters Checklist and Default Values
For easy reference, the following list shows the input and output members of
options which are valid for
g13bjc together with their default values where relevant.
Boolean list 
Nag_TRUE 
Boolean cfixed 
Nag_FALSE 
double *zt 

double *noise 

11.2
Description of the Optional Parameters
List – Nag_Boolean   Default $\text{}=\mathrm{Nag\_TRUE}$ 
On entry: if ${\mathbf{options}}\mathbf{.}{\mathbf{List}}=\mathrm{Nag\_TRUE}$ then the argument settings which are used in the call to g13bjc will be printed.
cfixed – Nag_Boolean   Default $\text{}=\mathrm{Nag\_FALSE}$ 
On entry: ${\mathbf{options}}\mathbf{.}{\mathbf{cfixed}}$ must be set to Nag_FALSE if the constant was estimated when the model was fitted, and Nag_TRUE if it was held at a fixed value. This only affects the degrees of freedom used in calculating the estimated residual variance.
zt – double *   Default memory $\text{}=\left({\mathbf{nev}}+{\mathbf{nfv}}\right)\times \left({\mathbf{nseries}}1\right)$ 
On exit: this pointer is allocated memory internally with $\left({\mathbf{nev}}+{\mathbf{nfv}}\right)\times \left({\mathbf{nseries}}1\right)$ elements corresponding to $\left({\mathbf{nev}}+{\mathbf{nfv}}\right)$ rows by ${\mathbf{nseries}}1$ columns. The columns of ${\mathbf{options}}\mathbf{.}{\mathbf{zt}}$ hold the values of the input component series ${z}_{t}$.
noise – double *   Default memory $\text{}={\mathbf{nev}}+{\mathbf{nfv}}$ 
On exit: this pointer is allocated memory internally with ${\mathbf{nev}}+{\mathbf{nfv}}$ elements. It holds the output noise component ${n}_{t}$.