Skip to content

Time-Varying Cointegration in R

3 messages · Johannes Lips, Paul Gilbert

#
Dear list,

I've implemented the time-varying cointegration framework by Bierens and 
Martins (2010) in R [1], based on the gauss implementation of Luis 
Martins [2]. I do get the same results as in gauss, when using lower 
chebyshev dimensions, but when the number of dimensions is increasing, I 
run into issues with complex eigenvalues and eigenvectors.
Additionally the eigenvalues and eigenvectors differ quite a bit between 
gauss and R and I do not really know how to find out why that is. I also 
experimented with different implementations of eigenvalues 
determination, based on the C++ routine eigen, but was not able to 
replicate the gauss results exactly.
One notable difference is that gauss does not normalize the 
eigenvectors, but even after considering this a discrepancy remains. 
Perhaps someone with a better knowledge of gauss may shed some light on 
possible sources for these differences.



[1] https://github.com/hannes101/TimeVaryingCointegration
[2] http://home.iscte-iul.pt/~lfsm/
#
Johannes

Ordering complex numbers is not obvious, so one likely thing would be 
that you have the same result but in a different order. If the 
eigenvalues are the same, only the vectors are different, it is a 
normalization issue. If it is not that, then verify that you are 
calculating eigenvalues with the same matrix in both systems. A matrix 
that has several orders of magnitude difference between the largest and 
smallest eigenvalues (in abs value) will be ill-conditioned, in which 
case the result can differ a lot based on seemingly small differences in 
the matrix. You can verify if this is a problem by copy and paste of 
exactly the same matrix into both systems. (Round to a reasonable number 
of digits and truncate the rest.)

BTW, if ill-conditioning is the problem, and the results depend 
critically on this calculation, there is a problem with the technique.

If those are not the problem, then you might consider checking which 
result is correct. This problem does have an answer that can be 
verified.  From ?eigen

    If ?r <- eigen(A)?, and ?V <- r$vectors; lam <- r$values?, then

                               A = V Lmbd V^(-1)

      (up to numerical fuzz), where Lmbd =?diag(lam)?.

Please let us know if R is getting an incorrect result. It seems highly 
unlikely, but it might affect a lot of calculations.

HTH,
Paul
On 03/22/2016 05:14 AM, Johannes Lips wrote:
#
Paul,

thanks a lot for your reply. I think I can confirm that for basic 3x3 
matrices both yield the same results, only gauss does not normalize them 
to unit length, but if you do that, the eigenvectors are the same. This 
can be seen, when comparing the results of R with the results in the 
gauss manual [1] (p. 464-465).
I can also confirm, that the matrix A, for which the eigenvectors need 
to be computed are exactly the same between R and gauss. The matrix is 
calculated based on the example data set, which is also part of the 
gauss code and available in R as well.
I confirmed, that for all non-complex eigenvalues the eigenvectors are 
the same, when normalizing the vectors in gauss, at least for the two 
and three dimensional chebyshev polynomials. So that leaves me with the 
problem, that the results of eigen() are stored in a matrix which 
converts everything into complex numbers.

Perhaps someone could help me out to make sure the calculations are done 
correctly.

Thanks a lot in advance,
johannes

[1] http://www.aptech.com/wp-content/uploads/2014/01/GAUSS14_LR.pdf
[2] https://gist.github.com/hannes101/eeda2411b480cbeaee16
On 22.03.2016 19:55, Paul Gilbert wrote: