Calculate standard deviation given frequency counts rather than sample
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Given a sample x
x = [1 1 1 1 2 2 2 3 3 3 3 4 5 6 6];
it is trivial to calculate the standard deviation:
s = std(x);
Suppose instead of x, I have the an array with the frequency counts of x:
A = [4 1;
3 2;
4 3;
1 4;
1 5;
2 6];
What's an elegant way to calculate the standard deviation, without needing to reconstruct x along the way?
0 Commenti
Risposta accettata
dpb
il 27 Ago 2013
Modificato: dpb
il 27 Ago 2013
One way,
>> m=dot(a(:,1)',a(:,2))/sum(a(:,1))
m =
2.8667
>> s=sqrt(dot([[a(:,2)-m]'].^2,a(:,1))/(sum(a(:,1))-1))
s =
1.7265
>> [mean(x) std(x)]
ans =
2.8667 1.7265
>>
4 Commenti
dpb
il 27 Ago 2013
Chuckles...
This implementation is, of course, straightforward and for small sample sizes and well-behaved inputs should be fine. You're at the mercy of data order for computation of course, so isn't as robust as might be (and as I presume the builtin mean/std functions are)
Vedere anche
Categorie
Scopri di più su Smoothing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!