R – Error Correction Term: Positive and Negative Loadings Explained

cointegrationrvector-error-correction-model

I did a Johansen test.
The max eigenvalue test resulted in 5 cointegrated variables with contegration rank being 1.
The trace test resulted in 5 cointegrated variables with contegration rank being 3.

Below is the estimated VECM with cointegration rank of 3:

cajorls(ca.jo(mydata, ecdet="none", type="trace", spec="transitory", K=29),r=3)
$rlm

Call:
lm(formula = substitute(form1), data = data.mat)

Coefficients:
              BIST100.d   Gold.d      Oil.d       TRY_USD.d   USD_EUR.d 
ect1          -4.843e-02   2.939e-05   1.634e-04  -7.808e-07   9.200e-07
ect2          -1.780e+02   1.322e-01   2.673e-01   5.668e-04   1.891e-03
ect3          -1.217e+01   2.622e-02   1.023e-02  -1.245e-04   4.935e-04
constant      -1.335e+04   1.941e+01  -1.246e+01   2.701e-01   1.689e-01
BIST100.dl1   -2.772e-02   2.683e-05  -1.036e-04  -4.862e-06  -2.745e-07
Gold.dl1       9.454e+01  -4.467e-03   6.449e-02   4.761e-03  -3.065e-04
......          ......      ......        ....       .....     .......
$beta
                ect1          ect2          ect3
BIST100.l1  1.000000e+00  0.000000e+00  4.336809e-19
Gold.l1    -1.136868e-13  1.000000e+00  0.000000e+00
Oil.l1     -3.197442e-14  2.775558e-17  1.000000e+00
TRY_USD.l1  1.152179e+05 -4.851482e+01 -5.183614e+01
USD_EUR.l1  8.984704e+04 -8.461897e+01 -3.174152e+02

I expect an error correction term of the format $y_1-\beta_2 y_2-\beta_3 y_3-\beta_4 y_4-\beta_5 y_5$. Or equivalently, all signs being "$-$" in the above ect1, ect2, ect3 terms. All are not "$-$", e.g., for the 1st ect1: -4.843e-02, +2.939e-05, +1.634e-04, -7.808e-07, +9.200e-07. There are "$+$" and "$-$" coefficients in the error correction terms above.

Does this show wrong unsuitable formulation in VECM? The cointegration rank is either 1 (max eigen) or 3 (trace). Both present "$+$" and "$-$" coefficients in error correction terms.

Below is the estimated VECM with cointegration rank of 1:

    cajorls(ca.jo(mydata, ecdet="none", type="eigen", spec="transitory", K=29),r=1)
$rlm

Call:
lm(formula = substitute(form1), data = data.mat)

Coefficients:
              BIST100.d   Gold.d      Oil.d       TRY_USD.d   USD_EUR.d 
ect1           6.592e-03  -1.138e-05   1.275e-05  -1.830e-07  -8.523e-08
constant      -1.035e+04   1.782e+01  -1.999e+01   2.857e-01   1.334e-01
BIST100.dl1   -5.707e-02   5.970e-05  -1.134e-05  -5.482e-06   6.044e-07
......          ......      ......        ....       .....     .......
$beta
                 ect1
BIST100.l1      1.000
Gold.l1     -5829.934
Oil.l1      -1100.681
TRY_USD.l1 455111.151
USD_EUR.l1 932542.892

Any idea? Can I go with the usual ritual vec2var(ca.jo(...), r=1 or r=3) or something must be handled properly?

Best Answer

There is nothing wrong with the error correction term having positive loadings in some equations and negative in other.

In fact, you could construct an example yourself.

  • Take $y_{1,t}=\sum_{\tau=1}^t \varepsilon_{1,\tau}, \ y_{2,t}=\sum_{\tau=1}^t \varepsilon_{2,\tau}, \ \dotsc, \ y_{k,t}=\sum_{\tau=1}^t \varepsilon_{k,\tau}$ where $\varepsilon_{i,\tau}$ are $i.i.d.$ across all $\{i,\tau\}$. Clearly, $y_{i,t}$s are integrated processes.
  • Define, for example, $y_{k+1,t}=y_{1,t}-y_{2,t}+y_{3,t}-y_{4,t}+y_{5,t}-\dotsc+(-1)^k y_{k,t}+\varepsilon_{k+1,t}$ where $\varepsilon_{k+1,t}$ is a stationary variable.
  • Then a linear combination $$y_{k+1,t}-y_{1,t}+y_{2,t}-y_{3,t}+y_{4,t}-y_{5,t}+\dotsc-(-1)^k y_{k,t}=\varepsilon_{k+1,t}$$ is stationary. So $(y_1,y_2\dotsc,y_k,y_{k+1})$ are cointegrated. The latter sum can serve as an error correction term. Note that it has altering signs. By changing the construction of $y_{k+1,t}$ (in the second bullet point) you can get whatever loadings you like (positive or negative) in the error correction term.
Related Question