Main Content

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.

smooth

Suavizar datos de respuesta

Descripción

ejemplo

yy = smooth(y) suaviza los datos de respuesta en el vector columna y con un filtro de promedio móvil.

A continuación se encuentran los primeros elementos de yy.

yy(1) = y(1)
yy(2) = (y(1) + y(2) + y(3))/3
yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5))/5
yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5
...
Dada la forma en que smooth identifica los extremos de línea, el resultado difiere del que devuelve la función filter.

yy = smooth(y,span) establece el lapso del promedio móvil en span.

yy = smooth(y,method) suaviza los datos de y con el método especificado por method y el span predeterminado.

ejemplo

yy = smooth(y,span,method) establece el lapso de method en span.

yy = smooth(y,'sgolay',degree) utiliza el método Savitzky-Golay con el grado polinomial especificado por degree.

yy = smooth(y,span,'sgolay',degree) utiliza el número de puntos de datos especificados por span en el cálculo Savitzky-Golay. span debe ser impar y degree debe ser menor que span.

ejemplo

yy = smooth(x,y,___) especifica valores para la variable independiente x. Puede utilizar esta sintaxis con cualquiera de los argumentos de las sintaxis anteriores.

gpuarrayYY = smooth(gpuarrayY,___) realiza la operación en una GPU con datos gpuArray. Puede utilizar datos de respuesta gpuArray con todas las sintaxis anteriores. Esta sintaxis requiere Parallel Computing Toolbox™.

gpuarrayYY = smooth(gpuarrayX,gpuarrayY,___) realiza la operación en una GPU con datos de entrada gpuArray. Esta sintaxis requiere Parallel Computing Toolbox.

Nota

Solo se recomienda utilizar entradas gpuArrayx e y con la función smooth, si utiliza el método predeterminado, 'moving'. Utilizar datos de GPU con otros métodos no ofrece ninguna ventaja de rendimiento.

Ejemplos

contraer todo

Suavice datos por índices lineales y por cada columna de forma independiente con un filtro de promedio móvil. Represente y compare los resultados.

Cargue los datos en count.dat. El arreglo count de 24 por 3 contiene recuentos de tráfico en tres intersecciones para cada hora del día.

load count.dat

Suponga que estos datos son de una única intersección en tres días consecutivos. Suavizar todos los datos juntos indicaría entonces el ciclo del flujo de tráfico general en la intersección. Utilice un filtro de promedio móvil con un lapso de cinco horas para suavizar todos los datos de forma simultánea (por índice lineal).

c = smooth(count(:));
C1 = reshape(c,24,3);

Sin embargo, en realidad los datos son de tres intersecciones distintas. Así, suavizar por columnas ofrece una representación más relevante del tráfico de un día en las tres intersecciones. Utilice el mismo filtro de promedio móvil para suavizar cada columna de datos de forma independiente.

C2 = zeros(24,3);
for I = 1:3
    C2(:,I) = smooth(count(:,I));
end

Represente los datos originales y los datos suavizados por índice lineal y por cada columna de forma independiente. A continuación, represente la diferencia entre los dos conjuntos de datos representados. Los dos métodos ofrecen resultados distintos junto a los extremos de línea.

subplot(3,1,1)
plot(count,':');
hold on
plot(C1,'-');
title('Smooth C1 (All Data)')

subplot(3,1,2)
plot(count,':');
hold on
plot(C2,'-');
title('Smooth C2 (Each Column)')

subplot(3,1,3)
plot(C2 - C1,'o-')
title('Difference C2 - C1')

Represente y compare los resultados de datos suavizados con los métodos loess y rloess. Luego determine qué método es menos sensible a los valores atípicos.

Cree datos ruidosos con dos valores atípicos.

x = (0:0.1:15)';
y = sin(x) + 0.5*(rand(size(x))-0.5);
y([90,110]) = 3;

Suavice los datos con los métodos loess y rloess. Utilice un lapso del 10% del número total de puntos de datos.

yy1 = smooth(x,y,0.1,'loess');
yy2 = smooth(x,y,0.1,'rloess');

