rmoutliers

Обнаружение и удаление выбросов в данных

Описание

пример

B = rmoutliers(A) обнаруживает и удаляет ненужное из данных в векторе, матрице, таблице или timetable.

  • Если A является строка или вектор-столбец, rmoutliers обнаруживает выбросы и удаляет их.

  • Если A является матрицей, таблицей или timetable, rmoutliers обнаруживает выбросы в каждом столбце или переменной A отдельно и удаляет целую строку.

По умолчанию выбросы являются значением, которое больше трех масштабированных медианных абсолютных отклонений (MAD).

пример

B = rmoutliers(A,method) задает метод для определения выбросов. Для примера, rmoutliers(A,'mean') задает выбросы как элемент A более трех стандартных отклонений от среднего.

B = rmoutliers(A,'percentiles',threshold) определяет выбросы как точки вне процентилей, указанных в threshold. The threshold аргумент является двухэлементным вектором-строкой, содержащим нижний и верхний пороги процентиля, такие как [10 90].

пример

B = rmoutliers(A,movmethod,window) задает метод перемещения для обнаружения локальных выбросов в соответствии с заданным окном. Для примера, rmoutliers(A,'movmean',5) определяет выбросы как элементы, более чем на три локальных стандартных отклонения от локального среднего в пятиэлементном окне.

пример

B = rmoutliers(___,dim) удаляет выбросы по размерности dim от A для любого из предыдущих синтаксисов. Для примера, rmoutliers(A,2) удаляет столбцы вместо строк для матрицы A.

пример

B = rmoutliers(___,Name,Value) задает дополнительные параметры для обнаружения и удаления выбросов с помощью одного или нескольких аргументов пары "имя-значение". Для примера, rmoutliers(A,'SamplePoints',t) обнаруживает выбросы в A относительно соответствующих элементов массива временного вектора t.

пример

[B,TF] = rmoutliers(___) также возвращает логический вектор, соответствующий строкам или столбцам A которые были удалены.

Примеры

свернуть все

Создайте вектор, содержащий два выброса, и удалите их. TF позволяет вам идентифицировать, какие элементы входного вектора были обнаружены как выбросы и удалены.

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
[B,TF] = rmoutliers(A)
B = 1×13

    57    59    60    59    58    57    58    61    62    60    62    58    57

TF = 1x15 logical array

   0   0   0   1   0   0   0   0   1   0   0   0   0   0   0

A(TF)
ans = 1×2

   100   300

Удалите выбросы вектора, где выброс определяется как точка, более чем на три стандартных отклонения от среднего значения данных.

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
[B,TF] = rmoutliers(A,'mean')
B = 1×14

    57    59    60   100    59    58    57    58    61    62    60    62    58    57

TF = 1x15 logical array

   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0

A(TF)
ans = 300

Создайте вектор данных, содержащий локальные выбросы.

x = -2*pi:0.1:2*pi;
A = sin(x);
A(47) = 0;

Создайте временной вектор, который соответствует данным в A.

t = datetime(2017,1,1,0,0,0) + hours(0:length(x)-1);

Задайте выбросы как точки более чем на три локальных масштабированных MAD от локальной медианы в скользящем окне. Найдите местоположения выбросов в A относительно точек в t с размером окна 5 часа и удалить их.

[B,TF] = rmoutliers(A,'movmedian',hours(5),'SamplePoints',t);

Постройте график входных данных и данных с удаленными выбросами.

plot(t,A,'b.-',t(~TF),B,'r-')
legend('Input Data','Output Data')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Input Data, Output Data.

Создайте матрицу, содержащую два выброса, и удалите содержащие их столбцы.

A = magic(5);
A(4,4) = 500;
A(5,5) = 500;
A
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19   500     3
    11    18    25     2   500

B = rmoutliers(A,2)
B = 5×3

    17    24     1
    23     5     7
     4     6    13
    10    12    19
    11    18    25

Входные параметры

свернуть все

