Interpreting Johansen Cointegration Rank and Eigenvectors
Summary
The document explains how Johansen trace-test statistics and critical values indicate the number of cointegrating relationships among three instruments. In the example, the null of no cointegration is rejected, while the next rank null is not, which points to one relationship under the test’s assumptions. It also describes how the eigenvector associated with the largest eigenvalue can supply coefficients for a candidate stationary linear combination.
The discussion cautions, implicitly, that eigenvector layout depends on the software’s output convention, so the relevant vector may appear as a row or column. The proposed portfolio should be checked by examining the resulting spread’s time series. The answer also sketches an approximate chi-square interpretation, but this is a rough calculation rather than a substitute for the Johansen test’s stated critical values. Cointegration inference and portfolio construction depend on model assumptions, data choices, scaling, and appropriate out-of-sample validation.
Key ideas
- Johansen rank testing evaluates successive null hypotheses about the number of cointegrating relationships.
- Rejecting rank zero while failing to reject rank one supports a single relationship in the example.
- The eigenvector tied to the largest eigenvalue can define the candidate cointegrating combination.
- Software may display eigenvectors in different orientations, so confirm the output convention.
- Inspecting the constructed spread is useful, but does not replace statistical and out-of-sample validation.
Tags
Full text
# How to interpret the eigenmatrix from a Johansen cointegration test? # How to interpret the eigenmatrix from a Johansen cointegration test? I ran a Johansen cointegration test on 3 instruments, A B and C. The results that I got are: ``` R<=x | Test Stat 90% 95% 99% r=0 --> 36.7 18.9 21.1 25.8 r=1 --> 8.4 12.29 14.26 18.52 r=2 --> 0.21 2.7 3.8 6.6 ``` ``` EigenValues EigenMatrix 0.03 --> 0.25 | 0.512 |-0.79 0.007 --> -0.96 | -0.618 | 0.14 0.00017 --> 0.05 | 0.59 | 0.59 ``` My question is how I interpret these results? How do I know there is a cointegration for the these instruments. How to build a portfolio using the eigen vector? Which eigen vector should I choose to build my portfolio? ## Answer by Owen (score 21, accepted) https://quant.stackexchange.com/a/2107 From remote memory, - The first question is Yes/No question. Is there any stationary, i.e. I(0), time series for different levels of combination r? This question is answered by your first table. For example, if [r=2]'s test stat is say 7 while the critical value of 99% confidence is 6.6 like your example, then I have over 99% confidence to say that all instruments A, B, and C are stationary by themselves. You don't even need to build a co-integrated portfolio/combination. They are ready for mean-reversion strategy already. Obviously, in your example, your [r=2] stat is way much lower than even 90% confidence critical value. Thus, you can't form a stationary time series without sort of combination. Your [r=1] is not close to acceptable threshold, too. Thus, no easy combination like A + Beta*B is stationary. Now, your [r=0] stat looks interesting, test stat 36.7 > 25.8. I have over 99% confidence to say that there is a stationary combination like A + Beta1*B + Beta2*C. - The next question is how to build your portfolio if one of the above hypothesis is positive. In your case is [r=0]. Simply read your corresponding eigenvector that comes with your largest eigenvalue: (0.25 | 0.512 | -0.79), i.e. 0.25*A + 0.512*B -0.79*C is the stationary portfolio you are looking for. You can draw portfolio time series to convince yourself. Btw, I will be very grateful if someone can refresh me about how to interpret eigenvalues? like what is its unit? I can only remember big eigenvalue is better for the stationarity test above. EDIT: FYI, I remember the test stat and critical values can be approximated by chi-squared? With this information, you can build a helper function to better interpret these statistic. Here is a quick example in R. # zero-root function, used for solve df (degree of freedom) of chi-square for given cvals (critical values) > fn_zero_root <- function (df, prob, cval) pchisq(cval, df) - prob # solve for df # In [r=1] example: use prob = 90%, cval = 12.29 as the training point > r1.df <- uniroot(fn_zero_root, c(0, 12.29), tol = 0.001, prob = 90/100, cval= 12.29)$root # Use the above df to calculate confidence for your test stats = 8.4 > 100*pchisq(8.4, r1.df) [1] 68.23303 # Validation > pchisq(12.29, r1.df) [1] 89.99978 pchisq(14.26, r1.df) [1] 94.82474 pchisq(18.52, r1.df) [1] 98.88713 ## Answer by Pavel Filip (score 0) https://quant.stackexchange.com/a/78786 Assuming your variables are $I(1)$, there seems to be a single cointegrating relationship, which corresponds to the largest eigenvalue (largest squared canonical correlation). The null is no cointegration and it is rejected in the first row of your first table: rejecting $r = 0$ means there is more than zero cointegrating relationships. However, $r = 1$ has not been rejected, so there are not more than the one relationship. Depending on how your second table is organized, the (unnormalized) cointegrating vector corresponds either to the first row or the first column of your second table.
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.