Differences a seasonal or nonseasonal time series.
#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.
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.
Pointer to an array of length n_observations containing the differenced series.
#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)
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.
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 (“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.
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>
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]);
}
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
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>
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]);
}
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
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.