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.

nlinfit

Regresión no lineal

Descripción

ejemplo

beta = nlinfit(X,Y,modelfun,beta0) devuelve un vector de coeficientes estimados para la regresión no lineal de las respuestas en los predictores en el uso del modelo especificado por .YXmodelfun Los coeficientes se estiman utilizando la estimación iterativa de mínimos cuadrados, con los valores iniciales especificados por .beta0

ejemplo

beta = nlinfit(X,Y,modelfun,beta0,options) se ajusta a la regresión no lineal utilizando los parámetros de control de algoritmo en la estructura.options Puede devolver cualquiera de los argumentos de salida en las sintaxis anteriores.

ejemplo

beta = nlinfit(___,Name,Value) utiliza opciones adicionales especificadas por uno o más argumentos de par nombre-valor. Por ejemplo, puede especificar ponderaciones de observación o un modelo de error no constante. Puede utilizar cualquiera de los argumentos de entrada de las sintaxis anteriores.

ejemplo

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(___) además devuelve los residuos, , el jacobiano de , , la matriz de varianza-covarianza estimada para los coeficientes estimados, , una estimación de la varianza del término de error, , y una estructura que contiene detalles sobre el modelo de error, .RmodelfunJCovBMSEErrorModelInfo

Ejemplos

contraer todo

Cargar datos de ejemplo.

S = load('reaction'); X = S.reactants; y = S.rate; beta0 = S.beta;

Ajuste el modelo Hougen-Watson a los datos de velocidad utilizando los valores iniciales de .beta0

beta = nlinfit(X,y,@hougen,beta0)
beta = 5×1

    1.2526
    0.0628
    0.0400
    0.1124
    1.1914

Generar datos de muestra a partir del modelo de regresión no lineal

<math display="block">
<mrow>
<mi>y</mi>
<mo>=</mo>
<msub>
<mrow>
<mi>b</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mrow>
<mi>b</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo></mo>
<mi>e</mi>
<mi>x</mi>
<mi>p</mi>
<mo stretchy="false">{</mo>
<mo>-</mo>
<msub>
<mrow>
<mi>b</mi>
</mrow>
<mrow>
<mn>3</mn>
</mrow>
</msub>
<mi>x</mi>
<mo stretchy="false">}</mo>
<mo>+</mo>
<mi>ϵ</mi>
</mrow>
</math>
Dónde
<math display="block">
<mrow>
<msub>
<mrow>
<mi>b</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</math>
,
<math display="block">
<mrow>
<msub>
<mrow>
<mi>b</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>b</mi>
</mrow>
<mrow>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</math>
son coeficientes, y el término de error se distribuye normalmente con la media 0 y la desviación estándar 0.1.

modelfun = @(b,x)(b(1)+b(2)*exp(-b(3)*x));  rng('default') % for reproducibility b = [1;3;2]; x = exprnd(2,100,1); y = modelfun(b,x) + normrnd(0,0.1,100,1);

Establezca opciones de ajuste robustas.

opts = statset('nlinfit'); opts.RobustWgtFun = 'bisquare';

Ajuste el modelo no lineal utilizando las opciones de ajuste robusto.

beta0 = [2;2;2]; beta = nlinfit(x,y,modelfun,beta0,opts)
beta = 3×1

    1.0041
    3.0997
    2.1483

Cargar datos de ejemplo.

S = load('reaction'); X = S.reactants; y = S.rate; beta0 = S.beta;

Especifique un vector de pesos de observación conocidos.

W = [8 2 1 6 12 9 12 10 10 12 2 10 8]';

Ajuste el modelo Hougen-Watson a los datos de velocidad utilizando los pesos de observación especificados.

[beta,R,J,CovB] = nlinfit(X,y,@hougen,beta0,'Weights',W); beta
beta = 5×1

    2.2068
    0.1077
    0.0766
    0.1818
    0.6516

Visualice los errores estándar del coeficiente.

sqrt(diag(CovB))
ans = 5×1

    2.5721
    0.1251
    0.0950
    0.2043
    0.7735

Cargar datos de ejemplo.

S = load('reaction'); X = S.reactants; y = S.rate; beta0 = S.beta;

Especifique un identificador de función para las ponderaciones de observación. La función acepta los valores ajustados del modelo como entrada y devuelve un vector de ponderaciones.

 a = 1; b = 1;  weights = @(yhat) 1./((a + b*abs(yhat)).^2);

Ajuste el modelo Hougen-Watson a los datos de velocidad utilizando la función de ponderaciones de observación especificada.

[beta,R,J,CovB] = nlinfit(X,y,@hougen,beta0,'Weights',weights); beta
beta = 5×1

    0.8308
    0.0409
    0.0251
    0.0801
    1.8261

