26 votos

¿Qué es lo más libre de dolor manera de adaptar la logística de las curvas de crecimiento en R?

Esto no es tan fácil a Google como algunas otras cosas, para ser claro, no estoy hablando de regresión logística, en el sentido de utilizar la regresión para predecir las variables categóricas.

Estoy hablando sobre el ajuste de una curva de crecimiento logístico a los puntos de datos. Para ser más específicos, $x$ es un año de 1958 a 2012 y $y$ es la estimación global de CO2 ppm (partes por millón de dióxido de carbono) en noviembre del año $x$.

Ahora mismo se está acelerando, pero no tiene a estabilizarse en algún momento. Así que quiero una curva logística.

No he encontrado una forma relativamente sencilla para hacer esto todavía.

27voto

David J. Sokol Puntos 1730

Ver el nls() función. Tiene un auto de partida de logística modelo de la curva de la función a través SSlogis(). E. g. de la ?nls pá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 de estas funciones y, probablemente, las referencias vinculadas si es posible para averiguar más.

13voto

user2581681 Puntos 51

Yo tenía la misma pregunta hace un rato. Esto es lo que he encontrado:

Fox y Weisberg escribió un gran artículo complementario el uso de la nls de la función (con y sin el auto-arranque de la opción mencionada por Gavin). Él puede ser encontrado aquí:

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

De ese artículo, terminé de escribir una función para mi clase que se utiliza cuando el ajuste de 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)
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X