Входные данные, заданные как вектор, матрица, таблица или расписание.

Типы данных: double | single

Метод обнаружения выбросов, заданный как один из следующих:

МетодОписание
'median'Выбросы заданы как элементы, более чем три масштабированных MAD от медианы. Масштабированный MAD задан как c*median(abs(A-median(A))), где c=-1/(sqrt(2)*erfcinv(3/2)).
'mean'Выбросы определяются как элементы более чем на три стандартных отклонения от среднего. Этот метод быстрее, но менее надежен, чем 'median'.
'quartiles'Выбросы определяются как элементы более чем 1,5 межквартильная область значений выше верхнего квартиля (75 процентов) или ниже нижнего квартиля (25 процентов). Этот метод полезен, когда данные в A обычно не распределяется.
'grubbs'Выбросы обнаруживаются с помощью теста Груббса на выбросы, который удаляет один выброс за итерацию на основе проверки гипотез. Этот метод принимает, что данные в A обычно распределяется.
'gesd'Выбросы обнаруживаются с помощью обобщенного экстремального девиантного теста на выбросы. Этот итерационный метод похож на 'grubbs', но может работать лучше, когда есть несколько выбросов, маскирующих друг друга.

Пороги процентиля, заданные как двухэлементный вектор-строка, элементы которого находятся в интервале [0,100]. Первый элемент указывает нижний порог процентиля, а второй элемент указывает верхний порог процентиля. Для примера - порог [10 90] определяет выбросы как точки ниже 10-го процентиля и выше 90-го процентиля. Первый элемент threshold должен быть меньше второго элемента.

Метод перемещения для определения выбросов, заданный как один из следующих:

МетодОписание
'movmedian'Выбросы заданы как элементы, более чем три локальных масштабированных MAD из локальной медианы по длине окна, заданной как window. Этот метод также известен как Hampel filter.
'movmean'Выбросы заданы как элементы более чем трех локальных стандартных отклонений от локального среднего по длине окна, заданной window.

Длина окна, заданная как скалярный или двухэлементный вектор.

Когда window является положительным целочисленным скаляром, окно центрировано вокруг текущего элемента и содержит window-1 соседние элементы. Если window является четным, тогда окно центрируется вокруг текущего и предыдущего элементов.

Когда window - двухэлементный вектор положительных целых чисел [b f], окно содержит текущий элемент, b элементы назад и f элементы вперед.

Когда A является расписанием или 'SamplePoints' задается как datetime или duration вектор, window должен иметь тип duration, и окна вычисляются относительно точек выборки.

Рабочая размерность, заданный как 1 или 2. По умолчанию rmoutliers действует вдоль первой размерности, размер которого не равен 1.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: rmoutliers(A,'ThresholdFactor',4)
Опции данных

свернуть все

Точки выборки, заданные как разделенная разделенными запятой парами, состоящая из 'SamplePoints' и вектор. Точки выборки представляют x местоположения данных в осях A, и должен быть отсортирован и содержать уникальные элементы. Точки выборки не нужно равномерно отбирать. Вектор точек выборки по умолчанию [1 2 3 ...].

Примечание

Эта пара "имя-значение" не поддерживается, когда входные данные являются timetable. В Timetables всегда используется вектор времени строки в качестве точек выборки. Чтобы использовать различные точки выборки, необходимо отредактировать расписание так, чтобы время в строке содержало требуемые точки выборки.

Движущиеся окна заданы относительно точек выборки. Для примера, если t является вектором времени, соответствующим входным данным, затем rmoutliers(rand(1,10),'movmean',3,'SamplePoints',t) имеет окно, которое представляет временной интервал между t(i)-1.5 и t(i)+1.5.

Когда вектор точек выборки имеет тип данных datetime или duration, тогда длина окна должна иметь тип duration.

Пример: rmoutliers(T,'SamplePoints',0:0.1:10)

Типы данных: single | double | datetime | duration

