Effacer les filtres
Effacer les filtres

Calculate standard deviation for different groups

10 vues (au cours des 30 derniers jours)
leonidas86
leonidas86 le 23 Juil 2018
Commenté : Guillaume le 23 Juil 2018
I want to plot a Measurement with a bar figure. Therefore I want to create different groups and calculate the standard deviation for each group. I have a vector "Measurement" which is sorted according to increasing values. I get group IDs for the Measurement values by the use of the histc function.
[~,Measure_ID]=histc(Measurement_x,0:200:max);
In the next step I try to calculate the standard deviation with the accumarray function.
group_std = accumarray(Measure_ID,Measurement_y,[],@std);
The std command uses the follow mathematical formula:
The problem is that accumarray calculates the arithmetic average for each group separately. But I want to see the standard deviation regarding to the global arithmetic average. Is there a way to solve my issue?
Version: 2012b
  1 commentaire
Jan
Jan le 23 Juil 2018
Modifié(e) : Jan le 23 Juil 2018
Do you mean:
std(Measurement_y)
? What exactly is "standard deviation regarding to the global arithmetic average"?

Connectez-vous pour commenter.

Réponse acceptée

Jan
Jan le 23 Juil 2018
Modifié(e) : Jan le 23 Juil 2018
If you want to set the x_bar values of the formula to mean(Measurement_y), why not implementing this as function?
function s = specialStd(x, m)
s = sqrt(sum((x - m) .^ 2) / (length(x) - 1));
end
and call it like:
m = mean(Measurement_x);
group_std = accumarray(Measure_ID, Measurement_y, [], @(x) specialStd(x, m));
  1 commentaire
Guillaume
Guillaume le 23 Juil 2018
specialStd, notexactlystd, I think we can agree that this thing shouldn't be called plain std!

Connectez-vous pour commenter.

Plus de réponses (1)

Guillaume
Guillaume le 23 Juil 2018
"The problem is that accumarray calculates the arithmetic average for each group separately".
It's not accumarray doing that, it's std, because that the definition of the standard eviation.
To do what you want, you'll have to implement your own standard deviation calculation:
whole_mean = mean(Mesurement_y);
group_notexactlystd = accumarray(Measure_ID, Measurement_y, [], @(v) sum((v - whole_mean).^2)/(numel(v)-1));

Catégories

En savoir plus sur Surfaces, Volumes, and Polygons dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by