Detrended Cross-Correlation Analysis

A module to perform DCCA coefficients analysis. The coefficient describes the correlation strengh between two time series depending on time scales. it lies in [-1, 1], 1 being perfect correlations, and -1 perfect anticorrelations.
The package provides also functions returning a 95% confidence interval for the null-hypothesis (= "no-correlations").

Travis
Build Status

The implementation is based on Zebende G, Da Silva M MacHado, Filho A. DCCA cross-correlation coefficient differentiation: Theoretical and practical approaches Physica A: Statistical Mechanics and its Applications (2013) and was tested by reproducing the results of DCCA and DMCA correlations of cryptocurrency markets from Paulo Ferreira, Ladislav Kristoufk and Eder Johnson de Area LeãoPereira.

Perform a DCCA coefficient computation :

Call the rhoDCCA function like :

pts, rho = rhoDCCA(timeSeries1, timeSeries2)

The function rhoDCCA(timeSeries1, timeSeries2; box_start = 3, box_stop = div(length(data1),10), nb_pts = 30) has the following input arguments :

  • timeSeries1, timeSeries2 : the time series to analyse (have to be array of Float64), having the same length.
  • box_start = 3, box_stop : the starting and ending point of the analysis. defaults to 3 (the minimal possible time-scale) and 1/10th of the data length (passed this size the variance gets big).
  • nb_pt : the number of points you want to evalute the analysis onto. mostly relevant for plotting

Returns :

  • pts : the list of points where the analysis was carried out
  • rho : the value of the DCCA coefficient at each of these points

Get the 95% confidence interval

As a rule of thumb : values of rho in [-0.1,0.1] usually aren't significant.

The confidence intervals provided by this package correspond to the null-hypothesis i.e no correlations. If rho gets outside of this interval it can be considered significant.

To get a fast estimation of the confidence interval, call the empirical_CI function like : pts, ci = empirical_CI(dataLength).

For a more accurate estimation, you can call bootstrap_CI : pts, ci = bootstrap_CI(timeSeries1, timeSeries2; iterations = 200). This operation is much more demanding and can take up to several minutes. The iterations additional argument controls the number of repetitions for the bootstrap procedure, the higher the value, the smoother and cleaner the estimation will be, but it will also take longer.

Example of simple analysis :

calling the DCCA function with random white noise

julia> x1 = rand(2000); x2 = rand(2000)
x,y = rhoDCCA(x1,x2)
pts, ci = empirical_CI(length(x1))

Gave the following plot :

a = scatter(x,y, markersize = 7, xscale = :log, title = "Example of DCCA analysis : \n Correlations between two white noise time series", label = "rho coefficients", xlabel = "window sizes", ylabel = "Correlation strengh")
plot!(a,pts,ci, color = "red", linestyle = :dot, label = "limits of null-hypothesis")
plot!(a,pts,-ci, color = "red", linestyle = :dot, label = "")
display(a)
As noted previously, the value here lies in [-0.1,0.1] although we took here 2 series of white uncorrelated noise.

Installation :

julia> Using Pkg
Pkg.clone("https://github.com/johncwok/DCCA.jl.git")

TO DO :

  • More user-friendly design ?
  • Better figure for the readme file.