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.

Flujo de trabajo de regresión no lineal

En este ejemplo se muestra cómo realizar un flujo de trabajo de regresión no lineal típico: importar datos, ajustar una regresión no lineal, probar su calidad, modificarla para mejorar la calidad y realizar predicciones basadas en el modelo.

Paso 1. Prepare los datos.

Cargue los datos.reaction

load reaction

Examine los datos en el área de trabajo. es una matriz con 13 filas y 3 columnas.reactants Cada fila corresponde a una observación, y cada columna corresponde a una variable. Los nombres de las variables están en:xn

xn
xn = 3x10 char array
    'Hydrogen  '
    'n-Pentane '
    'Isopentane'

Del mismo modo, es un vector de 13 respuestas, con el nombre de variable en:rateyn

yn
yn =  'Reaction Rate' 

El archivo contiene un modelo no lineal de velocidad de reacción como una función de las tres variables predictoras.hougen.m Para un vector 5-D

<math display="block">
<mrow>
<mi>b</mi>
</mrow>
</math>
y 3-D Vector
<math display="block">
<mrow>
<mi>x</mi>
</mrow>
</math>
,

<math display="block">
<mrow>
<mi>h</mi>
<mi>o</mi>
<mi>u</mi>
<mi>g</mi>
<mi>e</mi>
<mi>n</mi>
<mo stretchy="false">(</mo>
<mi>b</mi>
<mo>,</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mfrac>
<mrow>
<mi>b</mi>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
<mo>-</mo>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>3</mn>
<mo stretchy="false">)</mo>
<mo>/</mo>
<mi>b</mi>
<mo stretchy="false">(</mo>
<mn>5</mn>
<mo stretchy="false">)</mo>
</mrow>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mi>b</mi>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>b</mi>
<mo stretchy="false">(</mo>
<mn>3</mn>
<mo stretchy="false">)</mo>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>b</mi>
<mo stretchy="false">(</mo>
<mn>4</mn>
<mo stretchy="false">)</mo>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>3</mn>
<mo stretchy="false">)</mo>
</mrow>
</mfrac>
</mrow>
</math>

Como punto de partida para la solución, tomar como un vector de los.b

beta0 = ones(5,1);

Paso 2. Ajuste un modelo no lineal a los datos.

mdl = fitnlm(reactants,...     rate,@hougen,beta0)
mdl =  Nonlinear regression model:     y ~ hougen(b,X)  Estimated Coefficients:           Estimate       SE       tStat     pValue            ________    ________    ______    _______      b1      1.2526     0.86702    1.4447    0.18654     b2    0.062776    0.043562    1.4411    0.18753     b3    0.040048    0.030885    1.2967    0.23089     b4     0.11242    0.075158    1.4957    0.17309     b5      1.1914     0.83671    1.4239     0.1923   Number of observations: 13, Error degrees of freedom: 8 Root Mean Squared Error: 0.193 R-Squared: 0.999,  Adjusted R-Squared 0.998 F-statistic vs. zero model: 3.91e+03, p-value = 2.54e-13 

Paso 3. Examine la calidad del modelo.

El error medio cuadrado de la raíz es bastante bajo comparado al rango de los valores observados.

[mdl.RMSE min(rate) max(rate)]
ans = 1×3

    0.1933    0.0200   14.3900

Examine un trazado de residuos.

plotResiduals(mdl)

El modelo parece adecuado para los datos.

Examine un trazado de diagnóstico para buscar valores atípicos.

plotDiagnostics(mdl,'cookd')

La observación parece estar fuera de línea.6

Paso 4. Quite el outlier.

Quite el valor atípico del ajuste utilizando el par nombre-valor.Exclude

mdl1 = fitnlm(reactants,...     rate,@hougen,ones(5,1),'Exclude',6)
mdl1 =  Nonlinear regression model:     y ~ hougen(b,X)  Estimated Coefficients:           Estimate       SE       tStat     pValue            ________    ________    ______    _______      b1       0.619      0.4552    1.3598    0.21605     b2    0.030377    0.023061    1.3172    0.22924     b3    0.018927     0.01574    1.2024    0.26828     b4    0.053411    0.041084       1.3    0.23476     b5      2.4125      1.7903    1.3475     0.2198   Number of observations: 12, Error degrees of freedom: 7 Root Mean Squared Error: 0.198 R-Squared: 0.999,  Adjusted R-Squared 0.998 F-statistic vs. zero model: 2.67e+03, p-value = 2.54e-11 

Los coeficientes del modelo cambiaron bastante de aquellos en.mdl

Paso 5. Examine los diagramas de sectores de ambos modelos.

Para ver el efecto de cada predictor en la respuesta, haga una gráfica de sector utilizando.plotSlice(mdl)

plotSlice(mdl)  

plotSlice(mdl1)  

Las parcelas se ven muy similares, con límites de confianza ligeramente más amplios para.mdl1 Esta diferencia es comprensible, ya que hay un punto de datos menos en el ajuste, que representa más de 7% menos observaciones.

Paso 6. Predecir nuevos datos.

Cree algunos datos nuevos y pronostique la respuesta de ambos modelos.

Xnew =  [200,200,200;100,200,100;500,50,5]; [ypred yci] = predict(mdl,Xnew)
ypred = 3×1

    1.8762
    6.2793
    1.6718

yci = 3×2

    1.6283    2.1242
    5.9789    6.5797
    1.5589    1.7846

[ypred1 yci1] = predict(mdl1,Xnew)
ypred1 = 3×1

    1.8984
    6.2555
    1.6594

yci1 = 3×2

    1.6260    2.1708
    5.9323    6.5787
    1.5345    1.7843

Aunque los coeficientes del modelo son diferentes, las predicciones son casi idénticas.