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.

Ajuste programático

Funciones para modelos polinomiales de MATLAB

Dos funciones de MATLAB® pueden modelar sus datos con un polinomio.

Funciones de ajuste polinomial

Función

Descripción

polyfit

polyfit(x,y,n) halla los coeficientes de un polinomio p(x) de grado n que se ajusta a los datos de y minimizando la suma de los cuadrados de las desviaciones de los datos del modelo (ajuste de mínimos cuadrados).

polyval

polyval(p,x) devuelve el valor de un polinomio de grado n determinado por polyfit y evaluado en x.

Si está intentando modelar una situación física, siempre es importante considerar si un modelo de un orden específico es significativo en su situación.

Modelo lineal con términos no polinómicos

En este ejemplo se muestra cómo ajustar los datos con un modelo lineal que contiene términos no polinómicos.

Cuando una función polinómica no produce un modelo satisfactorio de los datos, puede intentar utilizar un modelo lineal con términos no polinómicos. Por ejemplo, considere la siguiente función que es lineal en los parámetros a0, a1 y a2, pero no lineal en los datos t:

y=a0+a1e-t+a2te-t.

Puede calcular los coeficientes desconocidos a0, a1 y a2 construyendo y resolviendo un conjunto de ecuaciones simultáneas y resolviendo los parámetros. La sintaxis siguiente logra esto formando una matriz de diseño, donde cada columna representa una variable que se utiliza para predecir la respuesta (un término en el modelo) y cada fila corresponde a una observación de esas variables.

Introduzca t e y como vectores columna.

t = [0 0.3 0.8 1.1 1.6 2.3]';
y = [0.6 0.67 1.01 1.35 1.47 1.25]';

Forme la matriz de diseño.

X = [ones(size(t))  exp(-t)  t.*exp(-t)];

Calcule los coeficientes del modelo.

a = X\y
a = 3×1

    1.3983
   -0.8860
    0.3085

Por lo tanto, el modelo de los datos viene dado por

y=1.3983-0.8860e-t+0.3085te-t.

Ahora evalúe el modelo en puntos espaciados regularmente y represente el modelo con los datos originales.

T = (0:0.1:2.5)';
Y = [ones(size(T))  exp(-T)  T.*exp(-T)]*a;
plot(T,Y,'-',t,y,'o'), grid on
title('Plot of Model and Original Data')

Figure contains an axes object. The axes object with title Plot of Model and Original Data contains 2 objects of type line. One or more of the lines displays its values using only markers

Regresión múltiple

En este ejemplo se muestra cómo utilizar la regresión múltiple para modelar datos que son una función de más de una variable predictora.

Cuando y es una función de más de una variable predictora, las ecuaciones de matriz que expresan las relaciones entre las variables deben expandirse para dar cabida a los datos adicionales. Esto se llama regresión múltiple.

Mida una cantidad y para varios valores de x1 y x2. Almacene estos valores en vectores x1, x2, e y, respectivamente.

x1 = [.2 .5 .6 .8 1.0 1.1]';
x2 = [.1 .3 .4 .9 1.1 1.4]';
y  = [.17 .26 .28 .23 .27 .24]';

Un modelo de estos datos es de la forma

y=a0+a1x1+a2x2.

La regresión múltiple resuelve los coeficientes desconocidos a0, a1, y a2 minimizando la suma de los cuadrados de las desviaciones de los datos del modelo (ajuste de mínimos cuadrados).

Construya y resuelva el conjunto de ecuaciones simultáneas formando una matriz de diseño, X.

X = [ones(size(x1))  x1  x2];

Resuelva los parámetros mediante el operador de barra invertida.

a = X\y
a = 3×1

    0.1018
    0.4844
   -0.2847

El modelo de ajuste de mínimos cuadrados de los datos es

y=0.1018+0.4844x1-0.2847x2.

Para validar el modelo, busque el máximo del valor absoluto de la desviación de los datos del modelo.

Y = X*a;
MaxErr = max(abs(Y - y))
MaxErr = 0.0038

Este valor es mucho menor que cualquiera de los valores de datos, lo que indica que este modelo sigue con precisión los datos.

