Comment trouver efficacement la corrélation et jeter des points en dehors de gamme 3-Sigma dans Matlab?
-
19-09-2019 - |
Question
J'ai un m.txt
de fichier de données qui ressemble à quelque chose comme ça (avec beaucoup plus de points):
286.842995
3.444398
3.707202
338.227797
3.597597
283.740414
3.514729
3.512116
3.744235
3.365461
3.384880
Certaines valeurs (comme 338.227797
) sont très différent des valeurs que j'attendent en général (plus petit nombre).
-
Alors, je pense que Je vais supprimer tous les points qui se trouvent en dehors du
3-sigma range
. Comment puis-je faire dans Matlab? -
En outre, le plus gros problème est que ce fichier a un
t.txt
de fichier séparé associé qui stocke les valeurs de temps correspondant à ces numéros. Alors, je vais devoir supprimer les valeurs de temps correspondantes à partir du fichiert.txt
aussi.
Je suis encore à apprendre Matlab, et je sais qu'il y aurait une bonne façon de le faire (mieux que le stockage des indices des éléments qui ont été retirés de m.txt
puis en supprimant les éléments du fichier t.txt
)
La solution
@Amro est proche, mais le FIND est inutile (rechercher subscripting logique) et vous devez inclure la moyenne pour un vrai +/- 3 plage sigma. Je voudrais aller à ce qui suit:
%# load files
m = load('m.txt');
t = load('t.txt');
%# find values within range
z = 3;
meanM = mean(m);
sigmaM = std(m);
I = abs(m - meanM) <= z * sigmaM;
%# keep values within range
m = m(I);
t = t(I);
Autres conseils
%# load files
m = load('m.txt');
t = load('t.txt');
%# find outliers indices
z = 3;
idx = find( abs(m-mean(m)) > z*std(m) );
%# remove them from both data and time values
m(idx) = [];
t(idx) = [];