Chapter 8: Time Series and Forecasting

difference

Differences a seasonal or nonseasonal time series.

Synopsis

#include <imsls.h>

float *imsls_f_difference (int n_observations, float z[], int n_differences, int periods[], ..., 0)

The type double function is imsls_d_difference.

Required Arguments

int n_observations   (Input)
Number of observations.

float z[]   (Input)
Array of length n_observations containing the time series.

int n_differences   (Input)
Number of differences to perform. Argument n_differences must be greater than or equal to 1.

int periods[]   (Input)
Array of length n_differences containing the periods at which z is to be differenced.

Return Value

Pointer to an array of length n_observations containing the differenced series.

Synopsis with Optional Arguments

#include <imsls.h>

float *imsls_f_difference (int n_observations, float z[], int n_differences, int periods[],
IMSLS_ORDERS, int orders[],
IMSLS_LOST, intv*n_lost,
IMSLS_EXCLUDE_FIRST, or
IMSLS_SET_FIRST_TO_NAN,
IMSLS_RETURN_USER, float w[],
0)

Optional Arguments

IMSLS_ORDERS, int orders[]   (Input)
Array of length n_differences containing the order of each difference given in periods. The elements of orders must be greater than or equal to 0.

IMSLS_LOST, int *n_lost   (Output)
Number of observations lost because of differencing the time series z.

IMSLS_EXCLUDE_FIRST, or

IMSLS_SET_FIRST_TO_NAN
If IMSLS_EXCLUDE_FIRST is specified, the first n_lost are excluded from w due to differencing. The differenced series w is of length n_observations n_lost. If IMSLS_SET_FIRST_TO_NAN is specified, the first n_lost observations are set to NaN (Not a Number). This is the default if neither IMSLS_EXCLUDE_FIRST nor IMSLS_SET_FIRST_TO_NAN is specified.

IMSLS_RETURN_USER, float w[]   (Output)
If specified, w contains the differenced series. If IMSLS_EXCLUDE_FIRST also is specified, w is of length n_observations. If IMSLS_SET_FIRST_TO_NAN is specified or neither IMSLS_EXCLUDE_FIRST nor IMSLS_SET_FIRST_TO_NAN is specified, w is of length n_observations  n_lost.

Description

Function imsls_f_difference performs m = n_differences successive backward differences of period si = periods [i  1] and order
di = orders [i  1] for i = 1, ..., m on the n = n_observations observations {Zt} for t = 1, 2, ..., n.

Consider the backward shift operator B given by

for all k. Then, the backward difference operator with period s is defined by the following:

                                                             for   .

Note that and  are defined only for t = (s + 1), ..., n. Repeated differencing with period s is simply

where d  0 is the order of differencing. Note that

is defined only for t = (sd + 1), ..., n.

The general difference formula used in the function imsls_f_difference is given by

where nL represents the number of observations “lost” because of differencing and NaN represents the missing value code. See the functions imsls_f_machine and imsls_d_machine (Chapter 15, “Utilities”) to retrieve missing values. Note that

A homogeneous, stationary time series can be arrived at by appropriately differencing a homogeneous, nonstationary time series (Box and Jenkins 1976, p. 85). Preliminary application of an appropriate transformation followed by differencing of a series can enable model identification and parameter estimation in the class of homogeneous stationary autoregressive moving average models.

Examples

Example 1

Consider the Airline Data (Box and Jenkins 1976, p. 531) consisting of the monthly total number of international airline passengers from January 1949 through December 1960. Function imsls_f_difference is used to compute

for  t = 14, 15, ..., 24.

#include <imsls.h>

void main()

{
    int    i;
    int    n_observations = 24;
    int    n_differences = 2;
    int    periods[2] = {1, 12};
    float  *z;
    float  *difference;

    z = imsls_f_data_sets (4, 0);
    difference = imsls_f_difference (n_observations, z,
                                     n_differences, periods,
                                     0);
    printf ("i\tz[i]\tdifference[i]\n");
    for (i = 0; i < n_observations; i++)
        printf ("%d\t%f\t%f\n", i, z[i], difference[i]);

}

Output

 i      z[i]         difference[i]
 0      112.000000   NaN
 1      118.000000   NaN
 2      132.000000   NaN
 3      129.000000   NaN
 4      121.000000   NaN
 5      135.000000   NaN
 6      148.000000   NaN
 7      148.000000   NaN
 8      136.000000   NaN
 9      119.000000   NaN
10      104.000000   NaN
11      118.000000   NaN
12      115.000000   NaN
13      126.000000   5.000000
14      141.000000   1.000000
15      135.000000  -3.000000
16      125.000000  -2.000000
17      149.000000  10.000000
18      170.000000   8.000000
19      170.000000   0.000000
20      158.000000   0.000000
21      133.000000  -8.000000
22      114.000000  -4.000000
23      140.000000  12.000000

Example 2

The data for this example is the same as that for the initial example. The first n_lost observations are excluded from W due to differencing, and n_lost is also output.

#include <imsls.h>

void main()
{

    int    i;
    int    n_observations = 24;
    int    n_differences = 2;
    int    periods[2] = {1, 12};
    int    n_lost;
    float  *z;
    float  *difference;
                  /* Get airline data */
    z = imsls_f_data_sets (4, 0);
                  /* Compute differenced time series when observations
                     lost are excluded from the differencing */
    difference = imsls_f_difference (n_observations, z,
                                     n_differences, periods,
                                     IMSLS_EXCLUDE_FIRST,
                                     IMSLS_LOST, &n_lost,
                                     0);
                  /* Print the number of lost observations */
    printf ("n_lost equals %d\n", n_lost);
    printf ("\n\ni\tz[i]\t        difference[i]\n");
                  /* Print the original time series and the differenced
                     time series */
    for (i = 0; i < n_observations - n_lost; i++)
        printf ("%d\t%f\t%f\n", i, z[i], difference[i]);
}

Output

n_lost equals 13


 i      z[i]          difference[i]
 0      112.000000    5.000000
 1      118.000000    1.000000
 2      132.000000   -3.000000
 3      129.000000   -2.000000
 4      121.000000   10.000000
 5      135.000000    8.000000
 6      148.000000    0.000000
 7      148.000000    0.000000
 8      136.000000   -8.000000
 9      119.000000   -4.000000
10      104.000000   12.000000

Fatal Errors

IMSLS_PERIODS_LT_ZERO                       “period[#]” = #. All elements of “period” must be greater than 0.

IMSLS_ORDER_NEGATIVE                         “order[#]” = #. All elements of “order” must be nonnegative.

IMSLS_Z_CONTAINS_NAN                         “z[#]” = NaN; “z” can not contain missing values. There may be other elements of “z” that are equal to NaN.


Visual Numerics, Inc.
Visual Numerics - Developers of IMSL and PV-WAVE
http://www.vni.com/
PHONE: 713.784.3131
FAX:713.781.9260