Ajuste programático

En este ejemplo se muestra cómo utilizar las funciones de MATLAB para:

Cargue los datos del censo de muestra de census.mat, que contiene datos de población de EE. UU. de los años 1790 a 1990.

load census

Esto añade las dos variables siguientes al área de trabajo de MATLAB.

  • cdate es un vector columna que contiene los años 1790 a 1990 en incrementos de 10.

  • pop es un vector columna con los números de población de EE. UU. correspondientes a cada año en cdate.

Represente los datos.

plot(cdate,pop,'ro')
title('U.S. Population from 1790 to 1990')

Figure contains an axes object. The axes object with title U.S. Population from 1790 to 1990 contains a line object which displays its values using only markers.

La gráfica muestra un patrón sólido, que indica una alta correlación entre las variables.

Calcular coeficientes de correlación

En esta porción del ejemplo, determinará la correlación estadística entre las variables cdate y pop para justificar el modelado de datos. Para obtener más información acerca de los coeficientes de correlación, consulte Correlación lineal.

Calcule la matriz correlación-coeficiente.

corrcoef(cdate,pop)
ans = 2×2

    1.0000    0.9597
    0.9597    1.0000

Los elementos en la diagonal de la matriz representan la correlación perfecta de cada variable consigo misma y son iguales a 1. Los elementos fuera de la diagonal están muy cerca de 1, lo que indica que hay una fuerte correlación estadística entre las variables cdate y pop.

Ajustar un polinomio a los datos

En esta parte del ejemplo se aplican las funciones polyfit y polyval de MATLAB para modelar los datos.

Calcule los parámetros de ajuste.

[p,ErrorEst] = polyfit(cdate,pop,2);

Evalúe el ajuste.

pop_fit = polyval(p,cdate,ErrorEst);

Represente los datos y el ajuste.

plot(cdate,pop_fit,'-',cdate,pop,'+');
title('U.S. Population from 1790 to 1990')
legend('Polynomial Model','Data','Location','NorthWest');
xlabel('Census Year');
ylabel('Population (millions)');

Figure contains an axes object. The axes object with title U.S. Population from 1790 to 1990, xlabel Census Year, ylabel Population (millions) contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Polynomial Model, Data.

La gráfica muestra que el ajuste polinomial cuadrático proporciona una buena aproximación a los datos.

Calcule los valores residuales para este ajuste.

res = pop - pop_fit;
figure, plot(cdate,res,'+')
title('Residuals for the Quadratic Polynomial Model')

Figure contains an axes object. The axes object with title Residuals for the Quadratic Polynomial Model contains a line object which displays its values using only markers.

Observe que la gráfica de los valores residuales muestra un patrón, lo que indica que un polinomio de segundo grado podría no ser adecuado para modelar estos datos.

Representar y calcular límites de confianza

Los límites de confianza son intervalos de confianza para una respuesta pronosticada. La anchura del intervalo indica el grado de certeza del ajuste.

En esta parte del ejemplo se aplican las funciones polyfit y polyval a los datos de muestra census para producir límites de confianza de un modelo polinomial de segundo orden.

El código siguiente utiliza un intervalo de ±2Δ, que corresponde a un intervalo de confianza del 95% para muestras grandes.

Evalúe el ajuste y la estimación del error de predicción (delta).

[pop_fit,delta] = polyval(p,cdate,ErrorEst);

Represente los datos, el ajuste y los límites de confianza.

plot(cdate,pop,'+',...
     cdate,pop_fit,'g-',...
     cdate,pop_fit+2*delta,'r:',...
     cdate,pop_fit-2*delta,'r:'); 
xlabel('Census Year');
ylabel('Population (millions)');
title('Quadratic Polynomial Fit with Confidence Bounds')
grid on

Figure contains an axes object. The axes object with title Quadratic Polynomial Fit with Confidence Bounds, xlabel Census Year, ylabel Population (millions) contains 4 objects of type line. One or more of the lines displays its values using only markers

El intervalo del 95% indica que tiene un 95% de probabilidad de que una nueva observación caiga dentro de los límites.