exponenta event banner

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. 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. 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.

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

свернуть все

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

Если 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'модифицированная Akima кубическая эрмитовая интерполяция (числовая, 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'Отклонения выявляются с помощью обобщенного теста экстремальных отклонений Studentized для отклонений. Этот итеративный метод аналогичен 'grubbs', но может работать лучше, когда существует несколько отклонений, маскирующих друг друга.

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

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

МетодОписание
'movmedian'Отклонения определяются как элементы с более чем тремя локальными масштабированными MAD из локальной медианы по длине окна, заданной window. Этот метод также известен как фильтр Хампеля.
'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. В расписаниях всегда используется вектор времени строки в качестве точек выборки. Чтобы использовать различные точки выборки, необходимо отредактировать расписание так, чтобы время строки содержало нужные точки выборки.

Движущиеся окна определяются относительно точек образца. Например, если 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' и один из вариантов в этой таблице. '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' и положительный скаляр. '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' отключает метод обнаружения отклонений по умолчанию и использует только элементы известного индикатора отклонений для определения отклонений.

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

Продукция TF совпадает с 'OutlierLocations' значение.

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

Подробнее

свернуть все

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

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

MAD = медиана (| Ai − медиана (A) |)

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

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

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

.
Представлен в R2017a