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?

  • $\begingroup$ Hi Alex, welcome to quant.SE. In order to help the community answer your question, can you please clarify your terms/variables and the formatting of your tables. Also, please consider registering. $\endgroup$ Commented Oct 3, 2011 at 16:30

2 Answers 2


From remote memory,

  1. 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.

  2. 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

  • 1
    $\begingroup$ Owen thank you for your detailed answer, it got my head straight. As for eigenvalue Half life is calculated by Log(2)/EigenValue. This is why you choose the biggest eigenvalue. $\endgroup$
    – Freewind
    Commented Oct 6, 2011 at 7:22
  • $\begingroup$ Good explanation. Since I've not taken any course in time series analysis yet I'm still not sure if I understood how the results can be interpreted. Let's say I want to check for cointegration between two assets, do I only have to see if r0 hypothesis can be rejected or not? Since the r1 only tests for stationary in the individual time series. $\endgroup$ Commented Mar 3, 2013 at 18:41

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.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.