Табличные переменные для работы, заданные как разделенная разделенными запятой парами, состоящая из 'DataVariables' и один из опций в этой таблице. The 'DataVariables' значение указывает, какие переменные таблицы входа необходимо изучить на выбросы. Другие переменные в таблице, не заданные 'DataVariables' пройти через выход, не проверяясь на выбросы. При работе с строками A, rmoutliers удаляет любую строку, которая имеет выбросы в столбцах, соответствующих заданным переменным. При работе с столбцами A, rmoutliers удаляет указанные переменные из таблицы.

ОпцияОписаниеПримеры
Имя переменной

Вектор символов или скалярная строка, задающая имя табличной переменной

'Var1'

"Var1"

Вектор имен переменных

Массив ячеек из векторов символов или строковых массивов, где каждый элемент является именем табличной переменной

{'Var1' 'Var2'}

["Var1" "Var2"]

Скаляр или вектор переменных индексов

Скаляр или вектор табличных переменных

1

[1 3 5]

Логический вектор

Логический вектор, элементы которого каждый соответствуют табличной переменной, где true включает соответствующую переменную и false исключает его

[true false true]

Указатель на функцию

Указатель на функцию, который принимает табличную переменную как вход и возвращает логический скаляр

@isnumeric

vartype индекс

Индекс таблицы, сгенерированный vartype функция

vartype('numeric')

Пример: rmoutliers(T,'DataVariables',["Var1" "Var2" "Var4"])

Опции определения выбросов

свернуть все

Пороговый коэффициент обнаружения, заданный как разделенная разделенными запятой парами, состоящая из 'ThresholdFactor' и неотрицательный скаляр.

Для методов 'median' и 'movmedian', коэффициент порога обнаружения заменяет количество масштабированных MAD, которое по умолчанию составляет 3.

Для методов 'mean' и 'movmean', коэффициент порога обнаружения заменяет количество стандартных отклонений от среднего, которое по умолчанию составляет 3.

Для методов 'grubbs' и 'gesd', коэффициент порога обнаружения является скаляром в диапазоне от 0 до 1. Значения, близкие к 0, приводят к меньшему числу выбросов, а значения, близкие к 1, приводят к большему числу выбросов. Коэффициент порога обнаружения по умолчанию является 0,05.

Для 'quartile' метод, пороговый коэффициент обнаружения заменяет количество межквартильных областей значений, которое по умолчанию составляет 1,5.

Эта пара "имя-значение" не поддерживается, когда заданный метод 'percentiles'.

Максимальное количество выбросов для 'gesd' только метод, заданный как разделенная разделенными запятой парами, состоящая из 'MaxNumOutliers' и положительная скалярная величина. The 'MaxNumOutliers' значение задает максимальное количество выбросов, возвращаемых 'gesd' способ. Для примера, rmoutliers(A,'MaxNumOutliers',5) возвращает не более пяти выбросов.

Значение по умолчанию для 'MaxNumOutliers' - целое число, самое близкое к 10 процентам от количества элементов в A. Установка большего значения для максимального количества выбросов может гарантировать, что все выбросы будут обнаружены, но за счет снижения вычислительной эффективности.

Минимальное количество выбросов, заданное как разделенная разделенными запятой парами, состоящая из 'MinNumOutliers' и положительная скалярная величина. The 'MinNumOutliers' значение задает минимальное количество выбросов, необходимых для удаления строки или столбца. Для примера, rmoutliers(A,'MinNumOutliers',3) удаляет строку матрицы A если в этом столбце обнаружено 3 или более выбросов.

Выходные аргументы

свернуть все

Данные с выбросами удалены, возвращены как вектор, матрица, таблица или расписание. Размер B зависит от количества удаленных строк или столбцов.

Удаленный индикатор данных, возвращенный как логический вектор. Значение 1 (true) соответствует строкам или столбцам в A которые были удалены. Значение 0 (false) соответствует неизменным строкам или столбцам. Ориентация и размер TF зависит от A и размерность операции.

Расширенные возможности

.
Введенный в R2018b