filloutliers

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

Описание

пример

B = filloutliers(A,fillmethod) находит выбросы в A и заменяет их согласно fillmethod. Для примера, filloutliers(A,'previous') заменяет выбросы на предыдущие невыбросы. По умолчанию выбросы являются значением, которое более чем на три масштабированных медианных абсолютных отклонения (MAD) от медианы. Если A является матрицей или таблицей, затем filloutliers работает с каждым столбцом отдельно. Если A является многомерным массивом, затем filloutliers действует вдоль первой размерности, размер которого не равен 1.

пример

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

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

пример

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

пример

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

пример

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

пример

[B,TF,L,U,C] = filloutliers(___) также возвращает информацию о положении выбросов и порогах, вычисленных методом обнаружения. TF является логическим массивом, указывающим местоположение выбросов в A. The L, U, и C аргументы представляют нижний и верхний пороги и центральное значение, используемое методом определения выбросов.

Примеры

свернуть все

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

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
B = filloutliers(A,'linear');
plot(1:15,A,1:15,B,'o')
legend('Original Data','Interpolated Data')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Data, Interpolated Data.

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

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
B = filloutliers(A,'nearest','mean');
plot(1:15,A,1:15,B,'o')
legend('Original Data','Interpolated Data')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Data, Interpolated Data.

Используйте движущуюся медиану, чтобы найти локальные выбросы в синусоиду, которая соответствует временному вектору.

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

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 часов. Заполните выбросы вычисленным пороговым значением с помощью метода 'clip', и постройте график исходных и заполненных данных.

[B,TF,U,L,C] = filloutliers(A,'clip','movmedian',hours(5),'SamplePoints',t);
plot(t,A,t,B,'o')
legend('Original Data','Filled Data')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Data, Filled Data.

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

L(TF)
ans = -0.8779

Заполните выбросы для каждой строки матрицы.

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

A = randn(5,5) + diag(1000*ones(1,5))
A = 5×5
103 ×

    1.0005   -0.0013   -0.0013   -0.0002    0.0007
    0.0018    0.9996    0.0030   -0.0001   -0.0012
   -0.0023    0.0003    1.0007    0.0015    0.0007
    0.0009    0.0036   -0.0001    1.0014    0.0016
    0.0003    0.0028    0.0007    0.0014    1.0005

Заполните выбросы нулями на основе данных в каждой строке и отобразите новые значения.

[B,TF,lower,upper,center] = filloutliers(A,0,2);
B
B = 5×5

         0   -1.3077   -1.3499   -0.2050    0.6715
    1.8339         0    3.0349   -0.1241   -1.2075
   -2.2588    0.3426         0    1.4897    0.7172
    0.8622    3.5784   -0.0631         0    1.6302
    0.3188    2.7694    0.7147    1.4172         0

Вы можете получить прямой доступ к обнаруженным значениям выбросов и их заполненным значениям с помощью TF как вектор индекса.

[A(TF) B(TF)]
ans = 5×2
103 ×

    1.0005         0
    0.9996         0
    1.0007         0
    1.0014         0
    1.0005         0

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

x = 1:10;
A = [60 59 49 49 58 100 61 57 48 58];
[B,TF,lower,upper,center] = filloutliers(A,'clip');
plot(x,A,x,B,'o',x,lower*ones(1,10),x,upper*ones(1,10),x,center*ones(1,10))
legend('Original Data','Filled Data','Lower Threshold','Upper Threshold','Center Value')

Figure contains an axes. The axes contains 5 objects of type line. These objects represent Original Data, Filled Data, Lower Threshold, Upper Threshold, Center Value.

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

свернуть все

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

Если A является таблицей, тогда ее переменные должны быть типа double или single, или можно использовать 'DataVariables' Пара "имя-значение" в список double или single переменные явно. Установка переменных полезна при работе с таблицей, которая содержит переменные с типами данных, отличными от double или single.

Если A является расписанием, тогда filloutliers работает только с элементами таблицы. Значения времени строк должны быть уникальными и указываться в порядке возрастания.

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

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

