1
$\begingroup$

I'm having some hard times trying to do a simple but statistically sound analysis on 4 cointegrated daily time series which I analyzed through VEC. I ask the community:

  1. is the procedure I followed right? VEC is the right approach?
  2. at the end of the analysis, the normality tests suggested no normality: this fact invalidates the relations between variables that I found?

The general problem is this: I have 4 time series (see the plots below) and tried to find relations among them.

Although the Augmented Dickey-Fuller Test was significant at 0.01 for each, the series seems not to be stationary to me and many of them seems to be characterized by a structural break (the peak between about 400 and 600).

enter image description here

I run VARselect of "vars" library to check for suggested lag, and set them to 7.

library(vars)
(VARselect(df[,2:5], lag.max=7))
$selection
AIC(n)  HQ(n)  SC(n) FPE(n) 
     7      1      1      7 

$criteria
                  1            2            3            4            5            6            7
AIC(n) 2.080431e+01 2.079561e+01 2.077498e+01 2.076599e+01 2.075559e+01 2.073008e+01 2.069636e+01
HQ(n)  2.083902e+01 2.085809e+01 2.086521e+01 2.088399e+01 2.090136e+01 2.090362e+01 2.089767e+01
SC(n)  2.089601e+01 2.096067e+01 2.101339e+01 2.107776e+01 2.114073e+01 2.118858e+01 2.122822e+01
FPE(n) 1.084424e+09 1.075032e+09 1.053074e+09 1.043658e+09 1.032875e+09 1.006874e+09 9.735068e+08

I tested the series for cointegration through the Johansen-Procedure of the library "urca", finding that all the 4 variables are cointegrated. VAR model is thus inadequate, so I tried to fit a VEC model.

library(urca)
myvecm <- ca.jo(df[,2:5], type="eigen", K=7)
summary(myvecm)

###################### 
# Johansen-Procedure # 
###################### 

Test type: maximal eigenvalue statistic (lambda max) , with linear trend

Eigenvalues (lambda):
[1] 0.08400297 0.06492363 0.06329419 0.02074754

Values of teststatistic and critical values of test:

         test 10pct  5pct  1pct
r <= 3 | 22.83  6.50  8.18 11.65
r <= 2 | 71.21 12.91 14.90 19.19
r <= 1 | 73.10 18.90 21.07 25.75
r = 0  | 95.55 24.78 27.14 32.14

I fitted the VEC model with the library (urca) and below I print just the output of the first variable.

myvecm.ols <- cajools(myvecm)
summary(myvecm.ols)

Residuals:
    Min      1Q  Median      3Q     Max 
-53.116  -5.019  -0.791   3.442 150.863 

Coefficients:
          Estimate Std. Error t value Pr(>|t|)    
constant  0.743737   0.543550   1.368  0.17151    
var1.dl1 -0.202386   0.032026  -6.320 3.86e-10 ***
var2.dl1 -0.011432   0.027010  -0.423  0.67220    
var3.dl1  0.268449   0.158530   1.693  0.09068 .  
var4.dl1  0.027490   0.004752   5.785 9.53e-09 ***
var1.dl2 -0.225971   0.032807  -6.888 9.70e-12 ***
var2.dl2  0.033688   0.031223   1.079  0.28086    
var3.dl2  0.034691   0.202315   0.171  0.86389    
var4.dl2  0.016001   0.005615   2.850  0.00446 ** 
var1.dl3 -0.271130   0.033756  -8.032 2.54e-15 ***
var2.dl3  0.041499   0.034470   1.204  0.22889    
var3.dl3 -0.311666   0.233355  -1.336  0.18197    
var4.dl3  0.028230   0.006355   4.442 9.85e-06 ***
var1.dl4 -0.226274   0.035173  -6.433 1.89e-10 ***
var2.dl4 -0.011356   0.036867  -0.308  0.75812    
var3.dl4  0.072705   0.256810   0.283  0.77715    
var4.dl4  0.015805   0.006938   2.278  0.02292 *  
var1.dl5 -0.114370   0.035910  -3.185  0.00149 ** 
var2.dl5  0.018002   0.038803   0.464  0.64279    
var3.dl5  0.169942   0.273107   0.622  0.53391    
var4.dl5  0.022006   0.007305   3.012  0.00265 ** 
var1.dl6 -0.299861   0.035935  -8.344  < 2e-16 ***
var2.dl6  0.029144   0.040239   0.724  0.46906    
var3.dl6  0.085140   0.291754   0.292  0.77048    
var4.dl6  0.030258   0.007638   3.962 7.94e-05 ***
var1.l7  -0.205079   0.025383  -8.079 1.76e-15 ***
var2.l7   0.021438   0.038175   0.562  0.57453    
var3.l7  -0.008361   0.298788  -0.028  0.97768    
var4.l7   0.031693   0.007571   4.186 3.07e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 11.58 on 1060 degrees of freedom
Multiple R-squared:  0.1794,    Adjusted R-squared:  0.1569 
F-statistic: 7.991 on 29 and 1060 DF,  p-value: < 2.2e-16

