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 outlier utilizando el identificador de Hampel

Descripción

ejemplo

y = hampel(x) aplica un filtro de 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 en más de tres desviaciones estándar, se sustituye por la mediana. Si es una matriz, entonces 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.kx

ejemplo

y = hampel(x,k,nsigma) especifica un número de desviaciones estándar, por lo que una muestra de debe diferir de la mediana local para que se sustituya por la mediana.nsigmax

ejemplo

[y,j] = hampel(___) también devuelve una matriz lógica que es true 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 los 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

Genere 100 muestras de una señal sinusoidal. Reemplace las muestras sexta y vigésima con picos.

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

Utilícelo para ubicar todas las muestras que difieran por 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);

Trace la señal filtrada y anote 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')

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

hampel(x,1)

Generar una señal de dos canales consistente en sinusoides de diferentes frecuencias. Coloque picos en lugares aleatorios. Use NaNs para agregar muestras faltantes al azar. Restablezca el generador de números aleatorios para obtener resultados reproducibles. Trace 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 usando la configuración predeterminada.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)

Salida de la mediana de ejecución para cada canal. Superponer las medianas en una trama de la señal.

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

Genere una señal multicanal que consista 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 de Hampel a la señal. Tome como valores atípicos esos puntos que difieren en más de dos desviaciones estándar de la mediana de una ventana de nueve muestras circundante. Salida de una matriz lógica que es true en las ubicaciones de los valores atípicos.

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

Trace 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 del valor atípico.

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

Genere 100 muestras de una señal sinusoidal. Reemplace las muestras sexta y vigésima con picos.

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

Utilíla 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 la mediana de la ventana en más de tres desviaciones estándar se consideran valores atípicos.

Graficar 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 con 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 criterio para identificar los 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, entonces 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 cada lado de la muestra xs, especificado como un escalar entero. Las muestras cercanas a los bordes de la señal que tienen menos 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 cuales 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 mediana 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

Índice de outlier, devuelto como un vector o matriz del mismo tamaño que.x

Tipos de datos: logical

Medianas locales, devueltos como un 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

Hampel Identifier

El identificador de Hampel es una variación de la regla de tres Sigma de las 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 de 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σ, el identificador de Hampel declara Xi un valor atípico y lo reemplaza con Mi.

Cerca de los extremos de la 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