filloutliers

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

Синтаксис

B = filloutliers(A,fillmethod)
B = filloutliers(A,fillmethod,findmethod)
B = filloutliers(A,fillmethod,movmethod,window)
B = filloutliers(___,dim)
B = filloutliers(___,Name,Value)
[B,TF,L,U,C] = 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,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')

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

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')

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

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

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')

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

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')

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

свернуть все

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

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

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

Типы данных: удвойтесь | единственный | таблица | расписание

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

Fillmethod Описание
Числовой скалярЗаливки с заданным скалярным значением
центр Заливки с центральным значением, определенным findmethod
'clip'Заливки с более низким пороговым значением для элементов, меньших, чем более низкий порог, определяются findmethod. Заливки с верхним пороговым значением для элементов, больше, чем верхний порог, определяются findmethod
'previous'Заливки с предыдущим значением неизолированной части
'next'Заливки со следующим значением неизолированной части
самый близкийЗаливки с самым близким значением неизолированной части
'linear'Заливки с помощью линейной интерполяции соседних, значений неизолированной части
сплайнЗаливки с помощью кусочной интерполяции кубическим сплайном
pchipЗаливки с помощью сохраняющей форму кусочной интерполяции кубическим сплайном

Типы данных: удвойтесь | единственный | char

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

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

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

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

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

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

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

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

Типы данных: удвойтесь | единственный | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | длительность

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

Рассмотрите матричный A.

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

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

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

Типы данных: удвойтесь | единственный | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: filloutliers (A, 'центр', 'среднее значение', 'ThresholdFactor', 4)

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

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

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

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

Типы данных: удвойтесь | единственный | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

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

Типы данных: единственный | удваиваются | datetime | длительность

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

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

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

  • Вектор индексов табличной переменной

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

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

Пример: 'Возраст'

Пример: {'Высота', 'Вес'}

Пример: isnumeric

Типы данных: char | ячейка | удваивается | единственный | логический | function_handle

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

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

Типы данных: удвойтесь | единственный | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

Вывод TF совпадает со значением 'OutlierLocations'.

Типы данных: логический

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

свернуть все

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

Типы данных: удвойтесь | единственный | таблица | расписание

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

Типы данных: логический

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

Типы данных: удвойтесь | единственный | таблица | расписание

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

Типы данных: удвойтесь | единственный | таблица | расписание

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

Типы данных: удвойтесь | единственный | таблица | расписание

Больше о

свернуть все

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

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

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

поскольку i = 1,2... N.

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

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

Введенный в R2017a

Была ли эта тема полезной?