hampel

Использование удаления выброса идентификатор Hampel

Синтаксис

y = hampel(x)
y = hampel(x,k)
y = hampel(x,k,nsigma)
[y,j] = hampel(___)
[y,j,xmedian,xsigma] = hampel(___)
hampel(___)

Описание

пример

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

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

пример

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

пример

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

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

hampel(x,1)

Сгенерируйте двухканальный сигнал, состоящий из синусоид различных частот. Поместите скачки в случайные места. Используйте 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)

Отфильтруйте сигнал с помощью hampel с настройками по умолчанию.

y = hampel(x);
plot(y)

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

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

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

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

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

rng('default')

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

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

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

Сгенерируйте 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')

Повторите вычисление с помощью размера окна 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')

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

свернуть все

Входной сигнал, заданный как вектор или матрица. Если 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) фактором κ=12erfc11/21.4826.

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

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

свернуть все

Фильтрованный сигнал, возвращенный как вектор или матрица, одного размера как x.

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

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

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

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

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

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

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

Больше о

свернуть все

Идентификатор Hampel

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

Учитывая последовательность x 1, x 2, x 3, …, xn и раздвижное окно длины k, задает оценочное использование среднего и стандартного отклонения "точка-точка":

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

  • Стандартное отклонение σi=κмедиана(|xikmi|,,|xi+kmi|), где κ=12erfc11/21.4826

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

Если демонстрационный xi таков что

|ximi|>nσσi

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

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

  • i < k + 1

    mi=медиана(x1,x2,x3,,xi,,xi+k2,xi+k1,xi+k)

    σi=κмедиана(|x1m1|,,|xi+kmi|)

  • i > n – k

    mi=медиана(xik,xik+1,xik+2,,xi,,xn2,xn1,xn)

    σi=κмедиана(|xikmi|,,|xnmn|)

Ссылки

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

Смотрите также

| | | | | | | |

Введенный в R2015b