Como encontrar com eficiência a correlação e descartar pontos fora da faixa de 3-sigma no MATLAB?
-
19-09-2019 - |
Pergunta
Eu tenho um arquivo de dados m.txt
Isso se parece com isso (com muito mais pontos):
286.842995
3.444398
3.707202
338.227797
3.597597
283.740414
3.514729
3.512116
3.744235
3.365461
3.384880
Alguns dos valores (como 338.227797
) são muito diferente Dos valores que geralmente espero (números menores).
Então, estou pensando que vou remover todos os pontos que estão do lado de fora do
3-sigma range
. Como posso fazer isso no Matlab?Além disso, o maior problema é que este arquivo tem um arquivo separado
t.txt
associado a ele que armazena os valores de tempo correspondentes para esses números. Então, terei que remover os valores de tempo correspondentes dot.txt
arquivo também.
Ainda estou aprendendo Matlab e sei que haveria uma boa maneira de fazer isso (melhor do que armazenar índices dos elementos que foram removidos de m.txt
e depois remover esses elementos do t.txt
Arquivo)
Solução
O @Amro está próximo, mas o achado é desnecessário (procure a assinatura lógica) e você precisa incluir a média para uma faixa Sigma True +/- 3. Eu iria com o seguinte:
%# 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);
Outras dicas
%# 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) = [];