Contenido principal

Ajustar modelos polinomiales

Acerca de los modelos polinomiales

Los modelos polinomiales de las curvas vienen dados por

y=i=1n+1pixn+1i

donde n + 1 es el orden del polinomio, n es el grado del polinomio y 1 ≤ n ≤ 9. El orden indica el número de coeficientes que se van a ajustar y el grado indica la mayor potencia de la variable de predicción.

En esta guía se describen los polinomios refiriéndose a su grado. Por ejemplo, un polinomio de tercer grado (cúbico) viene dado por

γ=p1x3+p2x2+p3x+p4

A menudo, se usan polinomios cuando se necesita un modelo empírico sencillo. Puede usar el modelo polinomial para una interpolación o una extrapolación, o para caracterizar datos usando un ajuste global. Por ejemplo, la conversión de temperatura a tensión para un termopar tipo J en el rango de temperaturas de 0 a 760o queda descrita con un polinomio de séptimo grado.

Nota

Si no necesita un ajuste paramétrico global y desea maximizar la flexibilidad del ajuste, los polinomios por tramos pueden ser la mejor opción. Consulte Ajuste no paramétrico para obtener más información.

Las ventajas principales del ajuste polinomial son una flexibilidad razonable en el caso de datos que no sean demasiado complejos y que se trata de un ajuste lineal, lo que simplifica el proceso. La desventaja principal es que los ajustes de grado elevado se vuelven inestables. Además, los polinomios de cualquier grado proporcionan un buen ajuste dentro del rango de los datos, pero pueden divergir muchísimo fuera de dicho rango. Por lo tanto, hay que tener cuidado al extrapolar usando los polinomios.

Si lleva a cabo un ajuste con polinomios de grado elevado, el procedimiento de ajuste usa los valores de predicción como base de una matriz con valores muy elevados, lo que puede generar problemas de escala. Para gestionarlo, debería normalizar los datos (centrando la media en el cero y cambiando la escala de los datos para que la desviación estándar sea la unidad). Para normalizar los datos, marque la casilla de verificación Center and scale en la app Curve Fitter.

Ajustar modelos polinomiales de forma interactiva

  1. Abra la app Curve Fitter escribiendo curveFitter en la línea de comandos de MATLAB®. También puede hacer clic en Curve Fitter dentro del grupo Math, Statistics and Optimization de la pestaña Apps.

  2. En la app Curve Fitter, seleccione datos de curva o de superficie. En la pestaña Curve Fitter, en la sección Data, haga clic en Select Data. Seleccione las variables de datos en el cuadro de diálogo.

    • Si selecciona datos de curva (X data e Y data, o simplemente Y data contra un índice), la app Curve Fitter creará el ajuste de curva predeterminado, que es un ajuste Polynomial.

    • Si selecciona datos de superficie (X data, Y data y Z data), la app Curve Fitter creará el ajuste de superficie predeterminado, que es un ajuste Interpolant. Haga clic en la flecha de la sección Fit Type para abrir la galería y, luego, haga clic en Polynomial dentro del grupo Regression Models.

Para datos de curva, la app crea un ajuste Polynomial para X.

Fit Options pane for curve data polynomial fit

Para datos de superficie, la app crea un ajuste Polynomial para X e Y.

Fit Options pane for surface data polynomial fit

Puede especificar las siguientes opciones en el panel Fit Options:

  • El grado de las variables X e Y:

  • El método de ajuste lineal robusto de mínimos cuadrados que desea usar (Off, LAR o Bisquare). Para obtener más detalles, consulte el argumento nombre-valor Robust de la función fitoptions.

  • Establecer límites o excluir términos. Puede excluir cualquier término estableciendo sus límites en 0. Observe el panel Results para ver los términos del modelo, los valores de los coeficientes y las estadísticas de bondad de ajuste.

Sugerencia

Si las variables de datos tienen escalas muy diferentes, marque y desmarque la casilla de verificación Center and scale para ver la diferencia de ajuste. La app mostrará mensajes en el panel Results cuando escalar los datos pueda mejorar el ajuste.

Para ver un ejemplo en el que se comparan varios ajustes polinomiales, consulte Compare Fits in Curve Fitter App.

Ajustar polinomios usando la función fit

Este ejemplo muestra cómo usar la función fit para ajustar polinomios a los datos. Los sucesivos pasos permiten ajustar y representar curvas polinomiales y una superficie, especificar opciones de ajuste, obtener valores estadísticos de bondad de ajuste, calcular predicciones y mostrar intervalos de confianza.

El modelo de biblioteca de polinomios es un argumento de entrada para las funciones fit y fittype. Especifique el tipo de modelo poly seguido del grado de x (hasta 9) o de x e y (hasta 5). Por ejemplo, especifique una curva cuadrática con 'poly2' o una superficie cúbica con 'poly33'.

Crear y representar una curva polinomial cuadrática

Cargue algunos datos y ajuste un polinomio cuadrático. Especifique un polinomio cuadrático (o de segundo grado) con la cadena 'poly2'.

