Come trovare in modo efficiente la correlazione e scartare i punti al di fuori gamma 3-sigma in MATLAB?

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

  •  19-09-2019
  •  | 
  •  

Domanda

Ho un m.txt file di dati che sembra qualcosa di simile (con molti più punti):

286.842995
3.444398
3.707202
338.227797
3.597597
283.740414
3.514729
3.512116
3.744235
3.365461
3.384880

Alcuni dei valori (come 338.227797) sono molto diverso a partire dai valori che in genere si aspettano (numeri più piccoli).

  • Quindi, penso che Toglierò tutti i punti che si trovano al di fuori del 3-sigma range. Come posso fare che in MATLAB?

  • Inoltre, il problema più grande è che questo file ha un t.txt file separato associato con esso che memorizza i valori temporali corrispondenti per questi numeri. Quindi, dovrò rimuovere i valori temporali corrispondenti dal file t.txt anche.

sto ancora imparando MATLAB, e so che ci sarebbe qualche buon modo di fare questo (meglio di memorizzare gli indici degli elementi che sono stati rimossi dalla m.txt e quindi la rimozione di quegli elementi dal file t.txt)

È stato utile?

Soluzione

@Amro è vicino, ma il FIND è inutile (cercare di indicizzazione logica) ed è necessario includere la media per una vera e propria gamma di sigma +/- 3. Vorrei andare con il seguente:

%# 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); 

Altri suggerimenti

%# 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) = [];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top