crosscorrelation

   more...
Computes the sample cross-correlation function of two stationary time series.
Synopsis
#include <imsls.h>
float *imsls_f_crosscorrelation (int n_observations, float x[], float y[], int lagmax, ..., 0)
The type double function is imsls_d_crosscorrelation.
Required Arguments
int n_observations (Input)
Number of observations in each time series. n_observations must be greater than or equal to 2.
float x[] (Input)
Array of length n_observations containing the first time series.
float y[] (Input)
Array of length n_observations containing the second time series.
int lagmax (Input)
Maximum lag of cross-covariances and cross-correlations to be computed. lagmax must be greater than or equal to 1 and less than n_observations.
Return Value
Pointer to an array of length 2 × lagmax + 1 containing the cross-correlations between the time series x and y. The k-th element of this array contains the cross-correlation between x and y at lag(k-lagmax) where k = 0, 1, , 2*lagmax. To release this space, use imsls_free. If no solution can be computed, NULL is returned.
Synopsis with Optional Arguments
#include <imsls.h>
float *imsls_f_crosscorrelation (int n_observations, float x[], float y[], int lagmax,
IMSLS_PRINT_LEVEL, int iprint,
IMSLS_INPUT_MEANS, float x_mean_in, float y_mean_in,
IMSLS_OUTPUT_MEANS, float *x_mean_out, float *y_mean_out,
IMSLS_VARIANCES, float *x_variance, float *y_variance,
IMSLS_SE_CCF, float **standard_errors, int se_option,
IMSLS_SE_CCF_USER, float standard_errors[], int se_option,
IMSLS_CROSS_COVARIANCES, float **cross_covariances,
IMSLS_CROSS_COVARIANCES_USER, float cross_covariances[],
IMSLS_RETURN_USER, float crosscorrelations[],
0)
Optional Arguments
IMSLS_PRINT_LEVEL, int iprint (Input)
Printing option.
iprint
Action
0
No printing is performed.
1
Prints the means and variances.
2
Prints the means, variances, and cross-covariances.
3
Prints the means, variances, cross-covariances, cross-correlations, and standard errors of cross-correlations.
Default = 0.
IMSLS_INPUT_MEANS, float x_mean_in, float y_mean_in (Input)
If specified, x_mean_in is the user input of the estimate of the mean of the time series x and y_mean_in is the user input of the estimate of the mean of the time series y.
IMSLS_OUTPUT_MEANS, float *x_mean_out, float *y_mean_out (Output)
If specified, x_mean_out is the mean of the time series x and y_mean_out is the mean of the time series y.
IMSLS_VARIANCES, float *x_variance, float *y_variance (Output)
If specified, x_variance is variance of the time series x and y_variance is variance of the time series y.
IMSLS_SE_CCF, float **standard_errors, int se_option (Output)
Address of a pointer to an array of length 2 × lagmax + 1containing the standard errors of the cross-correlations between the time series x and y. Method of computation for standard errors of the cross-correlations is chosen by se_option.
se_option
Action
1
Compute standard errors of cross-correlations using Bartlett’s formula.
2
Compute standard errors of cross-correlations using Bartlett’s formula with the assumption of no cross-correlation.
IMSLS_SE_CCF_USER, float standard_errors[], int se_option (Output)
If specified, standard_errors is an array of length 2 × lagmax + 1 containing the standard errors of the cross-correlations between the time series x and y. See IMSLS_SE_CC.
IMSLS_CROSS_COVARIANCES, float **cross_covariances (Output)
Address of a pointer to an array of length 2 × lagmax + 1 containing the cross-covariances between the time series x and y. The k-th element of this array contains the cross-covariances between x and y at lag (k-lagmax), where k = 0, 1, …, 2 × lagmax.
IMSLS_CROSS_COVARIANCES_USER, float cross_covariances[] (Output)
If specified, cross_covariances is a user-specified array of length 2*lagmax + 1 containing the cross-covariances between the time series x and y. See IMSLS_CROSS_COVARIANCES.
IMSLS_RETURN_USER, float crosscorrelations[] (Output)
If specified, crosscorrelations is an array of length 2 × lagmax + 1 containing the cross-correlations between the time series x and y. The k-th element of this array contains the cross-correlation between x and y at lag (k-lagmax) where k = 0, 1, , 2×lagmax.
Description
Function imsls_f_crosscorrelation estimates the cross-correlation function of two jointly stationary time series given a sample of n = n_observations observations {Xt} and {Yt} for t = 1, 2, …, n.
Let be the estimate of the mean μX of the time series {Xt} where
The autocovariance function of {Xt}, σX(k), is estimated by
where K = lagmax. Note that
is equivalent to the sample variance x_variance. The autocorrelation function ρX(k) is estimated by
Note that
by definition. Let
be similarly defined.
The cross-covariance function σXY(k) is estimated by
The cross-correlation function ρXY(k) is estimated by
The standard errors of the sample cross-correlations may be optionally computed according to argument se_option for the optional argument IMSLS_SE_CCF. One method is based on a general asymptotic expression for the variance of the sample cross-correlation coefficient of two jointly stationary time series with independent, identically distributed normal errors given by Bartlett (1978, page 352). The theoretical formula is
For computational purposes, the autocorrelations ρX(k) and ρY(k) and the cross-correlations ρXY(k) are replaced by their corresponding estimates for |k K, and the limits of summation are equal to zero for all k such that |k| > K.
A second method evaluates Bartlett’s formula under the additional assumption that the two series have no cross-correlation. The theoretical formula is
For additional special cases of Bartlett’s formula, see Box and Jenkins (1976, page 377).
An important property of the cross-covariance coefficient is σXY(k) = σYX(-k) for k  0. This result is used in the computation of the standard error of the sample cross-correlation for lag k < 0. In general, the cross-covariance function is not symmetric about zero so both positive and negative lags are of interest.
Example
Consider the Gas Furnace Data (Box and Jenkins 1976, pages 532–533) where X is the input gas rate in cubic feet/minute and Y is the percent CO2 in the outlet gas. Function imsls_f_crosscorrelation is used to compute the cross-covariances and cross-correlations between time series X and Y with lags from  -10 through lag  10. In addition, the estimated standard errors of the estimated cross-correlations are computed. The standard errors are based on the additional assumption that all cross-correlations for X and Y are zero.
 
