Как эффективно находить точки корреляции и отбрасывать точки вне диапазона 3 сигм в MATLAB?

У меня есть файл данных m.txt, который выглядит примерно так (с гораздо большим количеством точек):

286.842995
3.444398
3.707202
338.227797
3.597597
283.740414
3.514729
3.512116
3.744235
3.365461
3.384880

Некоторые значения (например, 338.227797) сильно отличаются от ожидаемых значений (меньшие числа).

  • Итак, я думаю, что я уберу все точки, которые лежат за пределами 3-sigma range. Как я могу сделать это в MATLAB?

  • Кроме того, большая проблема заключается в том, что с этим файлом связан отдельный файл t.txt, в котором хранятся соответствующие значения времени для этих чисел. Итак, мне также придется удалить соответствующие значения времени из файла t.txt.

Я все еще изучаю MATLAB и знаю, что есть хороший способ сделать это (лучше, чем сохранять индексы элементов, которые были удалены из m.txt, а затем удалять эти элементы из файла t.txt)


person Lazer    schedule 13.11.2009    source источник
comment
Выбросы выглядят так, как будто они могут быть отформатированы с десятичной точкой в ​​неправильном месте. Если это так, вы можете воспользоваться приведенными ниже решениями и заменить шаг стирания на m(idx) = m(idx)/100;.   -  person mtrw    schedule 14.11.2009
comment
это действительно хорошее наблюдение! Обычно очистка данных является одним из самых важных и сложных шагов в добыче/анализе данных.   -  person Amro    schedule 15.11.2009
comment
@mtrw нет, это не неправильное размещение десятичной точки. хотя похоже!   -  person Lazer    schedule 15.11.2009


Ответы (2)


@Amro близок, но НАЙТИ не нужен (поищите логический индекс), и вам нужно включить среднее значение для истинного диапазона +/- 3 сигмы. Я бы пошел со следующим:

%# 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); 
person Nzbuu    schedule 13.11.2009
comment
Возможно, было бы более естественно обратить неравенство в I и сохранить нужные значения, т. е. I = abs(m - meanM) < z * sigmaM; M = M(I); t = t(I); - person Richie Cotton; 13.11.2009
comment
@Ричи. Истинный. Я изменю это. - person Nzbuu; 16.11.2009

person    schedule
comment
нет необходимости в сложных методах, иногда лучше всего использовать простые решения! - person Amro; 13.11.2009
comment
Кроме того, вы можете найти этот ответ на аналогичный вопрос полезным: только соответствующие точки в matlab"> stackoverflow.com/questions/1636683/ - person Amro; 13.11.2009