Qual è il modo più indolore per adattarsi alle curve di crescita logistica in R?


19

Questo non è facile per Google come altre cose come, per essere chiari, non sto parlando di regressione logistica nel senso di usare la regressione per prevedere le variabili categoriali.

Sto parlando di adattare una curva di crescita logistica a determinati punti dati. Per essere precisi, è un dato anno dal 1958 al 2012 e è la ppm globale stimata di CO2 (parti per milione di anidride carbonica) nel novembre dell'anno .XyX

In questo momento sta accelerando ma ad un certo punto deve stabilizzarsi. Quindi voglio una curva logistica.

Non ho ancora trovato un modo relativamente semplice per farlo.


3
Una curva logistica non è l'unica curva che "si livella". In effetti, un multiplo di qualsiasi continua continua soddisferebbe tale requisito.
Glen_b

2
Usa il pacchetto grofit Utilizza curve spline e crescita.

Nick, grazie mille per aver posizionato il tuo codice, mi stavo solo chiedendo come scriverlo come equazione? nel codice i valori C, a e K si riferiscono a quali parametri?

1
Penso che mi stai prendendo per essere @ user2581681. Ho appena modificato la loro risposta.
Nick Cox,

Risposte:


19

Vedi la nls()funzione Ha una funzione del modello di curva logistica autoavvio tramite SSlogis(). Ad esempio dalla ?nlspagina di aiuto

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

Ti suggerisco di leggere le pagine di aiuto per queste funzioni e probabilmente i riferimenti collegati, se possibile, per saperne di più.


9

Ho avuto la stessa domanda poco fa. Questo è quello che ho trovato:

Fox e Weisberg hanno scritto un ottimo articolo supplementare usando la funzione nls (sia con che senza l'opzione di autoaccensione menzionata da Gavin). Si può trovare qui:

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

Da quell'articolo, ho finito per scrivere una funzione che la mia classe potesse usare per adattare una curva logistica ai loro dati:

###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)
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.