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").
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 :
rhoDCCA function like :
pts, rho = rhoDCCA(timeSeries1, timeSeries2)
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
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
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)
julia> Using Pkg Pkg.clone("https://github.com/johncwok/DCCA.jl.git")
TO DO :
- More user-friendly design ?
- Better figure for the readme file.