¿Cuál es la forma más sencilla de adaptar las curvas de crecimiento logístico en R?

19

Esto no es tan fácil para Google como otras cosas, ya que, para ser claros, no estoy hablando de regresión logística en el sentido de usar la regresión para predecir variables categóricas.

Estoy hablando de ajustar una curva de crecimiento logístico a puntos de datos dados. Para ser específicos, es un año dado de 1958 a 2012 e es el estimado de ppm mundiales de CO2 (partes por millón de dióxido de carbono) en noviembre del año .XyX

En este momento está acelerando, pero tiene que nivelarse en algún momento. Entonces quiero una curva logística.

Todavía no he encontrado una forma relativamente sencilla de hacer esto.

readyready15728
fuente
3
Una curva logística no es la única curva que se 'nivela'. De hecho, un múltiplo de cualquier cdf continuo satisfaría ese requisito.
Glen_b -Reinstala a Monica el
2
Use el paquete grofit Hace uso de spline y curvas de crecimiento.
Nick, muchas gracias por escribir tu código. ¿Me preguntaba cómo escribirlo como una ecuación? en el código los valores C, a y K se refieren a qué parámetros?
1
Creo que me estás tomando como usuario @ user2581681. Acabo de editar su respuesta.
Nick Cox

Respuestas:

19

Ver la nls()función. Tiene una función de modelo de curva logística de inicio automático a través de SSlogis(). Ej. Desde la ?nlspágina de ayuda

> library("nls")
> DNase1 <- subset(DNase, Run == 1)
>      
> ## using a selfStart model
> fm1DNase1 <- nls(density ~ SSlogis(log(conc), Asym, xmid, scal), 
+                  DNase1)

Le sugiero que lea las páginas de ayuda para estas funciones y probablemente las referencias vinculadas si es posible para obtener más información.

Restablece a Mónica - G. Simpson
fuente
9

Tuve la misma pregunta hace un rato. Esto es lo que encontré:

Fox y Weisberg escribieron un excelente artículo complementario utilizando la función nls (con y sin la opción de inicio automático mencionada por Gavin). Se puede encontrar aquí:

http://socserv.mcmaster.ca/jfox/Books/Companion/appendix/Appendix-Nonlinear-Regression.pdf

A partir de ese artículo, terminé escribiendo una función para que la usara mi clase al ajustar una curva logística a sus datos:

###Log fit - be sure to use quotes around the variable names in the call
log.fit <- function(dep, ind, yourdata){
#Self-starting...

y <- yourdata[, dep]
x <- yourdata[, ind]

log.ss <- nls(y ~ SSlogis(x, phi1, phi2, phi3))

#C
C <- summary(log.ss)$coef[1]
#a
A <- exp((summary(log.ss)$coef[2]) * (1/summary(log.ss)$coef[3]))
#k
K <- (1 / summary(log.ss)$coef[3])

plot(y ~ x, main = "Logistic Function", xlab=ind, ylab=dep)
lines(0:max(x), predict(log.ss, data.frame(x=0:max(x))), col="red")

r1 <- sum((x - mean(x))^2)
r2 <- sum(residuals(log.ss)^2)

r_sq <- (r1 - r2) / r1

out <- data.frame(cbind(c(C=C, a=A, k=K, R.value=sqrt(r_sq))))
names(out)[1] <- "Logistic Curve"

return(out)
}
usuario2581681
fuente