#include <imsls.h>
#include <stdio.h>
 
#define nobs 296
#define lagmax 10
 
int main ()
{
int i;
float data[nobs][2], x[nobs], y[nobs];
float *secc = NULL, *ccv = NULL, *cc = NULL;
float xmean, ymean, xvar, yvar;
 
imsls_f_data_sets (7, IMSLS_X_COL_DIM, 2, IMSLS_RETURN_USER, data, 0);
 
for (i = 0; i < nobs; i++)
{
x[i] = data[i][0];
y[i] = data[i][1];
}
 
cc = imsls_f_crosscorrelation (nobs, x, y, lagmax,
IMSLS_OUTPUT_MEANS, &xmean, &ymean,
IMSLS_VARIANCES, &xvar, &yvar,
IMSLS_SE_CCF, &secc, 2,
IMSLS_CROSS_COVARIANCES, &ccv, 0);
 
printf ("Mean of series X = %g\n", xmean);
printf ("Variance of series X = %g\n\n", xvar);
printf ("Mean of series Y = %g\n", ymean);
printf ("Variance of series Y = %g\n\n", yvar);
 
printf ("Lag CCV CC SECC\n\n");
for (i = 0; i < 2 * lagmax + 1; i++)
printf ("%-5d%13g%13g%13g\n", i - lagmax, ccv[i], cc[i], secc[i]);
}
Output
 
Mean of series X = -0.0568344
Variance of series X = 1.14694
 
Mean of series Y = 53.5091
Variance of series Y = 10.2189
 
Lag CCV CC SECC
 
-10 -0.404502 -0.118154 0.162754
-9 -0.508491 -0.148529 0.16247
-8 -0.61437 -0.179456 0.162188
-7 -0.705476 -0.206067 0.161907
-6 -0.776167 -0.226716 0.161627
-5 -0.831474 -0.242871 0.161349
-4 -0.891316 -0.260351 0.161073
-3 -0.980605 -0.286432 0.160798
-2 -1.12477 -0.328542 0.160524
-1 -1.34704 -0.393467 0.160252
0 -1.65853 -0.484451 0.159981
1 -2.04865 -0.598405 0.160252
2 -2.48217 -0.725033 0.160524
3 -2.88541 -0.84282 0.160798
4 -3.16536 -0.924592 0.161073
5 -3.25344 -0.950319 0.161349
6 -3.13113 -0.914593 0.161627
7 -2.83919 -0.82932 0.161907
8 -2.45302 -0.716521 0.162188
9 -2.05269 -0.599584 0.16247
10 -1.69466 -0.495004 0.162754