# Distance Correlation in Julia

**URL:** <https://discourse.julialang.org/t/distance-correlation-in-julia/45905>\
**Category:** General Usage\
**Tags:** package, statistics\
**Created:** [September 1, 2020, 3:48pm UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905 "2020-09-01T15:48:24Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kokora](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kokora/32/7867_2.png) [@Kokora](https://discourse.julialang.org/u/Kokora)\
**Post date:** [September 1, 2020, 3:48pm UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905/1 "2020-09-01T15:48:24Z")

</div>

Hi all,  
Is there any package in Julia to compute distance correlation just like the package energy in r?

Thank you,

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [September 1, 2020, 4:11pm UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905/2 "2020-09-01T16:11:34Z")

</div>

Perhaps this is what you are searching for:

[https://github.com/JuliaStats/Distances.jl](https://github.com/JuliaStats/Distances.jl)

CorrDist `corr_dist(x, y)` `cosine_dist(x - mean(x), y - mean(y))`

---

<div class="post-metadata">

**Author:** ![Kokora](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kokora/32/7867_2.png) [@Kokora](https://discourse.julialang.org/u/Kokora)\
**Post date:** [September 1, 2020, 4:46pm UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905/3 "2020-09-01T16:46:12Z")

</div>

@lmiq Great! That works for me. Thank you

---

<div class="post-metadata">

**Author:** ![Non-Contradiction](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/non-contradiction/32/2208_2.png) [@Non-Contradiction](https://discourse.julialang.org/u/Non-Contradiction)\
**Post date:** [September 1, 2020, 5:21pm UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905/4 "2020-09-01T17:21:07Z")

</div>

I don’t think the two functions are calculating the same thing.

```julia
julia> using RCall

julia> x = randn(10);

julia> y = randn(10);

julia> R"library(energy)"; rcall(:dcor, x, y)
RObject{RealSxp}
[1] 0.4823483

julia> using Distances

julia> corr_dist(x, y)
0.8597077631762767

```

I think it is quite easy in julia to implement a simplified (and also more performant) version for distance correlation from scratch. If it is not in a performance critical part, you can also use `RCall.jl` to use functions from R.

---

<div class="post-metadata">

**Author:** ![Kokora](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kokora/32/7867_2.png) [@Kokora](https://discourse.julialang.org/u/Kokora)\
**Post date:** [September 1, 2020, 6:02pm UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905/5 "2020-09-01T18:02:51Z")

</div>

No, they are not! In fact, this small example shows that the version of cordist implemented in distances.jl is not always between 0 and 1 unlike the definition in [here](https://en.wikipedia.org/wiki/Distance_correlation). Also it seems higher distances are associated with stronger independence - opposite to dcor.

n=50  
p = 3  
q = 5  
Y = randn(n, q)  
X = randn(n, p)  
Y[:,1] = X[:,1]  
pairwise(CorrDist(), Y, X, dims=2)

Currently, I am using RCall (dcor in r) to compute the distance correlation. This is too expensive in an MC simulation. I have not been able to implement a better and fast version.

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [September 1, 2020, 6:09pm UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905/6 "2020-09-01T18:09:57Z")

</div>

This one then?

[https://juliahub.com/docs/EnergyStatistics/GxpWi/0.2.0/](https://juliahub.com/docs/EnergyStatistics/GxpWi/0.2.0/)

---

<div class="post-metadata">

**Author:** ![Kokora](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kokora/32/7867_2.png) [@Kokora](https://discourse.julialang.org/u/Kokora)\
**Post date:** [September 2, 2020, 4:33am UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905/7 "2020-09-02T04:33:33Z")

</div>

Yes! That works better. Exactly what I was looking for.  
Many thanks!

---

<div class="post-metadata">

**Author:** ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)\
**Post date:** [August 31, 2024, 2:39am UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905/8 "2024-08-31T02:39:41Z")

</div>

unfortunately it doesn’t work when input gets too big, since it allocates:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/d/b/db21b41c341a303f77a9123c650414680987e0c5.png)

---

<div class="post-metadata">

**Author:** ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)\
**Post date:** [May 1, 2025, 3:54pm UTC](https://discourse.julialang.org/t/distance-correlation-in-julia/45905/9 "2025-05-01T15:54:56Z")

</div>

FWIF, [Performance vs PyCall + Python's dcor · Issue #2 · pfarndt/EnergyStatistics.jl · GitHub](https://github.com/pfarndt/EnergyStatistics.jl/issues/2) it’s 20x slower than Python’s `dcor` ([GitHub - vnmabus/dcor: Distance correlation and related E-statistics in Python](https://github.com/vnmabus/dcor))
