Está en la página 1de 12

Suavizado de datos y detección de valores atípicos

El suavizado de datos se refiere a técnicas para eliminar ruidos o comportamientos no deseados en los
datos, mientras que la detección de valores atípicos identifica los puntos de datos que son significativamente
diferentes del resto de los datos.

Métodos de ventana en movimiento

Los métodos de ventana móvil son formas de procesar los datos en lotes más pequeños a la vez, normalmente
para representar estadísticamente una vecindad de puntos en los datos. La media móvil es una técnica de
suavizado de datos común que desliza una ventana a lo largo de los datos, calculando la media de los puntos
dentro de cada ventana. Esto puede ayudar a eliminar variaciones insignificantes de un punto de datos a otro.

Por ejemplo, considere las mediciones de velocidad del viento tomadas cada minuto durante aproximadamente
3 horas. Utilice la función movmean con un tamaño de ventana de 5 minutos para suavizar las ráfagas de viento
de alta velocidad.

load windData.mat
mins = 1:length(speed);
window = 5;
meanspeed = movmean(speed,window);
plot(mins,speed,mins,meanspeed)
axis tight
legend('Velocidad del viento medido','Velocidad del viento promedio sobre una ventana de 5 min'
xlabel('Tiempo')
ylabel('Velocidad')

1
Del mismo modo, puede calcular la velocidad mediana del viento sobre una ventana deslizante utilizando la
función movmedian

medianspeed = movmedian(speed,window);
plot(mins,speed,mins,medianspeed)
axis tight
legend('Velocidad del viento medido','Mediana de la velocidad del viento sobre una ventana de 5
xlabel('Timpo')
ylabel('Velocidad')

No todos los datos son adecuados para suavizar con un método de ventana móvil. Por ejemplo, cree una señal
sinusoidal con ruido aleatorio inyectado.

t = 1:0.2:15;
A = sin(2*pi*t) + cos(2*pi*0.5*t);
Anoise = A + 0.5*rand(1,length(t));
plot(t,A,t,Anoise)
axis tight
legend('Original Data','Noisy Data','location','best')

2
Utilice una media móvil con un tamaño de ventana de 3 para suavizar los datos ruidosos.

window = 3;
Amean = movmean(Anoise,window);
plot(t,A,t,Amean)
axis tight
legend('Original Data','Moving Mean - Window Size 3')

3
La media móvil logra la forma general de los datos, pero no captura los valles (mínimos locales) con mucha
precisión. Dado que los puntos del valle están rodeados por dos vecinos más grandes en cada ventana, la
media no es una muy buena aproximación a esos puntos. Si hace que el tamaño de la ventana sea mayor,
la media elimina los picos más cortos por completo. Para este tipo de datos, puede considerar técnicas de
suavizado alternativas.

Amean = movmean(Anoise,5);
plot(t,A,t,Amean)
axis tight
legend('Original Data','Moving Mean - Window Size 5','location','best')

4
Métodos de suavizado comunes
La función smoothdata proporciona varias opciones de suavizado, como el método Savitzky-Golay, que
es una técnica de suavizado popular utilizada en el procesamiento de señales. De forma predeterminada,
smoothdata elige el tamaño de ventana que mejor se ajuste para el método en función de los datos.

Utilice el método Savitzky-Golay para suavizar la señal ruidosa Anoise.

[Asgolay,window] = smoothdata(Anoise,'sgolay');
plot(t,A,t,Asgolay)
axis tight
legend('Original Data','Savitzky-Golay','location','best')

5
window

window = 3

El método LOWESS robusto es otro método de suavizado que es particularmente útil cuando valores atípicos
están presentes en los datos además del ruido. Inyecte un valor atípico en los datos ruidosos y utilice LOWESS
robusto para suavizar los datos, lo que elimina el valor atípico.

Anoise(36) = 20;
Arlowess = smoothdata(Anoise,'rlowess',5);
plot(t,Anoise,t,Arlowess)
axis tight
legend('Noisy Data','Robust Lowess')

6
La detección de valores atípicos
Los valores atípicos de los datos pueden sesgar significativamente los resultados de procesamiento de datos y
otras cantidades calculadas. Por ejemplo, si intenta suavizar los datos que contienen valores atípicos con una
mediana móvil, puede obtener picos o valles engañosos.

Amedian = smoothdata(Anoise,'movmedian');
plot(t,Anoise,t,Amedian)
axis tight
legend('Noisy Data','Moving Median')

7
La función isoutlier devuelve un valor lógico 1 cuando se detecta un valor atípico.Compruebe el índice y el
valor del valor atípico en.Anoise

TF = isoutlier(Anoise);
ind = find(TF)

ind = 36

Aoutlier = Anoise(ind)

Aoutlier = 20

Puede utilizar la función para reemplazar los valores atípicos de los datos especificando un método de
relleno.filloutliers Por ejemplo, rellene el valor atípico con el valor de su vecino inmediatamente a la
derecha.Anoise

Afill = filloutliers(Anoise,'next');
plot(t,Anoise,t,Afill)
axis tight
legend('Noisy Data with Outlier','Noisy Data with Filled Outlier')

8
Datos no uniformes
No todos los datos constan de puntos igualmente espaciados, lo que puede afectar a los métodos de
procesamiento de datos. Cree un vector datetime que contenga tiempos de muestreo irregulares para los datos
en Airreg. El vector time representa muestras tomadas cada minuto durante los primeros 30 minutos, luego
cada hora durante dos días.

t0 = datetime(2014,1,1,1,1,1);
timeminutes = sort(t0 + minutes(1:30));
timehours = t0 + hours(1:48);
time = [timeminutes timehours];
Airreg = rand(1,length(time));
plot(time,Airreg)
axis tight

9
Por defecto, smoothdata suaviza con respecto a los enteros igualmente espaciados, en este
caso,.1,2,...,78. Dado que las marcas de tiempo enteros no se coordinan con el muestreo de los puntos en
Airreg, la primera media hora de datos sigue apareciendo ruidosa después del suavizado.

Adefault = smoothdata(Airreg,'movmean',3);
plot(time,Airreg,time,Adefault)
axis tight
legend('Original Data','Smoothed Data with Default Sample Points')

10
Muchas funciones de procesamiento de datos en MATLAB®, incluyendo, smoothdata, movmean y
filloutliers, le permiten proporcionar puntos de muestra, asegurando que los datos se procesan en
relación con sus unidades de muestreo y frecuencias. Para eliminar la variación de alta frecuencia en la
primera media hora de los datos Airreg, utilice la opción 'SamplePoints' con las marcas de tiempo en
time.

Asamplepoints = smoothdata(Airreg,'movmean',hours(3),'SamplePoints',time);
plot(time,Airreg,time,Asamplepoints)
axis tight
legend('Original Data','Smoothed Data with Sample Points')

11
12

También podría gustarte