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
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
No comments:
Post a Comment