Skip to content
All library documents

Diagnosing Johansen Cointegration Results and Residual Tests

Article Quant Q&A · Author: Haoying Meng

Summary

The document considers a Johansen maximum-eigenvalue test for whether house prices, income, interest rates, and rental vacancy rates share a cointegrating relationship. The questioner interprets the output as indicating one relation, forms a linear combination from an eigenvector, then reports that an augmented Dickey–Fuller test does not reject a unit root in that combination. The variable labels also include lag notation, which prompts a question about how to read the estimated vectors.

The response suggests that the apparent disagreement may arise from model specification, particularly deterministic terms or lag length. It recommends estimating a restricted vector error correction model from the Johansen output, extracting the cointegrating vector, and testing the resulting process. This is a brief troubleshooting suggestion rather than a full explanation: it does not resolve the reported result, explain the lag labels, or provide a worked comparison. The example illustrates that a separately applied residual test may not match the Johansen test’s assumptions and specification.

Key ideas

  • Johansen test results depend on the selected lag structure and deterministic terms.
  • A cointegrating vector should be interpreted within the model specification used to estimate it.
  • A restricted vector error correction model can help extract the relation implied by the Johansen procedure.
  • A separate augmented Dickey–Fuller test may not reproduce the Johansen test’s inference when specifications differ.

Tags

Full text
# R Outputs from Johansen test. Linear combination still not stationary?


# R Outputs from Johansen test. Linear combination still not stationary?












I am trying to see if house price is cointegrated with interest rate, per capita income and rental vacancy rate and got the following output from ca.jo in R:

```
# Johansen-Procedure # 
###################### 

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

Eigenvalues (lambda):
[1] 0.52471580 0.12579545 0.10395269 0.06262468

Values of teststatistic and critical values of test:

          test 10pct  5pct  1pct

r <= 3 |  8.47  6.50  8.18 11.65

r <= 2 | 14.38 12.91 14.90 19.19

r <= 1 | 17.61 18.90 21.07 25.75

r = 0  | 97.44 24.78 27.14 32.14

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

                    y.l2   income.l2 interest.l2     vac.l2
y.l2             1.00000000  1.00000000   1.0000000 1.00000000

income.l2   -10.16285869 -1.32443038 -12.6597547 0.61669614

interest.l2  -0.06759846 -0.35179735  -0.1535533 0.02143767

vac.l2        0.22771577  0.02087503  -0.4814448 0.02113804
```

So from what I understand, the output indicates that there is one cointegration relation. And using the 1st eigenvector, I should get that y(which is log_price)=-10.16*income-0.0675*interest+0.227*vacancy rate. However, I ran a ADF test on this combination and got p-value 0.11 (meaning the combination is still non-stationary!). Why is that? Am I using the wrong thing? What does the ".12" mean after the variable names?

Thank you for any help!

## Answer by user21240 (score 1)

https://quant.stackexchange.com/a/8314

Maybe you have made some misspecification with regards to deterministic terms or lag length. Try to estimate a restricted VECM from your ca.jo()-output with cajorls(), extract $\beta$ and run the ADT-test on that process.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.