Come trovare in modo efficiente la correlazione e scartare i punti al di fuori gamma 3-sigma in MATLAB?
-
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 filet.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
)
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) = [];