Especially Var4 seems to be related with Var1, which is theoretically reasonable. I run an impulse response function to check how the changes in Var4 affected Var1, finding that, for instance, mostly a 2 days lag of Var4 is related with an increase of 2% in Var1.

enter image description here

I would be happy with a finding like this. However, I am not sure the procedure is correct. Moreover, the normality test with the "vars" package show that the normality assumption is not verified, and I don't know if this would invalidate the relation between Var1 and Var4 I found.

normality.test(myvecmvar)
$JB

    JB-Test (multivariate)

data:  Residuals of VAR object myvecmvar
Chi-squared = 2506705, df = 8, p-value < 2.2e-16


$Skewness

    Skewness only (multivariate)

data:  Residuals of VAR object myvecmvar
Chi-squared = 23392, df = 4, p-value < 2.2e-16


$Kurtosis

    Kurtosis only (multivariate)

data:  Residuals of VAR object myvecmvar
Chi-squared = 2483313, df = 4, p-value < 2.2e-16
```
$\endgroup$
9
  • 1
    $\begingroup$ Judging by the graphs, your variables certainly do not have a unit root, so cointegration analysis and VECM do not make sense. $\endgroup$ Apr 4, 2020 at 14:58
  • $\begingroup$ Thanks @Richard. Now I see that probably I should have interpreted the significant ADF test as a rejection of the null of unit roots. I am sorry but I am a newbie and the matter is really hard. Can you give me some suggestions about what tecniques I coud take into consideration in order to understand the relations between these variables? Thanks $\endgroup$
    – kk68
    Apr 4, 2020 at 15:08
  • 1
    $\begingroup$ The spikes look pretty serious... Perhaps a VAR with nonnormal errors? Or a VAR of some transformation of the variables (transformation for taking care of the spikes), maybe logarithm (if all of the values are positive) or a similar one (if some of the values a zero). $\endgroup$ Apr 4, 2020 at 19:38
  • 1
    $\begingroup$ @kk68, you may also want to consider a multivariate GARCH model? You did not say what the time series are, however they look like volatility of asset returns. $\endgroup$
    – eBopBob
    Apr 5, 2020 at 8:03
  • $\begingroup$ @eBopBob the series are not related to financial data, but your observation is interesting thank you, I’ll take a look to GARCH too $\endgroup$
    – kk68
    Apr 5, 2020 at 23:24

1 Answer 1

1
$\begingroup$

Judging by the graphs, your variables certainly do not have a unit root, so cointegration analysis and VECM do not make sense. A natural alternative is a VAR model. Given the large spikes, you may consider a VAR with nonnormal errors or a VAR of some transformation of the variables, maybe the logarithm (if all of the values are positive) or a similar one (if some of the values a zero).

$\endgroup$

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.