Main Content

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 de Y en los predictores de X utilizando el modelo especificado por modelfun. Los coeficientes se calculan usando la estimación iterativa de mínimos cuadrados, con valores iniciales especificados por beta0.

ejemplo

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

ejemplo

beta = nlinfit(___,Name,Value) utiliza más opciones especificadas por uno o más argumentos de par nombre-valor. Por ejemplo, puede especificar ponderaciones de observaciones 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(___) devuelve, además, los valores residuales, R, la jacobiana de modelfun, J, la matriz estimada de varianzas-covarianzas de los coeficientes estimados, CovB, una estimación de la varianza del término de error, MSE, y una estructura que contiene detalles sobre el modelo de error, ErrorModelInfo.

Ejemplos

contraer todo

Cargue los datos de muestra.

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

Ajuste el modelo Hougen-Watson a los datos de tasa 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

Genere datos de muestra a partir del modelo de regresión no lineal y=b1+b2exp{-b3x}+ϵ, donde b1, b2 y b3 son coeficientes, y el término de error está distribuido normalmente con media 0 y 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 las opciones de ajuste robusto.

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

Cargue los datos de muestra.

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

Especifique un vector de ponderaciones conocidas de las observaciones.

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

Ajuste el modelo Hougen-Watson a los datos de tasa utilizando las ponderaciones de las observaciones 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

Muestre los errores estándar de los coeficientes.

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

    2.5721
    0.1251
    0.0950
    0.2043
    0.7735

Cargue los datos de muestra.

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

Especifique un identificador de función para ponderaciones de las observaciones. 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 tasa utilizando la función de las ponderaciones de las observaciones especificados.

