Como encontrar com eficiência a correlação e descartar pontos fora da faixa de 3-sigma no MATLAB?

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

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

Foi útil?

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) = [];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top