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.

Elimine los valores atípicos mediante el identificador de Hampel

En este ejemplo se muestra una implementación ingenua del procedimiento utilizado para detectar y quitar valores atípicos.hampel La función real es mucho más rápida.

Genere una señal aleatoria, que contenga 24 muestras.x Restablezca el generador de números aleatorios para obtener resultados reproducibles.

rng default  lx = 24; x = randn(1,lx);

Genere una ventana de observación alrededor de cada elemento de.x Tome = 2 vecinos a cada lado de la muestra.k La ventana móvil que los resultados tiene una longitud de

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

k = 2;  iLo = (1:lx)-k; iHi = (1:lx)+k;

Truncar la ventana para que la función calcule medianas de segmentos más pequeños a medida que alcanza los bordes de la señal.

iLo(iLo<1) = 1; iHi(iHi>lx) = lx;

Registre la mediana de cada ventana circundante. Encuentre la mediana de la desviación absoluta de cada elemento con respecto a la mediana de la ventana.

for j = 1:lx     w = x(iLo(j):iHi(j));     medj = median(w);     mmed(j) = medj;     mmad(j) = median(abs(w-medj)); end

Escale la desviación absoluta mediana con

<math display="block">
<mrow>
<mrow>
<mfrac>
<mrow>
<mrow>
<mstyle displaystyle="true" scriptlevel="0">
<mrow>
<mn>1</mn>
</mrow>
</mstyle>
</mrow>
</mrow>
<mrow>
<mstyle displaystyle="true" scriptlevel="0">
<mrow>
<msqrt>
<mrow>
<mn>2</mn>
</mrow>
</msqrt>
<mspace width="0.16666666666666666em"></mspace>
<msup>
<mrow>
<mrow>
<mrow>
<mstyle mathvariant="normal">
<mrow>
<mi>e</mi>
<mi>r</mi>
<mi>f</mi>
</mrow>
</mstyle>
</mrow>
</mrow>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo stretchy="false">(</mo>
<mrow>
<mn>1</mn>
<mo>/</mo>
<mn>2</mn>
</mrow>
<mo stretchy="false">)</mo>
</mrow>
</mstyle>
</mrow>
</mfrac>
</mrow>
<mo></mo>
<mn>1</mn>
<mo>.</mo>
<mn>4</mn>
<mn>8</mn>
<mn>2</mn>
<mn>6</mn>
</mrow>
</math>

para obtener una estimación de la desviación estándar de una distribución normal.

sd = mmad/(erfinv(1/2)*sqrt(2));

Encuentre las muestras que difieren de la mediana en más de = 2 desviaciones estándar.nd Reemplace cada uno de esos valores atípicos por el valor de la mediana de la ventana circundante. Esta es la esencia del algoritmo de Hampel.

nd = 2; ki = abs(x-mmed) > nd*sd;  yu = x; yu(ki) = mmed(ki);

Utilice la función para calcular la señal filtrada y anotar los valores atípicos.hampel Superponer los valores filtrados calculados en este ejemplo.

hampel(x,k,nd)  hold on plot(yu,'o','HandleVisibility','off') hold off

Consulte también