# Weighted covariance, how to compute?

**URL:** <https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282>\
**Category:** Statistics\
**Created:** [November 24, 2017, 9:44am UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282 "2017-11-24T09:44:17Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [November 24, 2017, 9:44am UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/1 "2017-11-24T09:44:17Z")

</div>

If d is data set and k,l=size(d)  
cov = d’\*d/k-mean(d,1)'\*mean(d,1)

It is nice formula ,

But how to compute the cov if any row is weighted by vector w ?  
Paul

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [November 24, 2017, 9:58am UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/2 "2017-11-24T09:58:59Z")

</div>

[https://juliastats.github.io/StatsBase.jl/latest/weights.html](https://juliastats.github.io/StatsBase.jl/latest/weights.html)  
[https://juliastats.github.io/StatsBase.jl/latest/cov.html](https://juliastats.github.io/StatsBase.jl/latest/cov.html)

---

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [November 24, 2017, 1:07pm UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/3 "2017-11-24T13:07:26Z")

</div>

Thx, but i need algebraic formula (to large matrix for this way). Somebody can help ?  
Paul

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [November 24, 2017, 1:31pm UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/4 "2017-11-24T13:31:12Z")

</div>

The methods above do not have a lot of overhead, but if you need online methods,

> **[GitHub - joshday/OnlineStats.jl: ⚡ Single-pass algorithms for statistics](https://github.com/joshday/OnlineStats.jl)**
>
> ⚡ Single-pass algorithms for statistics. Contribute to joshday/OnlineStats.jl development by creating an account on GitHub.

can also do [covariance matrices](https://joshday.github.io/OnlineStats.jl/latest/api.html#OnlineStats.CovMatrix) very efficiently.

---

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [November 24, 2017, 1:37pm UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/5 "2017-11-24T13:37:06Z")

</div>

Thanks, but I have really huge matrix, only algebraic way is ok for it !  
Somebody can help ?

---

<div class="post-metadata">

**Author:** ![vchuravy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vchuravy/32/8_2.png) [@vchuravy](https://discourse.julialang.org/u/vchuravy)\
**Post date:** [November 24, 2017, 2:33pm UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/6 "2017-11-24T14:33:33Z")

</div>

If you can share how the methods mentioned by @Tamas_Papp failed and what else you have tried you are more likely to get a concrete answer. How big is your _really huge matrix_?

---

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [November 24, 2017, 4:33pm UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/7 "2017-11-24T16:33:23Z")

</div>

y=rand(1000,15000)  
k,l=size(y)  
o = CovMatrix(l) # fue minutes …  
Series(y,o) # nothing doing

Julia 6.0  
win7, 8 core in machine, Ram =8G  
y is only sample  
my matrix is sparse size : 10^7 x 30\*10^4

I am looking for algebraic formula because i can use pmap  
Paul

---

<div class="post-metadata">

**Author:** ![joshday](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joshday/32/368_2.png) [@joshday](https://discourse.julialang.org/u/joshday)\
**Post date:** [November 24, 2017, 9:18pm UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/8 "2017-11-24T21:18:22Z")

</div>

Are those numbers right? Even if your data is sparse, the covariance matrix will be dense, and require 670GB to store.

```julia
julia> 300_000^2 * 8 / 1024 ^3 
670.5522537231445

```

---

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [November 25, 2017, 8:16am UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/9 "2017-11-25T08:16:08Z")

</div>

I know, and Im looking for this algebraik formula .  
Paul

W dniu 2017-11-24 o 22:23, Josh Day pisze:

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [November 25, 2017, 9:02am UTC](https://discourse.julialang.org/t/weighted-covariance-how-to-compute/7282/10 "2017-11-25T09:02:23Z")

</div>

> [@programista](#):
>
> I know, and Im looking for this algebraik formula

Why is this a Julia question then? In any case, see [Wikipedia](https://en.wikipedia.org/wiki/Sample_mean_and_covariance#Weighted_samples).

The libraries I linked above implement two-pass and online algorithms for this statistic. I imagine you would be much better off using them than rolling your own.