load census
fitpoly2 = fit(cdate,pop,'poly2')
fitpoly2 = 
     Linear model Poly2:
     fitpoly2(x) = p1*x^2 + p2*x + p3
     Coefficients (with 95% confidence bounds):
       p1 =    0.006541  (0.006124, 0.006958)
       p2 =      -23.51  (-25.09, -21.93)
       p3 =   2.113e+04  (1.964e+04, 2.262e+04)
% Plot the fit with the plot method.
plot(fitpoly2,cdate,pop)
% Move the legend to the top left corner.
legend('Location','NorthWest');

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Fitted curve.

Crear una curva cúbica

Ajuste un polinomio cúbico 'poly3'.

fitpoly3 = fit(cdate,pop,'poly3')
Warning: Ill-conditioned matrix produced while fitting. Results might be inaccurate. Try centering and scaling, or add points at non-repeated x values.
fitpoly3 = 
     Linear model Poly3:
     fitpoly3(x) = p1*x^3 + p2*x^2 + p3*x + p4
     Coefficients (with 95% confidence bounds):
       p1 =   3.855e-06  (-4.078e-06, 1.179e-05)
       p2 =    -0.01532  (-0.06031, 0.02967)
       p3 =       17.78  (-67.2, 102.8)
       p4 =       -4852  (-5.834e+04, 4.863e+04)
plot(fitpoly3,cdate,pop)

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Fitted curve.

Especificar las opciones de ajuste

El ajuste cúbico advierte que la ecuación está mal condicionada, por lo que debería intentar centrar y cambiar la escala de los datos mediante la opción 'Normalize'. Ajuste el polinomio cúbico con las opciones de centrado y cambio de escala y de ajuste robusto. Activar el ajuste robusto en 'on' es un atajo equivalente a 'Bisquare', el método predeterminado para el método de ajuste lineal robusto de mínimos cuadrados.

fit3 = fit(cdate, pop,'poly3','Normalize','on','Robust','on')
fit3 = 
     Linear model Poly3:
     fit3(x) = p1*x^3 + p2*x^2 + p3*x + p4
       where x is normalized by mean 1890 and std 62.05
     Coefficients (with 95% confidence bounds):
       p1 =     -0.4619  (-1.895, 0.9707)
       p2 =       25.01  (23.79, 26.22)
       p3 =       77.03  (74.37, 79.7)
       p4 =       62.81  (61.26, 64.37)
plot(fit3,cdate,pop)

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Fitted curve.

Para averiguar qué parámetros puede establecer para el modelo de biblioteca 'poly3', use la función fitoptions.

fitoptions poly3
ans = 
  llsqoptions with properties:

               Lower: []
               Upper: []
    ConstraintPoints: []
              TolCon: 1.0000e-06
              Robust: 'Off'
           Normalize: 'off'
             Exclude: []
             Weights: []
              Method: 'LinearLeastSquares'

Obtener valores estadísticos de bondad de ajuste

Especifique el argumento de salida 'gof' para obtener los valores estadísticos de bondad de ajuste para el ajuste polinomial cúbico.

[fit4, gof] = fit(cdate,pop,'poly3','Normalize','on');
gof
gof = struct with fields:
           sse: 149.7687
       rsquare: 0.9988
           dfe: 17
    adjrsquare: 0.9986
          rmse: 2.9682

Representar los valores residuales para evaluar el ajuste

Para representar los valores residuales, elija 'residuals' como tipo de gráfica en el método de representación.

plot(fit4,cdate, pop,'residuals');

Figure contains an axes object. The axes object with xlabel x contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Zero line.

Estudiar un ajuste más allá del rango de datos

De forma predeterminada, el ajuste se representa sobre el rango de datos. Para representar un ajuste sobre un rango distinto, establezca los límites del eje x antes de representar el ajuste. Por ejemplo, para ver los valores del ajuste extrapolados, establezca el límite superior del eje x en 2050.

plot(cdate,pop,'o');
xlim([1900, 2050]);
hold on
plot(fit4);
hold off

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 2 objects of type line. One or more of the lines displays its values using only markers This object represents Fitted curve.

Representar los límites de predicción

Para representar los límites de predicción, use 'predobs' o 'predfun' como tipo de gráfica.

plot(fit4,cdate,pop,'predobs')

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Fitted curve, Prediction bounds - 95%.

Represente los límites de predicción del polinomio cúbico hasta el año 2050.

plot(cdate,pop,'o');
xlim([1900, 2050])
hold on
plot(fit4,'predobs');
hold off

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Fitted curve, Prediction bounds - 95%.

Obtener intervalos de confianza en puntos de consulta nuevos

Evalúe el ajuste con algunos puntos de consulta nuevos.

cdateFuture = (2000:10:2020).';
popFuture = fit4( cdateFuture ) 
popFuture = 3×1

  276.9632
  305.4420
  335.5066

Calcule los intervalos de confianza del 95% respecto a la predicción de población futura mediante el método predint.

ci = predint(fit4,cdateFuture,0.95,'observation')
ci = 3×2

  267.8589  286.0674
  294.3070  316.5770
  321.5924  349.4208