Represente los datos originales y suavizados. Los valores atípicos tienen menos influencia con el método robusto rloess.

subplot(2,1,1)
plot(x,y,'b.',x,yy1,'r-')
set(gca,'YLim',[-1.5 3.5])
legend('Original data','Smoothed data using ''loess''',...
       'Location','NW')
   
subplot(2,1,2)
plot(x,y,'b.',x,yy2,'r-')
set(gca,'YLim',[-1.5 3.5])
legend('Original data','Smoothed data using ''rloess''',...
       'Location','NW')

Argumentos de entrada

contraer todo

Datos que suavizar, especificados como vector columna.

Si sus datos contienen NaN y no especifica x, sus datos se tratan como no uniformes y se utiliza el método de suavizado 'lowess'.

Tipos de datos: single | double

Número de puntos de datos para calcular el valor suavizado, especificado como valor entero o como valor escalar en el rango (0,1) que denota una fracción del número total de puntos de datos.

Si utiliza el promedio móvil o métodos Savitzky-Golay, el número de puntos de datos para calcular el valor suavizado debe ser un entero impar. Si especifica span como número par o como fracción que resulta en un número par de puntos de datos, span se reduce automáticamente en 1.

Ejemplo: 7; 0.6

Método de suavizado para suavizar los datos de respuesta, especificado como uno de los siguientes métodos.

Método

Descripción

'moving' (valor predeterminado)

Promedio móvil. Un filtro lowpass con coeficientes de filtro iguales al recíproco del lapso.

'lowess'

Regresión local con mínimos cuadrados lineales ponderados y un modelo polinomial de primer grado.

'loess'

Regresión local con mínimos cuadrados lineales ponderados y un modelo polinomial de segundo grado.

'sgolay'

Filtro Savitzky-Golay. Un promedio móvil generalizado con coeficientes de filtro determinados por una regresión lineal de mínimos cuadrados no ponderada y un modelo polinomial de determinado grado (de forma predeterminada es 2). El método puede aceptar datos de predictor no uniformes.

'rlowess'

Una versión robusta de 'lowess' que asigna una ponderación menor a los valores atípicos en la regresión. El método asigna una ponderación cero a los datos fuera de seis desviaciones absolutas de la media.

'rloess'

Una versión robusta de 'loess' que asigna una ponderación menor a los valores atípicos en la regresión. El método asigna una ponderación cero a los datos fuera de seis desviaciones absolutas de la media.

Grado polinomial para el modelo utilizado en el método Savitzky-Golay, especificado como valor escalar. degree debe ser menor que span.

Ejemplo: 3

Variable independiente para datos de respuesta y especificada como un vector columna. Si no proporciona x, los métodos que requieren x dan por supuesto que x = 1:length(y). Especifique datos x cuando y no esté ordenada o espaciada de manera uniforme. Si x no es uniforme y no especifica ningún method, se utiliza lowess. Si especifica un método de suavizado que requiere que se ordene x, la función ordena automáticamente los datos de x.

Tipos de datos: single | double

Datos que suavizar, especificados como vector columna gpuArray.

Tipos de datos: single | double

Datos de entrada para los datos de respuesta gpuarrayY, especificados como vector columna gpuArray. Si no proporciona gpuarrayX, los métodos que requieren gpuarrayX dan por supuesto que gpuarrayX = 1:length(y). Especifique datos gpuarrayX cuando los datos no estén espaciados u ordenados de manera uniforme. Si los datos de gpuarrayX no son uniformes y no especifica el método de suavizado, se utiliza 'lowess'. Si especifica un método de suavizado que requiere que se ordene gpuarrayX, la función ordena los datos de gpuarrayX de forma automática.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Datos suavizados, devueltos como vector columna.

Datos suavizados, devueltos como vector columna gpuArray.

Sugerencias

  • Para obtener más opciones de suavizado de datos, incluidos la mediana móvil y los métodos de Gauss, consulte smoothdata.

  • Puede generar un ajuste suavizado para sus datos con un spline de suavizado. Para obtener más información, consulte fit.

Capacidades ampliadas

Introducido antes de R2006a