Constant correlation test

Background

Engle and Sheppard (2001) proposed a test for constant correlation:

H0 : Rt =   ∀ t ∈ T

against

Ha : vechu(Rt) = vechu() + β1vechu(Rt − 1) + β2vechu(Rt − 2) + ⋯ + βpvechu(Rt − p)

where vechu is a modified vech that only selects elements above the diagonal. The testing procedure first estimates a constant correlation model, with first stage GARCH processes whose standardized residuals are whitened using the symmetric square root decomposition of the matrix (estimated in the second stage).

Under the null of constant correlation, these residuals should be i.i.d. with a variance-covariance matrix given by Ik, the identity matrix. Consider the artificial regressions of the outer products of the residuals on a constant and their lags, in stacked form:

Yt = vechu[(−1/2Dt−1rt)(−1/2Dt−1rt) − Ik]

where −1/2Dt−1rt is a k × 1 vector of residuals jointly standardized under the null, with Dt the diagonal matrix of time varying standard deviations from the first stage GARCH process. The (vector) autoregression with s lags is given by:

Yt = α + β1Yt − 1 + ⋯ + βsYt − s + ηt

Under the null, the intercept and all of the lag parameters in the model should be zero. In order to estimate the test statistic, all that is necessary is to make the T × k vector of outer-products for each univariate regressor and the T × s + 1 matrix of regressors for each set of regressors. Then the parameters can be estimated by stacking the k(k − 1)/2 vector of regressands and regressors and performing a seemingly unrelated regression.

The test can then be conducted as:

$$ \frac{\hat{\delta}^\prime X^\prime X \hat{\delta}}{\hat{\sigma}^2} $$

which is asymptotically χ(s + 1)2, with δ̂ the estimated regression parameters, X the matrix of regressors (including the constant term) and σ̂2 the variance of the regression residuals.1

Demo

We use 10 global indices from the globalindices dataset to illustrate the test and output which has both a print and as_flextable method for nice printing.

suppressMessages(library(tsmarch))
suppressMessages(library(xts))
data(globalindices)
Sys.setenv(TZ = "UTC")
train_set <- 1:1600
series <- 1:10
y <- as.xts(globalindices[, series])
train <- y[train_set,]
test <- escc_test(y, lags = 2, constant = TRUE)
as_flextable(test, include.decision = TRUE, use.symbols = TRUE, footnote.reference = TRUE)
Engle-Sheppard Constant Correlation

Estimate

Std. Error

t value

Pr(>|t|)

Decision(5%)

NA

0.0093

0.0043

2.1649

0.0304

*

NA

0.0082

0.0036

2.2587

0.0239

*

NA

0.0190

0.0036

5.2410

0.0000

***

NA

44.5463

0.0000

***

Reject H0

Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hypothesis(H0) : Constant Correlation

Reference: Engle R.F., and Sheppard K. (2001) `Theoretical and Empirical Properties of Dynamic Conditional Correlation Multivariate GARCH.` Vol. 15. UCSD Working Paper.

Not surprisingly, the test rejects the null of constant correlation, though some caution should be exercised in the presence of structural breaks which may lead to invalid inferences.

Conclusion

The constant correlation test is a simple test, but also quite restrictive in that it ignores structural breaks and is really only optimal within a specific class of time varying conditional correlations. More robust tests do exist2, and may be included in the future.

References

Engle, R. F., and K. Sheppard. 2001. “Theoretical and Empirical Properties of Dynamic Conditional Correlation Multivariate GARCH.” UCSD Working Paper NO.
McCloud, Nadine, and Yongmiao Hong. 2011. “Testing the Structure of Conditional Correlations in Multivariate GARCH Models: A Generalized Cross-Spectrum Approach.” International Economic Review 52 (4): 991–1037.

  1. adjusted for the number of lags s and the constant term.↩︎

  2. see for example McCloud and Hong (2011) who also provide an excellent review.↩︎