# Interpretation of Cointegration Test Results

I ran the Johansen Cointegration Test and "Phillips & Ouliaris" Cointegration Test on the past 7 years of data of Oil Futures (BZ=F), Gold Futures (GC=F), Gold ETF (GLD), and Silver (SLV) returns.

1. Can someone help me interpret the results? A link to a detailed article explaining how to interpret this result will also help.
2. Which of these two tests do you think is better?

Notes -

1. K is constant 2 for Johansen Cointegration Test
2. All the time series are stationary

Here are the results of Johansen Cointegration Test

cajo <- ca.jo(test_data, ecdet = "none", type="eigen", K=2, spec="longrun", season=4)
summary(cajo)
######################
# Johansen-Procedure #
######################

Test type: maximal eigenvalue statistic (lambda max) , with linear trend

Eigenvalues (lambda):
[1] 0.5680698 0.4801699 0.3382725 0.2907758

Values of teststatistic and critical values of test:

test 10pct  5pct  1pct
r <= 3 |  638.72  6.50  8.18 11.65
r <= 2 |  767.58 12.91 14.90 19.19
r <= 1 | 1216.26 18.90 21.07 25.75
r = 0  | 1560.61 24.78 27.14 32.14

Eigenvectors, normalised to first column:
(These are the cointegration relations)

BZ.F.l2   GC.F.l2     GLD.l2    SLV.l2
BZ.F.l2   1.000000  1.000000  1.0000000  1.000000
GC.F.l2 -74.136633 10.979215 -0.3707929  0.556958
GLD.l2   79.714196  1.619935  0.3758365 -5.192185
SLV.l2   -1.206384 -4.353230 -1.3115461  4.396690

Weights W:

BZ.F.l2     GC.F.l2     GLD.l2      SLV.l2
BZ.F.d -0.016013244 -0.09984288 -0.6310072 -0.24003976
GC.F.d  0.008328188 -0.09600891  0.1427351 -0.04550002
GLD.d  -0.015309769 -0.08881608  0.1527393 -0.04082764
SLV.d  -0.013361984 -0.06037855  0.2893466 -0.19149600


Here are the results of Phillips & Ouliaris Cointegration Test

capo = urca::ca.po(test_data, type = "Pu", demean = "trend", lag = "short")
summary(capo)
########################################
# Phillips and Ouliaris Unit Root Test #
########################################

Test of type Pu
detrending of series with constant and linear trend

Call:
lm(formula = z[, 1] ~ z[, -1] + trd)

Residuals:
Min        1Q    Median        3Q       Max
-0.273162 -0.011639  0.000862  0.012489  0.247434

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.377e-03  1.262e-03  -1.091 0.275354
z[, -1]GC=F  5.262e-01  1.423e-01   3.698 0.000224 ***
z[, -1]GLD   1.204e-01  1.522e-01   0.791 0.428864
z[, -1]SLV   2.297e-01  5.810e-02   3.954 7.99e-05 ***
trd          1.204e-06  1.174e-06   1.026 0.305055
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.02719 on 1856 degrees of freedom
Multiple R-squared:  0.4003,    Adjusted R-squared:  0.399
F-statistic: 309.8 on 4 and 1856 DF,  p-value: < 2.2e-16

Value of test-statistic is: 1618.667

Critical values of Pu are:
10pct    5pct   1pct
critical values 52.0015 60.2384 78.347

• Regarding Notes: all the time series are stationary. Why are you interested in cointegration then? Per definition, it cannot occur between a bunch of stationary time series. You need the series to have unit roots. Therefore, you would do the analysis on prices (or log-prices), not returns (or log-returns). Commented Dec 8, 2021 at 7:34
• I am doing the analysis on log-returns. That is why I called these timeseries stationary. I got confused by your comment. I thought that in most cases log-returns are stationary. Am I wrong? I thought that using non-stationary series will produce a spurious correlation. Commented Dec 8, 2021 at 10:40
• Returns are usually approximately stationary, or at least they do not have a unit root. However, cointegration is only possible among nonstationary time series, specifically ones that have unit roots. Commented Dec 8, 2021 at 12:45