Quel est le moyen le plus simple d'adapter les courbes de croissance logistique dans R?

19

Ce n'est pas aussi facile pour Google que d'autres choses car, pour être clair, je ne parle pas de régression logistique dans le sens d'utiliser la régression pour prédire des variables catégorielles.

Je parle d'adapter une courbe de croissance logistique à des points de données donnés. Pour être précis, est une année donnée de 1958 à 2012 et y est le ppm mondial de CO2 estimé (parties par million de dioxyde de carbone) en novembre de l'année x .XyX

En ce moment, il accélère, mais il doit se stabiliser à un moment donné. Je veux donc une courbe logistique.

Je n'ai pas encore trouvé de moyen relativement simple de le faire.

readyready15728
la source
3
Une courbe logistique n'est pas la seule courbe qui «se stabilise». En effet, un multiple de tout cdf continu satisferait à cette exigence.
Glen_b -Reinstate Monica
2
Utiliser le package grofit Utilise les courbes de spline et de croissance.
Nick, merci beaucoup d'avoir posé votre code, je me demandais juste comment l'écrire comme une équation? dans le code les valeurs C, a et K se réfèrent à quels paramètres?
1
Je pense que vous me prenez pour @ user2581681. Je viens de modifier leur réponse.
Nick Cox

Réponses:

19

Voir la nls()fonction. Il a une fonction de modèle de courbe logistique à démarrage automatique via SSlogis(). Par exemple à partir de la ?nlspage d'aide

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

Je vous suggère de lire les pages d'aide de ces fonctions et probablement les références liées si possible pour en savoir plus.

Réintégrer Monica - G. Simpson
la source
9

J'ai eu la même question il y a un petit moment. Voici ce que j'ai trouvé:

Fox et Weisberg ont écrit un excellent article supplémentaire en utilisant la fonction nls (avec et sans l'option de démarrage automatique mentionnée par Gavin). Il peut être trouvé ici:

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

À partir de cet article, j'ai fini par écrire une fonction que ma classe pourrait utiliser pour ajuster une courbe logistique à ses données:

###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)
}
user2581681
la source