Comment trouver efficacement la corrélation et jeter des points en dehors de gamme 3-Sigma dans Matlab?

StackOverflow https://stackoverflow.com/questions/1728709

  •  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 fichier t.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)

Était-ce utile?

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) = [];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top