hampel

Удаление выбросов с помощью идентификатора Хампеля

Описание

пример

y = hampel(x) применяет фильтр Хампеля к вектору входа, x, чтобы обнаружить и удалить выбросы. Для каждой выборки xфункция вычисляет медиану окна, состоящего из выборки и ее шести окружающих выборок, по три на сторону. Он также оценивает стандартное отклонение каждой выборки относительно ее медианы окна, используя среднее абсолютное отклонение. Если выборка отличается от медианы более чем на три стандартных отклонения, она заменяется медианой. Если x является матрицей, тогда hampel обрабатывает каждый столбец x как независимый канал.

y = hampel(x,k) определяет количество соседей, k, с каждой стороны каждой выборки x в окне измерения. k значение по умолчанию 3.

пример

y = hampel(x,k,nsigma) задает количество стандартных отклонений, nsigma, по которому производится выборка x должен отличаться от локальной медианы, чтобы она была заменена медианой. nsigma значение по умолчанию 3.

пример

[y,j] = hampel(___) также возвращает логическую матрицу, которая верна в местоположениях всех точек, определенных как выбросы. Этот синтаксис принимает любые входные параметры из предыдущих синтаксисов.

пример

[y,j,xmedian,xsigma] = hampel(___) также возвращает локальные медианы и предполагаемые стандартные отклонения для каждого элемента x.

hampel(___) без выходных аргументов строит график отфильтрованного сигнала и аннотирует выбросы, которые были удалены.

Примеры

свернуть все

Сгенерируйте 100 выборки синусоидального сигнала. Замените шестые и двадцатые выборки шипами.

x = sin(2*pi*(0:99)/100);
x(6) = 2;
x(20) = -2;

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

[y,i,xmedian,xsigma] = hampel(x);

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

n = 1:length(x);
plot(n,x)
hold on
plot(n,xmedian-3*xsigma,n,xmedian+3*xsigma)
plot(find(i),x(i),'sk')
hold off
legend('Original signal','Lower limit','Upper limit','Outliers')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Original signal, Lower limit, Upper limit, Outliers.

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

hampel(x,1)

Figure contains an axes. The axes contains 3 objects of type line. These objects represent original signal, filtered signal, outliers.

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

rng('default')

