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.

Regresión no lineal

¿Qué son los modelos de regresión no lineal paramétrico?

Los modelos no lineales paramétricos representan la relación entre una variable de respuesta continua y una o más variables predictoras continuas en la forma

= ( , ) + ,yfXβε

Dónde

  • es un vector-por-1 de observaciones de la variable de respuesta.yn

  • es cualquier función de y que evalúa cada fila de junto con el vector para calcular la predicción de la fila correspondiente de.fXβXβy

  • es una-por-matriz de predictores, con una fila por cada observación, y una columna para cada predictor.Xnp

  • es un vector-by-1 de parámetros desconocidos que se estima.βp

  • es un vector-by-1 de perturbaciones aleatorias independientes y distribuidas idénticamente.εn

Por el contrario, los modelos no paramétricos no intentan caracterizar la relación entre los predictores y la respuesta con los parámetros del modelo. Las descripciones son a menudo gráficas, como en el caso de.Árboles de decisión

intenta encontrar valores de los parámetros que minimizan las diferencias de media cuadrada entre las respuestas observadas y las predicciones del modelo (,).fitnlmβyfXβ Para ello, necesita un valor inicial antes de modificar de forma iterativa el vector a un vector con un error medio cuadrado mínimo.beta0β

Preparar datos

Para comenzar a ajustar una regresión, coloque los datos en un formulario que las funciones de ajuste esperan. Todas las técnicas de regresión comienzan con datos de entrada en una matriz y datos de respuesta en un vector independiente, o datos de entrada en una tabla o conjunto de DataSet y datos de respuesta como una columna en.Xytbltbl Cada fila de los datos de entrada representa una observación. Cada columna representa un predictor (variable).

Para una matriz de tabla o DataSet, indique la variable de respuesta con el par nombre-valor:tbl'ResponseVar'

mdl = fitlm(tbl,'ResponseVar','BloodPressure');

La variable de respuesta es la última columna de forma predeterminada.

No puede utilizar predictores para la regresión no lineal.Categórico Un predictor categórico es aquel que toma valores de un conjunto fijo de posibilidades.

Represente los datos que faltan como para datos de entrada y datos de respuesta.NaN

Matriz de DataSet para datos de entrada y respuesta

Por ejemplo, para crear una matriz de DataSet a partir de una hoja de cálculo:Excel®

ds = dataset('XLSFile','hospital.xls',...     'ReadObsNames',true);

Para crear una matriz de DataSet a partir de variables de espacio de trabajo:

load carsmall ds = dataset(Weight,Model_Year,MPG);

Tabla para datos de entrada y respuesta

Para crear una tabla a partir de una hoja de cálculo:Excel

tbl = readtable('hospital.xls',...     'ReadRowNames',true);

Para crear una tabla a partir de variables de espacio de trabajo:

load carsmall tbl = table(Weight,Model_Year,MPG);

Matriz numérica para datos de entrada y Vector numérico para respuesta

Por ejemplo, para crear matrices numéricas a partir de variables de espacio de trabajo:

load carsmall X = [Weight Horsepower Cylinders Model_Year]; y = MPG;

Para crear matrices numéricas a partir de una hoja de cálculo:Excel

[X, Xnames] = xlsread('hospital.xls'); y = X(:,4); % response y is systolic pressure X(:,4) = []; % remove y from the X matrix

Tenga en cuenta que las entradas no numéricas, como, no aparecen en.sexX

Representar el modelo no lineal

Hay varias maneras de representar un modelo no lineal. Usa lo que sea más conveniente.

El modelo no lineal es una entrada necesaria para, en la entrada.fitnlmmodelfun

asume que la función de respuesta (,) es suave en los parámetros.fitnlmfXββ Si la función no es fluida, puede fallar al proporcionar estimaciones de parámetros óptimas.fitnlm

Función Handle a función anónima o archivo de función

La función Handle @modelfunacepta una matriz de vector y matriz, tabla o DataSet.(b,x)bx El identificador de función debe devolver un vector con el mismo número de filas que.fx Por ejemplo, el archivo de función calculahougen.m

hougen(b,x)=b(1)x(2)x(3)/b(5)1+b(2)x(1)+b(3)x(2)+b(4)x(3).

Examine la función escribiendo en la línea de comando.type hougenMATLAB®

