Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

hampel

Eliminación de valores atípicos mediante el identificador hampel

Descripción

ejemplo

y = hampel(x) aplica un filtro Hampel al vector de entrada, para detectar y eliminar valores atípicos.x Para cada muestra de , la función calcula la mediana de una ventana compuesta por la muestra y sus seis muestras circundantes, tres por lado.x También estima la desviación estándar de cada muestra sobre su mediana de ventana utilizando la desviación absoluta mediana. Si una muestra difiere de la mediana por más de tres desviaciones estándar, se sustituye por la mediana. Si es una matriz, trata cada columna como un canal independiente.xhampelx

y = hampel(x,k) especifica el número de vecinos, , a cada lado de cada muestra de la ventana de medición. de forma predeterminada es 3.kxk

ejemplo

y = hampel(x,k,nsigma) especifica una serie de desviaciones estándar, , por las cuales una muestra de debe diferir de la mediana local para que se reemplace con la mediana. de forma predeterminada es 3.nsigmaxnsigma

ejemplo

[y,j] = hampel(___) también devuelve una matriz lógica que es verdadera en las ubicaciones de todos los puntos identificados como valores atípicos. Esta sintaxis acepta cualquiera de los argumentos de entrada de sintaxis anteriores.

ejemplo

[y,j,xmedian,xsigma] = hampel(___) también devuelve las medianas locales y las desviaciones estándar estimadas para cada elemento de .x

hampel(___) sin argumentos de salida traza la señal filtrada y anota los valores atípicos que se eliminaron.

Ejemplos

contraer todo

Generar 100 muestras de una señal sinusoidal. Sustituya las muestras sexta y vigésima por picos.

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

Se utiliza para localizar cada muestra que difiere en más de tres desviaciones estándar de la mediana local.hampel La ventana de medición se compone de la muestra y sus seis muestras circundantes, tres por lado.

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

Trazar la señal filtrada y anotar los valores atípicos.

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

Repita el cálculo, pero ahora tome solo una muestra adyacente en cada lado al calcular la mediana. La función considera el extremo como valores atípicos.

hampel(x,1)

Generar una señal de dos canales que consiste en sinusoides de diferentes frecuencias. Coloque picos en lugares aleatorios. Utilice NaNs para agregar muestras que faltan al azar. Restablezca el generador de números aleatorios para obtener resultados reproducibles. Traza la señal.

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)

Filtre la señal con los ajustes predeterminados.hampel

y = hampel(x); plot(y)

Aumente la longitud de la ventana móvil y disminuya el umbral para tratar una muestra como un valor atípico.

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

Emitir la mediana en ejecución para cada canal. Superponga las medianas en una gráfica de la señal.

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

Generar una señal multicanal que consiste en dos sinusoides de diferentes frecuencias incrustadas en el ruido gaussiano blanco de la varianza de la unidad.

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

Aplique un filtro Hampel a la señal. Tome como valores atípicos aquellos puntos que difieren en más de dos desviaciones estándar de la mediana de una ventana de nueve muestras circundante. Genere una matriz lógica que sea verdadera en las ubicaciones de los valores atípicos.

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

Trazar cada canal de la señal en su propio conjunto de ejes. Dibuje la señal original, la señal filtrada y los valores atípicos. Anote las ubicaciones atípicos.

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

Generar 100 muestras de una señal sinusoidal. Sustituya las muestras sexta y vigésima por picos.

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

Se utiliza para calcular la mediana local y la desviación estándar estimada para cada muestra.hampel Utilice los valores predeterminados de los parámetros de entrada:

  • El tamaño de la ventana es

    <math display="block">
    <mrow>
    <mn>2</mn>
    <mo>×</mo>
    <mn>3</mn>
    <mo>+</mo>
    <mn>1</mn>
    <mo>=</mo>
    <mn>7</mn>
    </mrow>
    </math>
    .

  • Los puntos que difieren de su mediana de ventana en más de tres desviaciones estándar se consideran valores atípicos.

Trazar el resultado.

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

Repita el cálculo utilizando un tamaño de ventana de

<math display="block">
<mrow>
<mn>2</mn>
<mo>×</mo>
<mn>1</mn>
<mn>0</mn>
<mo>+</mo>
<mn>1</mn>
<mo>=</mo>
<mn>2</mn>
<mn>1</mn>
</mrow>
</math>
y dos desviaciones estándar como criterios para identificar valores atípicos.

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

Argumentos de entrada

contraer todo

Señal de entrada, especificada como vector o matriz. Si es una matriz, trata cada columna como un canal independiente.xhampelx

Ejemplo: es una señal de vector de fila de un solo canal.cos(pi/4*(0:159))+randn(1,160)

Ejemplo: es una señal de dos canales.cos(pi./[4;2]*(0:159))'+randn(160,2)

Tipos de datos: single | double

Número de vecinos a ambos lados de la muestra xs, especificado como un escalar entero. Las muestras cercanas a los bordes de la señal que tienen menos de muestras en un lado se comparan con la mediana de una ventana más pequeña.k

Tipos de datos: single | double

Número de desviaciones estándar por las que una muestra de debe diferir de su mediana local para ser considerada un valor atípico.x Especifique como un escalar real.nsigma La función estima la desviación estándar escalando la desviación absoluta media local (MAD) por un factor de κ=12erfc11/21.4826.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Señal filtrada, devuelta como vector o matriz del mismo tamaño que .x

Tipos de datos: single | double

Indice atípico, devuelto como vector o matriz del mismo tamaño que .x

Tipos de datos: logical

Medianas locales, devueltas como vector o matriz del mismo tamaño que .x

Tipos de datos: single | double

Desviaciones estándar estimadas, devueltas como vector o matriz del mismo tamaño que .x

Tipos de datos: single | double

Más acerca de

contraer todo

Identificador de Hampel

El identificador Hampel es una variación de la regla de tres sigmas de estadísticas que es robusta contra los valores atípicos.

Dada una secuencia x1, x2, x3, …, xn y una ventana deslizante de longitud, defina la mediana punto a punto y las estimaciones de desviación estándar utilizando:k

  • Mediana local — mi=median(xik,xik+1,xik+2,,xi,,xi+k2,xi+k1,xi+k)

  • Desviación estándar — σi=κmedian(|xikmi|,,|xi+kmi|), Dónde κ=12erfc11/21.4826

La cantidad σi /κ  se conoce como la desviación absoluta mediana (MAD).

Si una muestra Xi es tal que

|ximi|>nσσi

para un umbral determinado Nσ, a continuación, el identificador Hampel declara Xi un atípico y lo reemplaza con Mi.

Cerca de los puntos finales de secuencia, la función trunca la ventana utilizada para calcular Mi Y Σi:

  • i < k + 1

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

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

  • i > n – k

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

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

Referencias

[1] Liu, Hancong, Sirish Shah, and Wei Jiang. “On-line outlier detection and data cleaning.” Computers and Chemical Engineering. Vol. 28, March 2004, pp. 1635–1647.

Introducido en R2015b