require(pacman) pacman::p_load(easynls, easyreg, knitr, htmlTable, readr, dplyr, openxlsx, flextable)
2024-06-26
require(pacman) pacman::p_load(easynls, easyreg, knitr, htmlTable, readr, dplyr, openxlsx, flextable)
setwd('~/ACTIVIDAD DE TITULACION/REGRESION NO LINEAL')
g <- gc(reset = T) rm(list = ls()) options(scipen = 999, warn = -1)
## Libreria “easyreg”
Los datos corresponden al crecimiento acumulado (altura) de una especie de planta desde el día 1 hasta el día 16. El objetivo es modelar la evolución del crecimiento a través de la altura acumulada en función del tiempo. La altura se expresa en milímetros.
df<-as.data.frame(read.xlsx("regnolineal.xlsx", sheet=1))
glimpse(df)
flextable(df)
plot(df)
Nota: La forma o tendencia de la curva es del tipo sigmoidea
Probar ajustar a los siguientes modelos, disponibles en los paquetes easynls y easyreg de R:
mod_Gomp<-nls(y~SSgompertz(x,a,b,c), data = df) summary(mod_Gomp)
a=723; b=12; c=0.6
regplot(df, model=10, start=c(723, 12, 0.6), digits=2, position=8, xlab="x", ylab="y")
nlsplot(df, model=10, start=c(723, 12, 0.6))
mod_Log<-nls(y~SSlogis(x,a,b,c), data=df) summary(mod_Log)
a= 703; b= 6.5; c=1.5
regplot(df, model=7, start=c(703, 6.5, 1.5), digits=2, position=8, xlab="x", ylab="y")
nlsplot(df, model=10, start=c(723, 12, 0.6))
mod_Deg <-nls(y~SSasymp(x,a,b,c), data=df) summary(mod_Deg)
a= 1122; -186; -2
regplot(df, model=12, start=c(1122,-186,-2), digits=2, position=8, xlab="x", ylab="y")
nlsplot(df, model=12, start=c(1122,-186,-2))
mod_Lac <-nls(y~SSlogis(x,a,b,c), data=df) summary(mod_Lac)
a= 703; b= 6.5; c= 1.5
regplot(df, model=11, start=c(703, 6.5, 1.5), digits=2, position=8, xlab="x", ylab="y")
nlsplot(df, model=11, start=c(703, 6.5, 1.5))
mod_micmen <- nls(y~SSmicmen(x,a,b), data=df) summary(mod_micmen)
a= 7382; b= 124
MM<-nls(y~(a*x)/(b+x),start=list(a=7382, b=124), data=df) summary(MM)
AIC(MM)
Modelos <-c("Gompertz", "Logístico", "Degradación ruminal", "Curva de lactación", "Michaelis-Menten") AIC <-c ("152.72", "146.40", "176.63", "148.35", "181.75") tabla <- data.frame(Modelos, AIC) flextable(tabla)
De los cuatro modelos sigmoideos evaluados, el que presentó menor AIC (criterio de información de Akaike) fue el LOGISTICO.
Se ajusta, entonces a ese modelo, quedando:
\[y=702,87(1+84,99(e^{0,69x}))^{-1}\]
rm(list = ls())
Se presentan datos de la relación entre dosis de antibióticos y % de daño de una enfermedad bacteriana.
df<-as.data.frame(read.xlsx("regnolineal.xlsx", sheet=2))
flextable(df)
plot(df)
Nota: Se ajustará a una curva de tipo exponencial
Linealizar el modelo exponencial
\[y=a*e^{bx} / log\] \[log{(y)}=log(a)+bx\]
model <- lm(log(Daño) ~ Dosis, data=df) alpha <- exp(coef(model))[1] beta <- coef(model)[2]
start <- list(alpha = alpha, beta = beta) start
a = 99.94; b = -0.04
a = 99,94 y b = -0,04
regplot(df, model=6, start=c(99.94, -0.04), digits=2, position=8, xlab="Dosis", ylab="Daño") nlsplot(df, model=6, start=c(99.94, -0.04))
\[y=100,9778*e^{-0,0443x}\]
rm(list = ls())
Pruebe ajustar los datos de la tabla a:
1.- Función lineal \((y=a+bx)\)
2.- Función parabólica \((y=a+bx+cx^2)\)
3.- Función exponencial \((y=ab^x)\)
df<-as.data.frame(read.xlsx("regnolineal.xlsx", sheet=3))
plot(df)
regplot(df, model=1, digits=2, position=8, xlab="X", ylab="Y") nlsplot(df, model=1)
regplot(df, model=2, digits=2, position=8, xlab="X", ylab="Y") nlsplot(df, model=2)
model <- lm(log(y) ~ x, data=df) alpha <- exp(coef(model))[1] beta <- coef(model)[2]
start <- list(alpha = alpha, beta = beta) start
Nota: a = 0.82; b = 0.78
a = 0.82 y b = 0.78
regplot(df, model=6, start=c(0.82, 0.78), digits=2, position=8, xlab="X", ylab="Y") nlsplot(df, model=6, start=c(0.82, 0.78))
resumen = data.frame( "MODELO" = c("Función lineal", "Función parabólica", "Función exponencial"), "CME" = c("5.76", "0.06", "3.38"), "AIC" = c("26.39", "3.30", "24.34")) flextable(resumen)
De los tres modelos evaluados, el que presentó menor AIC (criterio de información de Akaike) fue la FUNCION PARABOLICA.
Se ajusta, entonces a ese modelo, quedando:
\[y=-0,45+0,49x+1,14x{^2}\]