Académique Documents
Professionnel Documents
Culture Documents
La regresin no lineal se da cuando tenemos que estimar Y a partir de una funcin del
tipo Y=f(X,Beta) + Error donde Beta son Beta1, Beta2,, Beta n. Unos datos X e Y se
relacionan mediante una funcin no lineal respecto a unos parmetros Beta
desconocidos. Y cmo obtenemos estos Beta desconocidos, a travs de mnimos
cuadrados o bien con otros mtodos como mxima verosilimilitud. Este clculo llevar
asociada su inferencia estadstica habitual. La funcin que asocia los pares de datos
(x1,y1), (x2, y2),, (yn, xn) ser una funcin conocida. Por eso esta tcnica es muy
utilizada en ciencias qumicas, geodinmica, donde ya se conoce la relacin que hay
entre las variables independientes y la variable dependiente pero es necesario realizar
modelos con los pares de datos disponibles de cara a obtener estimaciones.
Nuestra variable est relacionada con su regresora por un modelo racional con siete
parmetros Beta1, Beta2,, Beta7 y cbicas. Comenzamos el trabajo con los datos en
R:
15
16
1 foo = function(x,b1,b2,b3,b4,b5,b6,b7){
2 (b1 + b2*x + b3*x^2 + b4*x^3)/
3 (1 + b5*x + b6*x^2 + b7*x^3)}
El trabajo con R le vamos a llevar a cabo con la funcin nls del paquete stats. Pero
antes de crear un modelo de regresin no lineal tenemos que asignar unos valores
iniciales a los parmetros Beta de nuestra ecuacin. La regresin no lineal es un
proceso iterativo. Se parte de unos parmetros Beta iniciales, se modeliza y mediante
un proceso de optimizacin numrica se aproximan los parmetros seleccionados a los
valores ptimos. Si empleamos el algoritmo de Gauss-Newton partiramos de la mnima
suma de cuadrados de los residuos (modelo lineal) y tomaramos esta funcin como
funcin a minimizar algo que es posible debido a que al menos una derivada depende
de uno de los parmetros Beta (condicin de no linealidad). El proceso busca mnimos
locales de la funcin y que posteriormente habr de comprobar si son mnimos globales
hasta que el proceso llegara a converger (o no). Para obtener los valores iniciales es
necesario conocer los datos. En nuestro caso tenemos una divisin y 7 parmetros.
Vamos a observar la grfica con los datos. Para x=0 el valor de y ha de ser muy
prximo a 1200, luego ese es un buen inicio para b1. No podemos tener valores
negativos, luego los parmetros que multiplican tanto a x como a x^3 no deberan ser
los ms altos. Adems tenemos una divisin y luego los parmetros que estn en el
denominador no deberan ser muy altos ya que la funcin ha de ser creciente. Si
comenzamos a ejecutar:
Pgina 3 de 5
1 m1start=list(b1=1200,b2=100,b3=100,b4=1,b5=-0.1,b6=0.1,b7=-0.1)
Obtenemos el error Error en nlsModel(formula, mf, start, wts) : singular gradient matrix
at initial parameter estimates Este error se produce debido a que los valores iniciales
no son correctos para poder realizar el algoritmo inicial ya que no es posible encontrar
un primer gradiente. Podramos ir realizando diversas pruebas para encontrar los
valores iniciales e incluso elaborar una parrilla de datos. Tambin podemos emplear la
librera nls2:
1 #install.packages("nls2")
2 library(nls2)
3 m1<- nls2(y ~ foo(x,b1,b2,b3,b4,b5,b6,b7),
4 start=c(b1=1200,b2=100,b3=100,b4=1,b5=-0.1,b6=0.1,b7=-0.1),
control = nls.control(warnOnly = TRUE))
5
Con esta librera nls2 estamos empleando el algoritmo brute force que se emplea
para encontrar los valores iniciales. Es importante destacar que no se emplea para
realizar el modelo, slo para resolver la problemtica de los valores iniciales. En este
ejemplo concreto se sabe que los valores iniciales son:
1
2 B1=1000
B2=1000
3 B3=400
4 B4=40
5 B5=0.7
6 B6=0.3
7 B7=0.03
8
m.nls = nls(y ~ foo(x,b1,b2,b3,b4,b5,b6,b7),
9 start = c(b1 = 1000, b2 = 1000, b3 = 400, b4 = 40,
10 b5 = 0.7, b6 = 0.3, b7 = 0.03),trace=T)
11
En este caso ya hemos obtenido resultados. Con summary(m.nls) la salida obtenida es:
Parameters:
Estimate Std. Error t value Pr(>|t|)
b1 1.288e+03 4.665e+00 276.141 < 2e-16 ***
b2 1.491e+03 3.957e+01 37.682 < 2e-16 ***
b3 5.832e+02 2.870e+01 20.323 < 2e-16 ***
b4 7.542e+01 5.567e+00 13.546 2.55e-14 ***
b5 9.663e-01 3.133e-02 30.840 < 2e-16 ***
b6 3.980e-01 1.499e-02 26.559 < 2e-16 ***
b7 4.973e-02 6.584e-03 7.553 2.02e-08 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Grficamente el modelo ajusta bien. Podemos ver la suma del cuadrado de los errores
con la funcin deviance:
Pgina 5 de 5
1 deviance(m.nls)
2 [1] 5642.708
Tambin es necesario analizar si el modelo cumple las hiptesis de ser
estadsticamente vlido con el test F, homocedasticidad, distribucin normal de los
errores y errores independientes. El test F lo podemos realizar con un test ANOVA con
el ajuste por mnimos cuadrados frente a nuestro modelo de regresin no lineal. El
cdigo R que podemos emplear para realizar estas tareas es:
1
2 m.lm<- lm(y~x)
3 anova(m.nls,m.lm)
4
5 #Independencia de los residuos
6 plot(fitted(m.nls),residuals(m.nls),
xlab="Valores ajustados",ylab="Residuos")
7 abline(a=0,b=0,col="blue")
8
9 #Test de normalidad de los residuos
10 qqnorm(residuals(m.nls))
11 qqline(residuals(m.nls))
shapiro.test(residuals(m.nls))
12
13 #Test de Leneve
14 library(car)
15 levene.test(y,as.factor(x))
16
17 #Intervalos de confianza
18 confint(m.nls)
19
No entramos en ms detalles para no alargar la entrada. Pero ya disponemos de las
herramientas de R para comenzar a trabajar con este tipo de modelos. Tambin
recomiendo ver las posibilidades de la librera nlstools. Saludos.