Cointegration Johansen test and Autocorrelation Durbin Watson Test

Hello. I’m new in Julia, but I need some performance so I’m rewriting from R and Python to Julia but I have problems with built-in functions. I know that Julia is not as wide as R and Python, but I was sure that I would find typical stats tests.

But I have problems with 2 of them:

  • Johansen cointegration test and VECM modeling
  • Durbin Watson autocorrelation test

Could you please give me some links for repos or packages for that?

  1. DW in Python and R:
from statsmodels.stats.stattools import durbin_watson
res = durbin_watson(x_norm) # 2.1573
if(!require(car)){install.packages('car')}
res <- durbinWatsonTest(x_norm) # 2.1573

Julia has DurbinWatsonTest from HypothesisTests.jl says “X is the matrix of regressors from the original regression model and e the vector of residuals. Note that the Durbin-Watson test is not valid if X includes a lagged dependent variable.”

DurbinWatsonTest(X::AbstractArray, e::AbstractVector; p_compute::Symbol = :ndep)

What? I just need to run something like dw([1, -1, 1, -1]) on the vector and get results. Why regression, why all this stuff?

  1. About cointegration and VECM - nothing at all. I have got some code that was written in Julia 0.3 almost 10 years ago with even another keyword for struct - “type”, and it doesn’t work. And it contains a few thousands of lines.
    In Python and R :
from statsmodels.tsa.vector_ar import vecm; vecm.coint_johansen(***)
library(ursa); ca.jo(***)

Maybe you know where I can find this tests, and not rewriting them from scratch?

Regarding the Durbin-Watson test, there is a difference between calculating the Durbin-Watson statistic, and using it with a cutoff to get a meaningful bound on the statistical error of a hypothesis test. If, as the OP suggests, the statistic is important, i.e. having dw([1, -1, 1, -1]), then this is super-simple:

julia> using LinearAlgebra

julia> dw(v) = (t = diff(v); dot(t,t)/dot(v,v))
dw (generic function with 1 method)

julia> dw([-1,1,-1,1])
3.0

Now what does the 3.0 mean? That requires the regressors, etc. and it is implemented in HypothesisTests package. See also the Wikipedia article: Durbin–Watson statistic.

I’m not addressing the second part of the question. Perhaps someone else will step up.

1 Like

Ok.Thank you. I think about just testing function like. I know that it’s not related to p-value, but usially it’s normal to use just 1.5 - 2.5 bounds, how do you think? I don’t want to build distribution just for this simple test.

 using LinearAlgebra

mutable struct DWTestResult
    dw::Real
    corr::Bool
end

function dw_stat(resid, lower= 1.5, upper=2.5)
    t = diff(resid) 
    dw = dot(t,t)/dot(resid,resid)
    corr = lower < dw < upper
    return DWTestResult(dw, corr)
end

It’s weird that Julia does not have something about cointegration… The second problem is much more complicated (((