Метод заливкиОписание
Числовой скалярЗаполняет заданным скалярным значением
'center'Заполняет значение центра, определяемое findmethod
'clip'Заполняет нижним пороговым значением для элементов, меньших нижнего порога, определяемого findmethod. Заполняет верхним пороговым значением для элементов, больше верхнего порога, определяемого findmethod
'previous'Заполняет предыдущее значение, не связанное с невыбросами
'next'Заполняет следующим непускным значением
'nearest'Заполняет ближайшим неиспускаемым значением
'linear'Заполняет с помощью линейной интерполяции соседних, не выходящих значений
'spline'Заполняет с помощью кусочно-кубической сплайн интерполяции
'pchip'Заполняет с помощью сохраняющей форму кусочно-кубической сплайн интерполяции
'makima'модифицированная кубическая эрмитова интерполяция Акима (число, duration, и datetime только типы данных)

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

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

МетодОписание
'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, и окна вычисляются относительно точек выборки.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

Размерность для работы, заданная как положительный целочисленный скаляр Если значение не задано, то по умолчанию это первое измерение массива, не равный 1.

Рассмотрим матрицу A.

filloutliers(A,fillmethod,1) заполняет выбросы согласно данным в каждом столбце.

filloutliers(A,fillmethod,2) заполняет выбросы согласно данным в каждой строке.

Когда A является таблицей или расписанием, dim не поддерживается. filloutliers работает с каждой таблицей или переменной расписания отдельно.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

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

свернуть все

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

Примечание

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

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

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

Пример: filloutliers([1 100 3 4],'nearest','SamplePoints',[1 2.5 3 4])

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

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

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

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

'Var1'

"Var1"

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

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

{'Var1' 'Var2'}

["Var1" "Var2"]

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

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

1

[1 3 5]

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

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

[true false true]

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

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

@isnumeric

vartype индекс

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

vartype('numeric')

Пример: filloutliers(A,'previous','DataVariables',["Var1" "Var2" "Var4"])

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

свернуть все

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

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

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

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

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

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

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Известный индикатор выбросов, заданный как разделенная разделенными запятой парами, состоящая из 'OutlierLocations' и логический вектор, матрица или многомерный массив того же размера, что и A. Известные элементы индикатора выбросов могут быть true чтобы указать выбросы в соответствующем месте A или false в противном случае. Определение 'OutlierLocations' отключает метод обнаружения выбросов по умолчанию и использует только элементы известного индикатора выбросов для определения выбросов.

The 'OutlierLocations' пара "имя-значение" не может быть задана, когда findmethod задан.

Область выхода TF является тем же самым, что и 'OutlierLocations' значение.

Типы данных: logical

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

свернуть все

Заполненный массив выбросов, возвращенный в виде вектора, матрицы, многомерного массива, таблицы или timetable. Элементы B те же, что и у A, но со всеми выбросами заменены согласно fillmethod.

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

Индикатор выбросов, возвращенный как векторный, матричный или многомерный массив. Элемент TF является true когда соответствующий элемент A являются выбросы и false в противном случае. TF - тот же размер, что и A.

Типы данных: logical

Более низкий порог, используемый методом определения выбросов, возвращается в виде скаляра, вектора, матрицы, многомерного массива, таблицы или timetable. Для примера нижнее значение метода определения выбросов по умолчанию является тремя масштабированными MAD ниже медианы входных данных. L имеет тот же размер, что и A во всех размерностях, кроме рабочего размера, где длина равна 1.

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

Верхний порог, используемый методом определения выбросов, возвращается в виде скаляра, вектора, матрицы, многомерного массива, таблицы или timetable. Для примера верхнее значение метода определения выбросов по умолчанию является тремя масштабированными MAD над медианой входных данных. U имеет тот же размер, что и A во всех размерностях, кроме рабочего размера, где длина равна 1.

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

Центральное значение, используемое методом определения выбросов, возвращается в виде скаляра, вектора, матрицы, многомерного массива, таблицы или timetable. Для примера центральное значение метода определения выбросов по умолчанию является медианой входных данных. C имеет тот же размер, что и A во всех размерностях, кроме рабочего размера, где длина равна 1.

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

Подробнее о

свернуть все

Срединное абсолютное отклонение

Для векторной A со случайными переменными, составленной из N скалярных наблюдений, среднее абсолютное отклонение (MAD) определяется как

MAD = median(|Aimedian(A)|)

для i = 1,2,...,N.

Масштабированный MAD задан как c*median(abs(A-median(A))) где c=-1/(sqrt(2)*erfcinv(3/2)).

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

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