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, int *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 (Input)
or
IMSLS_SET_FIRST_TO_NAN (Input)
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:
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_machineto 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>
#include <stdio.h>
int 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>
#include <stdio.h>
int 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. |