Visualice los errores estándar del coeficiente.

sqrt(diag(CovB))
ans = 5×1

    0.5822
    0.0297
    0.0197
    0.0578
    1.2810

Cargar datos de ejemplo.

S = load('reaction'); X = S.reactants; y = S.rate; beta0 = S.beta;

Ajuste el modelo Hougen-Watson a los datos de velocidad utilizando el modelo de error combinado.

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(X,y,@hougen,beta0,'ErrorModel','combined'); beta
beta = 5×1

    1.2526
    0.0628
    0.0400
    0.1124
    1.1914

Mostrar la información del modelo de error.

ErrorModelInfo
ErrorModelInfo = struct with fields:
              ErrorModel: 'combined'
         ErrorParameters: [0.1517 5.6783e-08]
           ErrorVariance: [function_handle]
                     MSE: 1.6245
          ScheffeSimPred: 6
          WeightFunction: 0
            FixedWeights: 0
    RobustWeightFunction: 0

Argumentos de entrada

contraer todo

Variables predictoras para la función de regresión no lineal, especificadas como una matriz. Normalmente, es una matriz de diseño de valores predictores (variable independiente), con una fila para cada valor en , y una columna para cada predictor.XY Sin embargo, puede ser cualquier matriz que pueda aceptar.Xmodelfun

Tipos de datos: single | double

Valores de respuesta (variable dependiente) para ajustar la función de regresión no lineal, especificados como un vector con el mismo número de filas que .X

Tipos de datos: single | double

Función de modelo de regresión no lineal, especificada como identificador de función. debe aceptar dos argumentos de entrada, un vector de coeficiente y una matriz —en ese orden— y devolver un vector de valores de respuesta ajustados.modelfunX

Por ejemplo, para especificar la función de regresión no lineal, utilice el identificador de función .hougen@hougen

Tipos de datos: function_handle

Valores de coeficiente iniciales para el algoritmo de estimación de mínimos cuadrados, especificados como vector.

Nota

Los valores iniciales deficientes pueden dar lugar a una solución con un error residual grande.

Tipos de datos: single | double

Opciones de algoritmo de estimación, especificadas como una estructura que se crea mediante .statset Los siguientes parámetros son aplicables a .statsetnlinfit

Diferencia relativa para el cálculo del degradado de diferencia finito, especificado como un valor escalar positivo, o un vector del mismo tamaño que .beta Utilice un vector para especificar una diferencia relativa diferente para cada coeficiente.

Nivel de visualización de salida durante la estimación, especificado como uno de , , o .'off''iter''final' Si especifica , la salida se muestra en cada iteración.'iter' Si especifica , la salida se muestra después de la iteración final.'final'

Indicador de si se deben comprobar valores no válidos, como o desde la función de objetivo, especificada como o .NaNInf'on''off'

Número máximo de iteraciones para el algoritmo de estimación, especificado como un entero positivo. Las iteraciones continúan hasta que las estimaciones están dentro de la tolerancia de convergencia o se alcanza el número máximo de iteraciones especificado por.MaxIter

Función de peso para un ajuste robusto, especificado como un vector de caracteres válido, un escalar de cadena o un controlador de función.

Nota

debe tener valor cuando utilice ponderaciones de observación, .RobustWgtFun[]W

En la tabla siguiente se describen los posibles vectores de caracteres y escalares de cadena. Deje que denoten residuos normalizados y denoten pesos robustos.rw La función del indicador I[ ] es igual a 1 si la expresión es true, y 0 en caso contrario.xx

Función de pesoEcuaciónConstante de ajuste predeterminada
(predeterminado)'' Sin ajuste robusto
'andrews'

w=I[|r|<π]×sin(r)/r

1.339
'bisquare'

w=I[|r|<1]×(1r2)2

4.685
'cauchy'

w=1(1+r2)

2.385
'fair'

w=1(1+|r|)

1.400
'huber'

w=1max(1,|r|)

1.345
'logistic'

w=tanh(r)r

1.205
'talwar'

w=I[|r|<1]

2.795
'welsch'

w=exp{r2}

2.985

También puede especificar un identificador de función que acepte un vector de residuos normalizados como entrada y devuelva un vector de ponderaciones robustas como salida. Si utiliza un identificador de función, debe proporcionar una constante.Tune

Constante de ajuste para un empalme robusto, especificado como un valor escalar positivo. La constante de ajuste se utiliza para normalizar los residuos antes de aplicar una función de peso robusta. La constante de ajuste predeterminada depende de la función especificada por .RobustWgtFun

Si utiliza un identificador de función para especificar , debe especificar un valor para .RobustWgtFunTune