[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

Muestre los errores estándar de los coeficientes.

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

    0.5822
    0.0297
    0.0197
    0.0578
    1.2810

Cargue los datos de muestra.

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

Ajuste el modelo Hougen-Watson a los datos de tasa 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

Muestre la información del modelo de error.

ErrorModelInfo
ErrorModelInfo = struct with fields:
              ErrorModel: 'combined'
         ErrorParameters: [0.1517 5.6783e-08]
           ErrorVariance: @(x)mse*(errorparam(1)+errorparam(2)*abs(model(beta,x))).^2
                     MSE: 1.6245
          ScheffeSimPred: 6
          WeightFunction: 0
            FixedWeights: 0
    RobustWeightFunction: 0

Argumentos de entrada

contraer todo

Variables predictoras de la función de regresión no lineal, especificadas como matriz. Típicamente, X es una matriz de diseño de valores predictores (variable independiente), con una fila para cada valor de Y y una columna para cada predictor. Sin embargo, X puede ser cualquier arreglo que modelfun pueda aceptar.

Tipos de datos: single | double

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

Tipos de datos: single | double

Función modelo de regresión no lineal, especificada como un identificador de función. modelfun debe aceptar dos argumentos de entrada, un vector de coeficientes y un arreglo X, en ese orden, y devolver un vector de valores de respuesta ajustados.

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

Tipos de datos: function_handle

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

Nota

Unos valores iniciales inadecuados pueden conducir a una solución con un gran error residual.

Tipos de datos: single | double

Opciones del algoritmo de estimación, especificadas como estructura que se crea utilizando statset. Los siguientes parámetros statset se pueden aplicar a nlinfit.

Diferencia relativa para el cálculo de un gradiente de diferencia finita, especificada como valor de escalar positivo o un vector del mismo tamaño que beta. Utilice un vector para especificar una diferencia relativa distinta para cada coeficiente.

Nivel de visualización de salida durante una estimación, especificado como 'off', 'iter' o 'final'. Si especifica 'iter', la salida se muestra en cada iteración. Si especifica 'final', la salida se muestra tras la última iteración.

Indicador de si se deben comprobar los valores no válidos como NaN o Inf desde la función objetivo, especificado como 'on' u 'off'.

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

Función de ponderación para un ajuste robusto, especificada como un vector de caracteres válido, un escalar de cadena o un identificador de función.

Nota

RobustWgtFun debe tener el valor [] cuando utilice ponderaciones de las observaciones, W.

La siguiente tabla describe los vectores de caracteres y los escalares de cadenas posibles. En esta, r indica valores residuales normalizados y w indica ponderaciones robustas. La función de indicador I[x] es igual a 1 si la expresión x es verdadera y, en caso contrario, 0.

Función de ponderaciónEcuaciónConstante de ajuste predeterminada
'' (valor 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

De manera alternativa, especifique un identificador de función que acepte un vector de valores residuales normalizados como entrada y que devuelva un vector de ponderaciones robustas como salida. Si utiliza un identificador de función, debe proporcionar una constante Tune.

Constante de ajuste para ajuste robusto, especificada como valor de escalar positivo. La constante de ajuste se utiliza para normalizar valores residuales antes de aplicar una función de ponderación robusta. La constante de ajuste predeterminada depende de la función especificada por RobustWgtFun.

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

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

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

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de otros argumentos, pero el orden de los pares no importa.

En versiones anteriores a R2021a, use comas para separar cada nombre y valor y encierre Name entre comillas.

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

Forma de un término de error, especificada como el par separado por comas que consta de 'ErrorModel' y 'constant', 'proportional', o 'combined' indicando el modelo de error. Cada modelo define el error usando una variable estándar media-cero y unidad-varianza e en combinación con componentes independientes: el valor de la función f y uno o dos parámetros a y b.

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

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

Nota

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

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

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

Por ejemplo, si 'ErrorModel' tiene el valor 'combined', puede especificar el valor inicial 1 para a y el valor inicial 2 para b de la siguiente manera.

Ejemplo: 'ErrorParameters',[1,2]

Solo puede usar el modelo de error 'constant' cuando utilice Weights.

Nota

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

Tipos de datos: double | single

Ponderaciones de las observaciones, especificados como el par separado por comas que consta de 'Weights' y un vector de ponderaciones reales positivas o un identificador de función. Puede utilizar ponderaciones de las observaciones para reducir la ponderación de las observaciones que desea que tengan una menor influencia en el modelo ajustado.

  • Si W es un vector, entonces debe tener el mismo tamaño que Y.

  • Si W es un identificador de función, debe aceptar un vector de valores de respuesta pronosticada como entrada y devolver un vector de ponderaciones reales positivas como salida.

Nota

options.RobustWgtFun debe tener el valor [] cuando utilice ponderaciones de las observaciones.

Tipos de datos: double | single | function_handle

Argumentos de salida

contraer todo

Coeficientes de regresión estimados, devueltos como un vector. El número de elementos de beta es igual al número de elementos de beta0.

Deje que f(Xi,b) indique la función no lineal especificada por modelfun, donde xi son los predictores para la observación i, i = 1,...,N y b son los coeficientes de regresión. El vector de coeficientes devuelto en beta minimiza la ecuación ponderada de mínimos cuadrados,

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

En el caso de una regresión no lineal no ponderada, todos los términos de ponderación son iguales a 1.

Valores residuales para el modelo ajustado, devueltos como vector.

  • Si especifica ponderaciones de las observaciones usando el argumento de par nombre-valor Weights, R contiene valores residuales ponderados.

  • Si especifica un modelo de error distinto de 'constant' utilizando el argumento de par nombre-valor ErrorModel, ya no puede interpretar R como valores residuales del ajuste del modelo.

Jacobiana del modelo de regresión no lineal, modelfun, devuelta como una matriz N por p, donde N es el número de observaciones y p es el número de coeficientes estimados.

  • Si especifica ponderaciones de las observaciones usando el argumento de par nombre-valor Weights, J es la jacobiana de la función ponderada modelo.

  • Si especifica un modelo de error distinto de 'constant' utilizando el argumento de par nombre-valor ErrorModel, ya no puede interpretar J como la jacobiana de la función modelo.

La matriz estimada de varianzas-covarianzas para los coeficientes ajustados, beta, devuelta como una matriz de p por p, donde p es el número de coeficientes estimados. Si la jacobiana del modelo, J, tiene un rango de columna completo, CovB = inv(J'*J)*MSE, donde MSE es el error cuadrático medio.

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

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

ErrorModelModelo de error elegido
ErrorParametersParámetros de error estimado
ErrorVarianceIdentificador de función que acepta una matriz de N por p, X, y devuelve un vector de N por 1 de varianzas de error utilizando el modelo de error estimado
MSEError cuadrático medio
ScheffeSimPredParámetro de Scheffé para intervalos de predicción simultánea cuando se usa el modelo de error estimado
WeightFunctionLógica con valor true si utilizó una función de ponderación personalizada previamente en nlinfit
FixedWeightsLógicas con valor true si utilizó ponderaciones fijadas previamente en nlinfit
RobustWeightFunctionLógica con valor true si utilizó ajuste robusto previamente en nlinfit

Más acerca de

contraer todo

Valores residuales ponderados

Un valor residual ponderado es un valor residual multiplicado por la raíz cuadrada de la ponderación de la observación correspondiente.

Dados los coeficientes de regresión estimados, b,, el valor residual de la observación i es

ri=yif(xi,b),

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

Cuando ajusta una regresión no lineal ponderada con ponderaciones wi, i = 1,...,N, nlinfit devuelve los valores residuales ponderados,

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

Jacobiana de la función modelo ponderada

La jacobiana de la función modelo ponderada es la jacobiana del modelo no lineal multiplicada por la raíz cuadrada de la matriz de las ponderaciones de las observaciones.

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

Jij=f(xi,b)bj,

, donde bj es el j-ésimo elemento de b.

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

J*=W1/2J.

Sugerencias

  • Para producir estimaciones de error sobre predicciones, utilice los argumentos de salida opcionales R, J, CovB o MSE como entradas para nlpredci.

  • Para producir estimaciones de error sobre coeficientes estimados, beta, utilice los argumentos de salida opcionales R, J, CovB o MSE como entradas para nlparci.

  • Si utiliza la opción de ajuste robusto, RobustWgtFun, debe utilizar CovB, y puede que necesite MSE, como entradas para nlpredci o nlparci para garantizar que los intervalos de confianza tienen en cuenta el ajuste robusto de manera adecuada.

Algoritmos

  • nlinfit trata los valores NaN de Y o modelfun(beta0,X) como datos faltantes e ignora las observaciones correspondientes.

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

  • Para una estimación robusta, nlinfit utiliza el algoritmo de Iteratively Reweighted Least Squares ([2], [3]). En cada iteración, las ponderaciones robustas se recalculan de acuerdo con cada valor residual de la observación a partir de la iteración previa. Estas ponderaciones reducen los valores atípicos, para que su influencia en el ajuste disminuya. Las iteraciones continúan hasta que las ponderaciones convergen.

  • Cuando especifica un identificador de función para ponderaciones de las observaciones, las ponderaciones dependen del modelo ajustado. En este caso, nlinfit utiliza un algoritmo iterativo de cuadrados mínimos generalizado para ajustar el modelo de regresión no lineal.

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.

Historial de versiones

Introducido antes de R2006a