function yhat = hougen(beta,x) %HOUGEN Hougen-Watson model for reaction kinetics. %   YHAT = HOUGEN(BETA,X) gives the predicted values of the %   reaction rate, YHAT, as a function of the vector of  %   parameters, BETA, and the matrix of data, X. %   BETA must have 5 elements and X must have three %   columns. % %   The model form is: %   y = (b1*x2 - x3/b5)./(1+b2*x1+b3*x2+b4*x3) % %   Reference: %      [1]  Bates, Douglas, and Watts, Donald, "Nonlinear %      Regression Analysis and Its Applications", Wiley %      1988 p. 271-272.  %   Copyright 1993-2004 The MathWorks, Inc.  %   B.A. Jones 1-06-95.  b1 = beta(1); b2 = beta(2); b3 = beta(3); b4 = beta(4); b5 = beta(5);  x1 = x(:,1); x2 = x(:,2); x3 = x(:,3);  yhat = (b1*x2 - x3/b5)./(1+b2*x1+b3*x2+b4*x3);

Puede escribir una función anónima que realice el mismo cálculo que.hougen.m

modelfun = @(b,x)(b(1)*x(:,2) - x(:,3)/b(5))./... (1 + b(2)*x(:,1) + b(3)*x(:,2) + b(4)*x(:,3));

Representación de texto de fórmula

Para datos en una matriz y respuesta en un vector:Xy

  • Representar la fórmula utilizando como el primer predictor (columna) en, como el segundo predictor, etc.'x1'X'x2'

  • Representar el vector de parámetros para optimizar como,, etc.'b1''b2'

  • Escribe la fórmula como.'y ~ (mathematical expressions)'

Por ejemplo, para representar la respuesta a los datos de reacción:

modelfun = 'y ~ (b1*x2 - x3/b5)/(1 + b2*x1 + b3*x2 + b4*x3)';

Para los datos de una matriz de tabla o DataSet, puede utilizar fórmulas representadas como nombres de variables de la matriz de tabla o DataSet. Coloque el nombre de la variable de respuesta a la izquierda de la fórmula, seguida de a, seguida de un vector de caracteres que represente la fórmula de respuesta.~

En este ejemplo se muestra cómo crear un vector de caracteres para representar la respuesta a los datos que se encuentran en una matriz de conjunto de datos.reaction

  1. Cargue los datos.reaction

    load reaction
  2. Coloque los datos en una matriz de DataSet, donde cada variable tiene un nombre dado en o.xnyn

    ds = dataset({reactants,xn(1,:),xn(2,:),xn(3,:)},...     {rate,yn});
  3. Examine la primera fila de la matriz del conjunto de datos.

    ds(1,:)  ans =       Hydrogen    n_Pentane    Isopentane    ReactionRate     470         300          10            8.55 
  4. Escriba la fórmula con los nombres de la matriz del conjunto de datos.hougen

    modelfun = ['ReactionRate ~ (b1*n_Pentane - Isopentane/b5) /'... ' (1 + Hydrogen*b2 + n_Pentane*b3 + Isopentane*b4)']  modelfun = ReactionRate ~ (b1*n_Pentane - Isopentane/b5) / ...      (1 + Hydrogen*b2 + n_Pentane*b3 + Isopentane*b4)

Elija vector inicial beta0

El vector inicial para las iteraciones de ajuste, puede influir en gran medida en la calidad del modelo ajustado resultante. da la dimensionalidad del problema, lo que significa que necesita la longitud correcta.beta0beta0 Una buena elección de conduce a un modelo rápido y confiable, mientras que una mala elección puede conducir a un cálculo largo, o a un modelo inadecuado.beta0

Es difícil dar consejos sobre la elección de un bien.beta0 Si usted cree que ciertos componentes del vector deben ser positivos o negativos, establezca su para tener esas características.beta0 Si conoce el valor aproximado de otros componentes, incluirlos en.beta0 Sin embargo, si no conoce buenos valores, pruebe con un vector aleatorio, como

beta0 = randn(nVars,1); % or beta0 = 10*rand(nVars,1);

Ajustar modelo no lineal a datos

La sintaxis para ajustar un modelo de regresión no lineal mediante una tabla o una matriz de DataSet estbl

mdl = fitnlm(tbl,modelfun,beta0)

La sintaxis para ajustar un modelo de regresión no lineal mediante una matriz numérica y un vector de respuesta numérico esXy

mdl = fitnlm(X,y,modelfun,beta0)

Para obtener información sobre la representación de los parámetros de entrada, vea y.Preparar datosRepresentar el modelo no linealElija vector inicial beta0

asume que la variable de respuesta en una tabla o conjunto de datos es la última columna.fitnlmtbl Para cambiarlo, utilice el par nombre-valor para nombrar la columna de respuesta.ResponseVar

Examine la calidad y ajuste el modelo no lineal ajustado

Hay diagramas de diagnóstico para ayudarle a examinar la calidad de un modelo. ofrece una variedad de parcelas, incluyendo el apalancamiento y las parcelas de distancia de Cook. da la diferencia entre el modelo ajustado y los datos.plotDiagnostics(mdl)plotResiduals(mdl)

