¿Cómo encontrar eficiente de correlación y desechar los puntos fuera de la línea de 3-sigma en MATLAB?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Tengo un m.txt archivo de datos que se ve algo como esto (con muchos más puntos):

286.842995
3.444398
3.707202
338.227797
3.597597
283.740414
3.514729
3.512116
3.744235
3.365461
3.384880

Algunos de los valores (como 338.227797) son muy diferente a partir de los valores que en general esperan (los números más pequeños).

  • Por lo tanto, pienso que Voy a quitar todos los puntos que están fuera de la 3-sigma range. ¿Cómo puedo hacer que en MATLAB?

  • Además, el problema más grande es que este archivo tiene un archivo separado t.txt asociado a él, que almacena los valores de tiempo correspondientes a estos números. Por lo tanto, voy a tener que quitar los valores de tiempo correspondientes a partir del archivo t.txt también.

Todavía estoy aprendiendo MATLAB, y sé que no sería una buena manera de hacer esto (mejor que el almacenamiento de los índices de los elementos que fueron retirados de m.txt y eliminando luego aquellos elementos del archivo t.txt)

¿Fue útil?

Solución

@Amro está cerca, pero el hallazgo es innecesaria (mirar hacia arriba subscripting lógico) y tiene que incluir la media para un cierto rango de +/- 3 sigma. Me gustaría ir con lo siguiente:

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

Otros consejos

%# 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top