# NAG C Library Function Document

## 1Purpose

nag_tsa_diff (g13aac) carries out non-seasonal and seasonal differencing on a time series. Information which allows the original series to be reconstituted from the differenced series is also produced. This information is required in time series forecasting.

## 2Specification

 #include #include
 void nag_tsa_diff (const double x[], Integer nx, Integer d, Integer ds, Integer s, double xd[], Integer *nxd, NagError *fail)

## 3Description

Let ${\nabla }^{d}{\nabla }_{s}^{D}{x}_{i}$ be the $i$th value of a time series ${x}_{i}$, for $i=1,2,\dots ,n$ after non-seasonal differencing of order $d$ and seasonal differencing of order $D$ (with period or seasonality $s$). In general,
 ${\nabla }^{d}{\nabla }_{s}^{D}{x}_{i}$ $=$ ${\nabla }^{d-1}{\nabla }_{s}^{D}{x}_{i+1}-{\nabla }^{d-1}{\nabla }_{s}^{D}{x}_{i}$ $d>0$ ${\nabla }^{d}{\nabla }_{s}^{D}{x}_{i}$ $=$ ${\nabla }^{d}{\nabla }_{s}^{D-1}{x}_{i+s}-{\nabla }^{d}{\nabla }_{s}^{D-1}{x}_{i}$ $D>0$
Non-seasonal differencing up to the required order $d$ is obtained using
 ${\nabla }^{1}{x}_{i}$ $=$ ${x}_{i+1}-{x}_{i}$ for $i=1,2,\dots ,\left(n-1\right)$ ${\nabla }^{2}{x}_{i}$ $=$ ${\nabla }^{1}{x}_{i+1}-{\nabla }^{1}{x}_{i}$ for $i=1,2,\dots ,\left(n-2\right)$ $\text{ }⋮$ ${\nabla }^{d}{x}_{i}$ $=$ ${\nabla }^{d-1}{x}_{i+1}-{\nabla }^{d-1}{x}_{i}$ for $i=1,2,\dots ,\left(n-d\right)$
Seasonal differencing up to the required order $D$ is then obtained using
 ${\nabla }^{d}{\nabla }_{s}^{1}{x}_{i}$ $=$ ${\nabla }^{d}{x}_{i+s}-{\nabla }^{d}{x}_{i}$ for $i=1,2,\dots ,\left(n-d-s\right)$ ${\nabla }^{d}{\nabla }_{s}^{2}{x}_{i}$ $=$ ${\nabla }^{d}{\nabla }_{s}^{1}{x}_{i+s}-{\nabla }^{d}{\nabla }_{s}^{1}{x}_{i}$ for $i=1,2,\dots ,\left(n-d-2s\right)$ $\text{ }⋮$ ${\nabla }^{d}{\nabla }_{s}^{D}{x}_{i}$ $=$ ${\nabla }^{d}{\nabla }_{s}^{D-1}{x}_{i+s}-{\nabla }^{d}{\nabla }_{s}^{D-1}{x}_{i}$ for $i=1,2,\dots ,\left(n-d-D×s\right)$
Mathematically, the sequence in which the differencing operations are performed does not affect the final resulting series of $m=n-d-D×s$ values.
None.

## 5Arguments

1:    $\mathbf{x}\left[{\mathbf{nx}}\right]$const doubleInput
On entry: the undifferenced time series, ${x}_{\mathit{i}}$, for $\mathit{i}=1,2,\dots ,n$.
2:    $\mathbf{nx}$IntegerInput
On entry: $n$, the number of values in the undifferenced time series.
Constraint: ${\mathbf{nx}}>{\mathbf{d}}+\left({\mathbf{ds}}×{\mathbf{s}}\right)$.
3:    $\mathbf{d}$IntegerInput
On entry: $d$, the order of non-seasonal differencing.
Constraint: ${\mathbf{d}}\ge 0$.
4:    $\mathbf{ds}$IntegerInput
On entry: $D$, the order of seasonal differencing.
Constraint: ${\mathbf{ds}}\ge 0$.
5:    $\mathbf{s}$IntegerInput
On entry: $s$, the seasonality.
Constraints:
• if ${\mathbf{ds}}>0$, ${\mathbf{s}}>0$;
• if ${\mathbf{ds}}=0$, ${\mathbf{s}}\ge 0$.
6:    $\mathbf{xd}\left[{\mathbf{nx}}\right]$doubleOutput
On exit: the differenced values in elements $0$ to ${\mathbf{nxd}}-1$, and reconstitution data in the remainder of the array.
7:    $\mathbf{nxd}$Integer *Output
On exit: the number of differenced values in the array xd.
8:    $\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.
NE_BAD_PARAM
On entry, argument $〈\mathit{\text{value}}〉$ had an illegal value.
NE_INT
On entry, ${\mathbf{d}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{d}}\ge 0$.
On entry, ${\mathbf{ds}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{ds}}\ge 0$.
On entry, ${\mathbf{s}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{s}}\ge 0$.
NE_INT_2
On entry, ${\mathbf{ds}}=〈\mathit{\text{value}}〉$.
Constraint: if ${\mathbf{s}}=0$, ${\mathbf{ds}}\le 0$.
NE_INT_4
On entry, ${\mathbf{nx}}=〈\mathit{\text{value}}〉$, ${\mathbf{d}}=〈\mathit{\text{value}}〉$, ${\mathbf{ds}}=〈\mathit{\text{value}}〉$ and ${\mathbf{s}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{nx}}>{\mathbf{d}}+\left({\mathbf{ds}}×{\mathbf{s}}\right)$.
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.

## 7Accuracy

The computations are believed to be stable.

## 8Parallelism and Performance

nag_tsa_diff (g13aac) is not threaded in any implementation.

## 9Further Comments

The time taken by nag_tsa_diff (g13aac) is approximately proportional to $\left({\mathbf{d}}+{\mathbf{ds}}\right)×{\mathbf{nx}}$.

## 10Example

This example reads in a set of data consisting of $20$ observations from a time series. Non-seasonal differencing of order $2$ and seasonal differencing of order $1$ (with seasonality of $4$) are applied to the input data, giving an output array holding $14$ differenced values and $6$ values which can be used to reconstitute the output array.

### 10.1Program Text

Program Text (g13aace.c)

### 10.2Program Data

Program Data (g13aace.d)

### 10.3Program Results

Program Results (g13aace.r)