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

У меня есть файл данных 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)

Ответы [ 2 ]

7 голосов
/ 13 ноября 2009

@ 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); 
4 голосов
/ 13 ноября 2009
%# 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) = [];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...