Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión 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 media 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 de la media 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 media 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 media 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 media 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')

Figure contains 3 axes objects. Axes object 1 with title Smooth C1 (All Data) contains 6 objects of type line. Axes object 2 with title Smooth C2 (Each Column) contains 6 objects of type line. Axes object 3 with title Difference C2 - C1 contains 3 objects of type line.

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

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Original data, Smoothed data using 'loess'. Axes object 2 contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Original data, Smoothed data using 'rloess'.

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 la media 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)

Media 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. Una media móvil generalizada 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.

Tipos de datos: char | string

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 usted no especifica method, se utiliza lowess. Si especifica un método de suavizado que requiere que se ordene x, la función ordena los datos de x de forma automática.

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

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

Funcionalidad alternativa

También puede suavizar datos usando la función smoothdata de MATLAB®. Con la excepción de la compatibilidad con arreglos de GPU, smoothdata incluye todas las funcionalidades de la función smooth y tiene algunas ventajas. A diferencia de smooth, la función smoothdata admite lo siguiente:

  • Matrices, tablas y horarios

  • Métodos de mediana móvil y de Gauss

  • Opción para especificar cómo se tratan los valores NaN

  • Opción para sustituir la matriz original por los datos suavizados o adjuntar los datos suavizados a la matriz original

  • Arreglos altos, generación de código C y C++ y entornos basados en procesos

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a