¿Cómo encontrar eficiente de correlación y desechar los puntos fuera de la línea de 3-sigma en MATLAB?
-
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 archivot.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
)
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) = [];