n = 59;
x = sin(pi./[15 10]'*(1:n)+pi/3)';

spk = randi(2*n,9,1);
x(spk) = x(spk)*2;
x(randi(2*n,6,1)) = NaN;

plot(x)

Figure contains an axes. The axes contains 2 objects of type line.

Пропустите сигнал, используя hampel с настройками по умолчанию.

y = hampel(x);
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

Увеличьте длину движущееся окно и уменьшите порог, чтобы обработать выборку как выбросы.

y = hampel(x,4,2);
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

Вывод рабочей медианы для каждого канала. Наложите медианы на график сигнала.

[y,j,xmd,xsd] = hampel(x,4,2);
plot(x)
hold on
plot(xmd,'--')

Figure contains an axes. The axes contains 4 objects of type line.

Сгенерируйте многоканальный сигнал, который состоит из двух синусоидов разных частот, встроенных в белый Гауссов шум модуля отклонения.

rng('default')

t = 0:60;
x = sin(pi./[10;2]*t)'+randn(numel(t),2);

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

k = 4;
nsig = 2;

[y,h] = hampel(x,k,nsig);

Постройте график каждого канала сигнала в собственном наборе осей. Нарисуйте исходный сигнал, отфильтрованный сигнал и выбросы. Аннотировать местоположения выбросов.

for k = 1:2
    hk = h(:,k);
    ax = subplot(2,1,k);
    plot(t,x(:,k))
    hold on
    plot(t,y(:,k))
    plot(t(hk),x(hk,k),'*')
    hold off
    ax.XTick = t(hk);
end

Figure contains 2 axes. Axes 1 contains 3 objects of type line. Axes 2 contains 3 objects of type line.

Сгенерируйте 100 выборки синусоидального сигнала. Замените шестые и двадцатые выборки шипами.

n = 1:100;
x = sin(2*pi*n/100);
x(6) = 2;
x(20) = -2;

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

  • Размер окна следующий 2×3+1=7.

  • Точки, которые отличаются от их медианы окна более чем на три стандартных отклонения, считаются выбросами.

Постройте график результата.

[y,i,xmedian,xsigma] = hampel(x);

plot(n,x)
hold on
plot(n,[1;1]*xmedian+3*[-1;1]*xsigma)
plot(find(i),x(i),'sk')
hold off
legend('Signal','Lower','Upper','Outliers')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Signal, Lower, Upper, Outliers.

Повторите вычисление с использованием размера окна 2×10+1=21 и два стандартных отклонения в качестве критериев для выявления выбросов.

sds = 2;
adj = 10;
[y,i,xmedian,xsigma] = hampel(x,adj,sds);

plot(n,x)
hold on
plot(n,[1;1]*xmedian+sds*[-1;1]*xsigma)
plot(find(i),x(i),'sk')
hold off
legend('Signal','Lower','Upper','Outliers')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Signal, Lower, Upper, Outliers.

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

свернуть все

Входной сигнал, заданный как вектор или матрица. Если x является матрицей, тогда hampel обрабатывает каждый столбец x как независимый канал.

Пример: cos(pi/4*(0:159))+randn(1,160) является одноканальным вектором-строкой.

Пример: cos(pi./[4;2]*(0:159))'+randn(160,2) является двухканальным сигналом.

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

Количество соседей по обеим сторонам xs выборки, заданное в виде целочисленного скаляра. Выборки, близкие к ребрам сигнала, которые имеют меньше k выборки с одной стороны сравнивают с медианой меньшего окна.

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

Количество стандартных отклонений, на которые берётся выборка x должен отличаться от локальной медианы, чтобы считаться выбросами. Задайте nsigma как действительный скаляр. Функция оценивает стандартное отклонение путем масштабирования локального среднего абсолютного отклонения (MAD) в множитель κ=12erf1(1/2)1.4826.

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

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

свернуть все

Отфильтрованный сигнал, возвращенный как вектор или матрица того же размера, что и x.

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

Индекс выбросов, возвращенный в виде вектора или матрицы того же размера, что и x.

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

Локальные медианы, возвращенные как вектор или матрица того же размера, что и x.

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

Предполагаемые стандартные отклонения, возвращенные в виде вектора или матрицы того же размера, что и x.

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

Подробнее о

свернуть все

Идентификатор Хампеля

Этот Идентификатор Хампеля является изменением правила статистики с тремя сигмами, которое устойчиво к выбросам.

Учитывая последовательность x 1, x 2, x 3, ..., xn и скользящее окно k длины, задайте медиану «точка-точка» и оценки стандартного отклонения с помощью:

  • Локальная медиана - mi=median(xik,xik+1,xik+2,,xi,,xi+k2,xi+k1,xi+k)

  • Стандартное отклонение - σi=κmedian(|xikmi|,,|xi+kmi|), где κ=12erf1(1/2)1.4826

Величина σi/ κ известна как медианное абсолютное отклонение (MAD).

Если выборочный xi такой, что

|ximi|>nσσi

для заданного порога , затем Идентификатор Хампеля объявляет xi выбросов и заменяет его на mi.

Рядом с конечными точками последовательности функция обрезает окно, используемое для вычисления mi и σi:

  • i <k + 1

    mi=median(x1,x2,x3,,xi,,xi+k2,xi+k1,xi+k)

    σi=κmedian(|x1m1|,,|xi+kmi|)

  • i> nk

    mi=median(xik,xik+1,xik+2,,xi,,xn2,xn1,xn)

    σi=κmedian(|xikmi|,,|xnmn|)

Ссылки

[1] Лю, Ханьсун, Сириш Шах и Вэй Цзян. «Оперативное определение выбросов и очистка данных». Компьютеры и химическая техника. Том 28, 2004 марта, с. 1635-1647.

Введенный в R2015b