También hay propiedades de MDL que se relacionan con la calidad del modelo. da el error cuadrcular medio entre los datos y el modelo ajustado. proporciona los residuos crudos. contiene varios campos, como leverage y CooksDistance, que pueden ayudarle a identificar observaciones especialmente interesantes.mdl.RMSEmdl.Residuals.Rawmdl.Diagnostics

En este ejemplo se muestra cómo examinar un modelo no lineal ajustado mediante trazados de diagnóstico, residuales y sectores.

Cargue los datos de ejemplo.

load reaction

Cree un modelo no lineal de velocidad como una función del uso de la función.reactantshougen.m

beta0 = ones(5,1); mdl = fitnlm(reactants,...     rate,@hougen,beta0);

Haga una gráfica de apalancamiento de los datos y el modelo.

plotDiagnostics(mdl)

Hay un punto que tiene un alto apalancamiento. Localice el punto.

[~,maxl] = max(mdl.Diagnostics.Leverage)
maxl = 6 

Examine un trazado de residuos.

plotResiduals(mdl,'fitted')

Nada se destaca como un outlier.

Utilice una gráfica de sectores para mostrar el efecto de cada predictor en el modelo.

plotSlice(mdl)

Puede arrastrar las líneas verticales en azul discontinua para ver el efecto de un cambio en un predictor en la respuesta. Por ejemplo, arrastre la línea x2 a la derecha y observe que la pendiente de la línea x3 cambia.

Predecir o simular respuestas mediante un modelo no lineal

En este ejemplo se muestra cómo usar los métodos, y para predecir y simular respuestas a nuevos datos.PredecirFEVALAleatorio

Genere aleatoriamente una muestra a partir de una distribución de Cauchy.

rng('default') X = rand(100,1); X = tan(pi*X - pi/2);

Genere la respuesta según el modelo y agregue ruido a la respuesta.y = b1*(pi /2 + atan((x - b2) / b3))

modelfun = @(b,x) b(1) * ...     (pi/2 + atan((x - b(2))/b(3))); y = modelfun([12 5 10],X) + randn(100,1);

Ajuste un modelo a partir de los parámetros arbitrarios = [1, 1, 1].b

beta0 = [1 1 1]; % An arbitrary guess mdl = fitnlm(X,y,modelfun,beta0)
mdl =  Nonlinear regression model:     y ~ b1*(pi/2 + atan((x - b2)/b3))  Estimated Coefficients:           Estimate      SE       tStat       pValue             ________    _______    ______    __________      b1     12.082     0.80028    15.097    3.3151e-27     b2     5.0603      1.0825    4.6747    9.5063e-06     b3       9.64     0.46499    20.732    2.0382e-37   Number of observations: 100, Error degrees of freedom: 97 Root Mean Squared Error: 1.02 R-Squared: 0.92,  Adjusted R-Squared 0.918 F-statistic vs. zero model: 6.45e+03, p-value = 1.72e-111 

Los valores ajustados están dentro de unos pocos por ciento de los parámetros [12, 5, 10].

Examine el ajuste.

plotSlice(mdl)

Predecir

El método predice las respuestas de la media y, si se solicita, da límites de confianza.Predecir Encuentre los valores de respuesta pronosticados y los intervalos de confianza previstos sobre la respuesta en los valores [-15; 5; 12].X

Xnew = [-15;5;12]; [ynew,ynewci] = predict(mdl,Xnew)
ynew = 3×1

    5.4122
   18.9022
   26.5161

ynewci = 3×2

    4.8233    6.0010
   18.4555   19.3490
   25.0170   28.0151

Los intervalos de confianza se reflejan en el gráfico de sectores.

FEVAL

El método predice las respuestas de la media. suele ser más cómodo de usar que predecir cuando se construye un modelo a partir de una matriz de conjunto de datos.FEVALFEVAL

Cree el modelo no lineal a partir de una matriz de DataSet.

ds = dataset({X,'X'},{y,'y'}); mdl2 = fitnlm(ds,modelfun,beta0);

Busque las respuestas del modelo previstas (CDF) en valores [-15; 5; 12].X

Xnew = [-15;5;12]; ynew = feval(mdl2,Xnew)
ynew = 3×1

    5.4122
   18.9022
   26.5161

Aleatorio

El método simula nuevos valores de respuesta aleatoria, igual a la predicción media más una perturbación aleatoria con la misma varianza que los datos de entrenamiento.Aleatorio

Xnew = [-15;5;12]; ysim = random(mdl,Xnew)
ysim = 3×1

    6.0505
   19.0893
   25.4647

Vuelva a ejecutar el método aleatorio. Los resultados cambian.

ysim = random(mdl,Xnew)
ysim = 3×1

    6.3813
   19.2157
   26.6541