Represente la predicción de población futura con intervalos de confianza frente al ajuste y los datos.

plot(cdate, pop, 'o');
xlim([1900, 2040])
hold on
plot(fit4)
h = errorbar(cdateFuture,popFuture,popFuture-ci(:,1),ci(:,2)-popFuture,'.');
hold off
legend('cdate v pop','poly3','prediction','Location','NorthWest')

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 3 objects of type line, errorbar. One or more of the lines displays its values using only markers These objects represent cdate v pop, poly3, prediction.

Ajustar y representar una superficie polinomial

Cargue algunos datos de superficie y ajuste un polinomio de cuarto grado en x e y.

load franke
fitsurface = fit([x,y],z, 'poly44','Normalize','on')
fitsurface = 
     Linear model Poly44:
     fitsurface(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3 
                    + p21*x^2*y + p12*x*y^2 + p03*y^3 + p40*x^4 + p31*x^3*y 
                    + p22*x^2*y^2 + p13*x*y^3 + p04*y^4
       where x is normalized by mean 1982 and std 868.6
       and where y is normalized by mean 0.4972 and std 0.2897
     Coefficients (with 95% confidence bounds):
       p00 =      0.3471  (0.3033, 0.3909)
       p10 =     -0.1502  (-0.1935, -0.107)
       p01 =     -0.4203  (-0.4637, -0.377)
       p20 =      0.2165  (0.1514, 0.2815)
       p11 =      0.1717  (0.1175, 0.2259)
       p02 =     0.03189  (-0.03351, 0.09729)
       p30 =     0.02778  (0.00749, 0.04806)
       p21 =     0.01501  (-0.002807, 0.03283)
       p12 =    -0.03659  (-0.05439, -0.01879)
       p03 =      0.1184  (0.09812, 0.1387)
       p40 =    -0.07661  (-0.09984, -0.05338)
       p31 =    -0.02487  (-0.04512, -0.004624)
       p22 =   0.0007464  (-0.01948, 0.02098)
       p13 =    -0.02962  (-0.04987, -0.009366)
       p04 =    -0.02399  (-0.0474, -0.0005797)
plot(fitsurface,[x,y],z)

Figure contains an axes object. The axes object contains 2 objects of type line, surface. One or more of the lines displays its values using only markers

Opciones de ajuste de modelos polinomiales

Todos los métodos de ajuste tienen las propiedades predeterminadas Normalize, Exclude, Weights y Method. Para ver un ejemplo, consulte Especificar opciones de ajuste en la línea de comandos.

Los modelos polinomiales aplican a la propiedad Method el valor LinearLeastSquares, así como las demás propiedades de opciones de ajuste que ilustra la siguiente tabla. Para obtener más información sobre todas las opciones de ajuste, consulte la página de referencia de fitoptions.

Propiedad

Descripción

Robust

Especifica el método de ajuste lineal robusto de mínimos cuadrados que desea usar. Los valores posibles son 'on', 'off', 'LAR' o 'Bisquare'. El valor predeterminado es 'off'.
'LAR' especifica el método de mínimo residual absoluto y 'Bisquare' especifica el método de ponderaciones bicuadradas. 'on' equivale a 'Bisquare', el método predeterminado.

Lower

Un vector de límites inferiores de los coeficientes que se van a ajustar. El valor predeterminado es un vector vacío, que indica que el ajuste no está restringido por límites inferiores. Si se especifican los límites, la longitud del vector debe ser igual al número de coeficientes. -Inf permite especificar límites inferiores individuales sin restricciones.

Upper

Un vector de límites superiores de los coeficientes que se van a ajustar. El valor predeterminado es un vector vacío, que indica que el ajuste no está restringido por límites superiores. Si se especifican los límites, la longitud del vector debe ser igual al número de coeficientes. Los límites superiores individuales sin restricciones se pueden especificar con Inf.

Definir términos polinomiales para los ajustes polinomiales de superficie

Puede controlar los términos que se van a incluir en el modelo polinomial de superficie especificando los grados de las entradas x e y. Si i es el grado en x y j es el grado en y, el grado total del polinomio es el máximo de i y j. El grado de x en cada término será menor o igual que i, y el grado de y en cada término será menor o igual que j. El máximo tanto para i como para j es cinco.

Por ejemplo:

poly21  Z = p00 + p10*x + p01*y + p20*x^2 + p11*x*y
poly13  Z = p00 + p10*x + p01*y + p11*x*y + p02*y^2 
                      + p12*x*y^2 + p03*y^3
poly55  Z = p00 + p10*x + p01*y +...+ p14*x*y^4 
                      + p05*y^5

Por ejemplo, si especifica un grado en x de 3 y un grado en y de 2, el nombre del modelo será poly32. Los términos del modelo siguen la forma de la siguiente tabla.

Grado del término012
01yy2
1xxyxy2
2x2x2yN/A
3x3N/AN/A

El grado total del polinomio no puede superar el máximo de i y j. En este ejemplo, los términos como x3y y x2y2 se excluyen porque sus grados suman más de 3. En ambos casos, el grado total es 4.

Consulte también

Apps

Funciones

Temas