public class CrossCorrelation extends Object implements Serializable, Cloneable
CrossCorrelation estimates the cross-correlation function of
two jointly stationary time series given a sample of n =
x.length observations \(\{X_t\}\)
and \(\{Y_t\}\) for t = 1,2, ..., n.
Let $$\hat \mu _x = \rm{xmean}$$ be the estimate of the mean \(\mu _X\) of the time series \(\{X_t\}\) where $$ \hat \mu _X = \left\{ \begin{array}{ll} \mu _X & {\rm for}\;\mu _X\; {\rm known} \\ \frac{1}{n}\sum\limits_{t=1}^n {X_t } & {\rm for}\;\mu _X\; {\rm unknown} \end{array} \right.$$
The autocovariance function of \(\{X_t\}\),
\(\sigma _X(k)\), is estimated by
$$\hat \sigma _X\left( k \right) = \frac{1}{n}
\sum\limits_{t = 1}^{n - k} {\left( {X_t - \hat \mu _X} \right)} \left(
{X_{t + k} - \hat \mu _X} \right), \mbox{\hspace{20pt}k=0,1,\dots,K}$$
where K = maximum_lag. Note that
\(\hat \sigma _X(0)\) is
equivalent to the sample variance of x returned by method
getVarianceX. The autocorrelation function
\(\rho _X(k)\) is estimated by
$$\hat\rho _X(k) =
\frac{\hat \sigma _X(k)}{\hat \sigma _X(0)},\mbox{\hspace{20pt}}
k=0,1,\dots,K$$
Note that \(\hat \rho _x(0) \equiv 1\) by definition. Let $$\hat \mu _Y = {\rm ymean}, \hat \sigma _Y(k), {\rm and} \hat \rho _Y(k)$$ be similarly defined.
The cross-covariance function \(\sigma _{XY}(k)\) is estimated by $$\hat \sigma _{XY}(k) = \left\{ \begin{array}{ll} \frac{1}{n}\sum\limits_{t=1}^{n-k}(X_t - {\hat \mu _X})(Y_{t+k} - {\hat\mu _Y}) &{k = 0,1, \dots,K} \\ \frac{1}{n}\sum\limits_{t=1-k}^{n}(X_t - {\hat \mu _X})(Y_{t+k} - {\hat\mu _Y}) &{k = -1,-2, \dots,-K} \end {array} \right. $$ The cross-correlation function \(\rho _{XY}(k)\) is estimated by $$ \hat \rho _{XY}(k) = \frac{\hat \sigma _{XY}(k)} {[\hat\sigma _X(0) \hat\sigma _Y(0) ]^{\frac{1}{2}}} \;\;\; {k = 0,\pm1, \dots,\pm K}$$
The standard errors of the sample cross-correlations may be optionally
computed according to the getStandardErrors method argument
stderrMethod. 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 Bartlet (1978, page 352).
The theoretical formula is $$\begin{array}{c}
{\rm var} \left \{ \hat \rho _{XY}(k) \right \} =
\frac{1}{n-k}\sum\limits_{i=-\infty}^{\infty}
\left [\right. {\rho _X(i)}+\rho _{XY}(i-k)\rho _{XY}(i+k) \\
-2\rho _{XY}(k)\{\rho _X(i)\rho _{XY}(i+k)+\rho _{XY}(-i)\rho _Y(i+k)\} \\
+\rho^2_{XY}(k)\{\rho_X(i) + \frac{1}{2}\rho^2_X(i) +
\frac{1}{2}\rho^2_Y(i)\} \left. \right ] \end{array}$$
For computational purposes, the autocorrelations
\(\rho_X(k)\) and \(\rho_Y(k)\)
and the cross-correlations \(\rho _{XY}(k)\)
are replaced by their corresponding estimates for
\(\left|k\right|\le K\),
and the limits of summation are equal to zero for all k such that
\(\left|k\right| > K\).
A second method evaluates Bartlett's formula under the additional assumption that the two series have no cross-correlation. The theoretical formula is $${\rm var}\{\hat \rho_{XY}(k)\} = \frac{1}{n-k}\sum\limits_{i=-\infty}^{\infty}{\rho_X(i)\rho_Y(i)} \;\;\;\;\; {k \ge 0}$$ For additional special cases of Bartlett's formula, see Box and Jenkins (1976, page 377).
An important property of the cross-covariance coefficient is \(\sigma _{XY}(k) = \sigma _{YX}(-k)\) for \(k \ge 0\). This result is used in the computation of the standard error of the sample cross-correlation for lag \(k \lt 0\). In general, the cross-covariance function is not symmetric about zero so both positive and negative lags are of interest.
| Modifier and Type | Class and Description |
|---|---|
static class |
CrossCorrelation.NonPosVariancesException
The problem is ill-conditioned.
|
| Modifier and Type | Field and Description |
|---|---|
static int |
BARTLETTS_FORMULA
Indicates standard error computation using Bartlett's formula.
|
static int |
BARTLETTS_FORMULA_NOCC
Indicates standard error computation using Bartlett's formula
with the assumption of no cross-correlation.
|
| Constructor and Description |
|---|
CrossCorrelation(double[] x,
double[] y,
int maximum_lag)
Constructor to compute the sample cross-correlation
function of two stationary time series.
|
| Modifier and Type | Method and Description |
|---|---|
double[] |
getAutoCorrelationX()
Returns the autocorrelations of the time series
x. |
double[] |
getAutoCorrelationY()
Returns the autocorrelations of the time series
y. |
double[] |
getAutoCovarianceX()
Returns the autocovariances of the time series
x. |
double[] |
getAutoCovarianceY()
Returns the autocovariances of the time series
y. |
double[] |
getCrossCorrelation()
Returns the cross-correlations between the time series
x
and y. |
double[] |
getCrossCovariance()
Returns the cross-covariances between the time series
x
and y. |
double |
getMeanX()
Returns the mean of the time series
x. |
double |
getMeanY()
Returns the mean of the time series
y. |
double[] |
getStandardErrors(int stderrMethod)
Returns the standard errors of the cross-correlations between the
time series
x and y. |
double |
getVarianceX()
Returns the variance of time series
x. |
double |
getVarianceY()
Returns the variance of time series
y. |
void |
setMeanX(double mean)
Estimate of the mean of time series
x. |
void |
setMeanY(double mean)
Estimate of the mean of time series
y. |
public static final int BARTLETTS_FORMULA
public static final int BARTLETTS_FORMULA_NOCC
public CrossCorrelation(double[] x,
double[] y,
int maximum_lag)
x - A one-dimensional double
array containing the first stationary
time series.y - A one-dimensional double
array containing the second stationary
time series.maximum_lag - An int containing
the maximum lag of the cross-covariance and
cross-correlations to be computed.
maximum_lag must be greater
than or equal to 1 and less than the minimum
of the number of observations of x
and y.public void setMeanX(double mean)
x.mean - A double containing the
estimate mean of the time series x.public double getMeanX()
x.double containing the mean
of the time series x.public void setMeanY(double mean)
y.mean - A double containing the
estimate mean of the time series y.public double getMeanY()
y.double containing the mean
of the time series y.public double getVarianceX()
throws CrossCorrelation.NonPosVariancesException
x.double containing the variance
of the time series x.CrossCorrelation.NonPosVariancesExceptionpublic double getVarianceY()
throws CrossCorrelation.NonPosVariancesException
y.double containing the variance
of the time series y.CrossCorrelation.NonPosVariancesExceptionpublic double[] getCrossCorrelation()
throws CrossCorrelation.NonPosVariancesException
x
and y.double array of length 2 * maximum_lag +1
containing the cross-correlations between the time series x
and y. The cross-correlation between x and
y at lag k, where k = -maximum_lag
,..., 0, 1,...,maximum_lag, corresponds to output array indices
0, 1,..., (2*maximum_lag).CrossCorrelation.NonPosVariancesExceptionpublic double[] getCrossCovariance()
x
and y.double array of length 2 * maximum_lag +1
containing the cross-covariances between the time series x
and y. The cross-covariance between x and
y at lag k, where k = -maximum_lag
,..., 0, 1,...,maximum_lag, corresponds to output array indices
0, 1,..., (2*maximum_lag).public double[] getAutoCorrelationX()
throws CrossCorrelation.NonPosVariancesException
x.double array of length maximum_lag +1
containing the autocorrelations of the time series x.
The 0-th element of this array is 1. The k-th element of this array
contains the autocorrelation of lag k where
k = 1, ..., maximum_lag.CrossCorrelation.NonPosVariancesExceptionpublic double[] getAutoCorrelationY()
throws CrossCorrelation.NonPosVariancesException
y.double array of length maximum_lag +1
containing the autocorrelations of the time series y.
The 0-th element of this array is 1. The k-th element of this array
contains the autocorrelation of lag k where
k = 1, ..., maximum_lag.CrossCorrelation.NonPosVariancesExceptionpublic double[] getAutoCovarianceX()
throws CrossCorrelation.NonPosVariancesException
x.double array of length maximum_lag +1
containing the variances and autocovariances of the time series x.
The 0-th element of the array contains the variance of the time series
x. The k-th element contains the autocovariance of lag k
where k = 1, ..., maximum_lag.CrossCorrelation.NonPosVariancesExceptionpublic double[] getAutoCovarianceY()
throws CrossCorrelation.NonPosVariancesException
y.double array of length maximum_lag +1
containing the variances and autocovariances of the time series y.
The 0-th element of the array contains the variance of the time series
x. The k-th element contains the autocovariance of lag k
where k = 1, ..., maximum_lag.CrossCorrelation.NonPosVariancesExceptionpublic double[] getStandardErrors(int stderrMethod)
throws CrossCorrelation.NonPosVariancesException
x and y. Method of computation for
standard errors of the cross-correlation is determined by the
stderrMethod parameter. If stderrMethod
is set to BARTLETTS_FORMULA, Bartlett's formula is used to compute the
standard errors of cross-correlations. If
stderrMethod is set to BARTLETTS_FORMULA_NOCC, Bartlett's
formula is used to compute the standard errors of
cross-correlations, with the assumption of no cross-correlation.stderrMethod - An int specifying the
method to compute the standard errors of
cross-correlations between the time series x
and y.double array of length 2 * maximum_lag + 1
containing the standard errors of the cross-correlations between the
time series x and y. The standard error of
cross-correlations between x and y at lag
k, where k = -maximum_lag,..., 0, 1,...,
maximum_lag, corresponds to output array indices
0, 1,..., (2*maximum_lag).CrossCorrelation.NonPosVariancesExceptionCopyright © 2020 Rogue Wave Software. All rights reserved.