Tolerancia de terminación para la suma residual de cuadrados, especificada como un valor escalar positivo. Las iteraciones continúan hasta que las estimaciones están dentro de la tolerancia de convergencia o se alcanza el número máximo de iteraciones especificado por.MaxIter

Tolerancia de terminación en los coeficientes estimados, , especificada como un valor escalar positivo.beta Las iteraciones continúan hasta que las estimaciones están dentro de la tolerancia de convergencia o se alcanza el número máximo de iteraciones especificado por.MaxIter

Indicador de montaje robusto, especificado como o .'off''on'

Nota

se eliminará nado en una futura versión de software.Robust Utilícelo para un ajuste robusto.RobustWgtFun

Función de peso para un ajuste robusto, especificado como un vector de caracteres o un escalar de cadena que indica una función de peso, o un identificador de función. es válido sólo cuando tiene valor .WgtFunRobust'on'

Nota

se eliminará nado en una futura versión de software.WgtFun Utilícelo en su lugar.RobustWgtFun

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como .Name1,Value1,...,NameN,ValueN

Ejemplo: especifica un modelo de error proporcional, con el valor inicial 0,5 para la estimación del parámetro de error'ErrorModel','proportional','ErrorParameters',0.5

Forma del término de error, especificado como el par separado por comas que consta de y , , o que indica el modelo de error.'ErrorModel''constant''proportional''combined' Cada modelo define el error utilizando una variable media-cero estándar y unidad-varianza en combinación con componentes independientes: el valor de función y uno o dos parámetros y .efab

(predeterminado)'constant'y=f+ae
'proportional'y=f+bfe
'combined'y=f+(a+b|f|)e

El único modelo de error permitido cuando se utiliza es .Weights'constant'

Nota

debe tener valor cuando se utiliza un modelo de error distinto de .options.RobustWgtFun[]'constant'

Estimaciones iniciales para los parámetros del modelo de error en el , especificado como el par separado por comas que consta de un valor escalar o un vector de dos elementos.ErrorModel'ErrorParameters'

Modelo de errorParámetrosValores predeterminados
'constant' a1
'proportional'b1
'combined'a, b[1,1]

Por ejemplo, si tiene el valor , puede especificar el valor inicial 1 para y el valor inicial 2 para como se indica a continuación.'ErrorModel''combined'ab

Ejemplo: 'ErrorParameters',[1,2]

Sólo puede utilizar el modelo de error cuando utilice .'constant'Weights

Nota

debe tener valor cuando se utiliza un modelo de error distinto de .options.RobustWgtFun[]'constant'

Tipos de datos: double | single

Pesos de observación, especificados como el par separado por comas que consta de un vector de pesos positivos reales o un identificador de función.'Weights' Puede utilizar pesos de observación para reducir el peso de las observaciones que desea tener menos influencia en el modelo ajustado.

  • Si es un vector, debe tener el mismo tamaño que .WY

  • Si es un identificador de función, debe aceptar un vector de valores de respuesta predichos como entrada y devolver un vector de pesos positivos reales como salida.W

Nota

debe tener valor cuando se utilizan pesos de observación.options.RobustWgtFun[]

Tipos de datos: double | single | function_handle

Argumentos de salida

contraer todo

Coeficientes de regresión estimados, devueltos como vector. El número de elementos en es igual al número de elementos en .betabeta0

Dejar f(Xi,b) denotar la función no lineal especificada por , dondemodelfun xi son los predictores para la observación, 1,..., , yiiN b son los coeficientes de regresión. El vector de coeficientes devueltos minimiza la ecuación de mínimos cuadrados ponderados,beta

i=1Nwi[yif(xi,b)]2.

Para la regresión no lineal no ponderada, todos los términos de peso son iguales a 1.

Residuales para el modelo ajustado, devueltos como vector.

  • Si especifica ponderaciones de observación mediante el argumento par nombre-valor , contiene .WeightsRresiduos ponderados

  • Si especifica un modelo de error que no sea el argumento de par nombre-valor , ya no podrá interpretar como residuos de ajuste de modelo.'constant'ErrorModelR

Jacobiano del modelo de regresión no lineal, , devuelto como una matriz -por-, donde está el número de observaciones y es el número de coeficientes estimados.modelfunNpNp

  • Si especifica ponderaciones de observación mediante el argumento par nombre-valor , es el archivo .WeightsJfunción modelo ponderada Jacobian

  • Si especifica un modelo de error que no sea el argumento de par nombre-valor , ya no podrá interpretar como la función de modelo Jacobian.'constant'ErrorModelJ

Matriz de varianza-covarianza estimada para los coeficientes ajustados, devuelta como una matriz -por-, donde está el número de coeficientes estimados.betappp Si el modelo Jacobiano, , tiene el rango de columna completo, entonces , donde está el error cuadrado medio.JCovB = inv(J'*J)*MSEMSE

Error cuadrado medio (MSE) del modelo ajustado, devuelto como un valor escalar. MSE es una estimación de la varianza del término de error. Si el modelo Jacobiano, , tiene el rango completo de la columna, entonces , donde está el número de observaciones y es el número de coeficientes estimados.JMSE = (R'*R)/(N-p)Np

Información sobre el ajuste del modelo de error, devuelto como una estructura con los siguientes campos:

ErrorModelModelo de error elegido
ErrorParametersParámetros de error estimados
ErrorVarianceIdentificador de función que acepta una matriz -by- y devuelve un vector -by-1 de varianzas de error utilizando el modelo de error estimadoNpXN
MSEError medio al cuadrado
ScheffeSimPredParámetro Scheffé para intervalos de predicción simultáneos cuando se utiliza el modelo de error estimado
WeightFunctionLógico con valor si usó una función de peso personalizada anteriormente entruenlinfit
FixedWeightsLógico con valor si usó pesos fijos anteriormente entruenlinfit
RobustWeightFunctionLógico con valor si utilizó un ajuste robusto anteriormente entruenlinfit

Más acerca de

contraer todo

Residuos ponderados

A es un residuo multiplicado por la raíz cuadrada del peso de observación correspondiente.residual ponderado

Dados los coeficientes de regresión estimados, b, el residuo de observación esi

ri=yif(xi,b),

Dónde y yi es la respuesta observada y f(xi,b) es la respuesta ajustada a los predictores xi.

Cuando se ajusta una regresión no lineal ponderada con ponderaciones Wi, 1,..., , devuelve los residuos ponderados,iNnlinfit

ri*=wi(yif(xi,b)).

Función modelo ponderada jacobiana

Es el modelo no lineal jacobiano multiplicado por la raíz cuadrada de la matriz de peso de observación.función modelo ponderada Jacobian

Dados los coeficientes de regresión estimados, b, el modelo jacobino estimado, J,para la función no lineal f(xi,b) tiene elementos

Jij=f(xi,b)bj,

Dónde Bj es el th elemento dej b.

Cuando se ajusta una regresión no lineal ponderada con matriz de ponderaciones diagonales W,devuelve la matriz jacobiana ponderada,nlinfit

J*=W1/2J.

Sugerencias

  • Para generar estimaciones de errores en las predicciones, utilice los argumentos de salida opcionales , , , o como entradas en .RJCovBMSEnlpredci

  • Para generar estimaciones de errores en los coeficientes estimados, , utilice los argumentos de salida opcionales , , , o como entradas en .betaRJCovBMSEnlparci

  • Si utiliza la opción de ajuste robusto, debe utilizar —y podría necesitar— como entradas o para asegurarse de que los intervalos de confianza tienen en cuenta correctamente el ajuste robusto.RobustWgtFunCovBMSEnlpredcinlparci

Algoritmos

  • trata los valores en o como datos que faltan, e ignora las observaciones correspondientes.nlinfitNaNYmodelfun(beta0,X)

  • Para la estimación no robusta, utiliza el algoritmo levenberg-Marquardt de mínimos cuadrados no lineales.nlinfit[1]

  • Para una estimación robusta, utiliza un algoritmo iterativo de mínimos cuadrados reponderados ( , ).nlinfit[2][3] En cada iteración, las ponderaciones robustas se vuelven a calcular en función del residuo de cada observación de la iteración anterior. Estos pesos ponderan los valores atípicos, de modo que su influencia en el ajuste se reduce. Las iteraciones continúan hasta que convergen las ponderaciones.

  • Cuando se especifica un identificador de función para las ponderaciones de observación, las ponderaciones dependen del modelo ajustado. En este caso, utiliza un algoritmo iterativo de mínimos cuadrados generalizados para ajustarse al modelo de regresión no lineal.nlinfit

Referencias

[1] Seber, G. A. F., and C. J. Wild. Nonlinear Regression. Hoboken, NJ: Wiley-Interscience, 2003.

[2] DuMouchel, W. H., and F. L. O'Brien. “Integrating a Robust Option into a Multiple Regression Computing Environment.” Computer Science and Statistics: Proceedings of the 21st Symposium on the Interface. Alexandria, VA: American Statistical Association, 1989.

[3] Holland, P. W., and R. E. Welsch. “Robust Regression Using Iteratively Reweighted Least-Squares.” Communications in Statistics: Theory and Methods, A6, 1977, pp. 813–827.

Introducido antes de R2006a