Apa cara yang paling bebas rasa sakit untuk menyesuaikan kurva pertumbuhan logistik di R?

19

Ini tidak mudah bagi Google seperti beberapa hal lain, untuk lebih jelasnya, saya tidak berbicara tentang regresi logistik dalam arti menggunakan regresi untuk memprediksi variabel kategori.

Saya berbicara tentang menyesuaikan kurva pertumbuhan logistik dengan poin data yang diberikan. Untuk lebih spesifik, adalah tahun tertentu dari 1958 hingga 2012 dan adalah estimasi global CO2 ppm (bagian per juta karbon dioksida) pada November tahun .xyx

Saat ini sedang berakselerasi tetapi harus turun pada beberapa titik. Jadi saya ingin kurva logistik.

Saya belum menemukan cara yang relatif mudah untuk melakukan ini.

readyready15728
sumber
3
Kurva logistik bukan satu-satunya kurva yang 'level off'. Memang beberapa dari setiap cdf berkelanjutan akan memenuhi persyaratan itu.
Glen_b -Reinstate Monica
2
Gunakan paket grofit. Menggunakan spline dan kurva pertumbuhan.
Nick, terima kasih banyak telah menempatkan kode Anda, saya hanya ingin tahu bagaimana menulisnya sebagai persamaan? dalam kode nilai C, a dan K merujuk pada parameter mana?
1
Saya pikir Anda menganggap saya sebagai @ user2581681. Saya baru saja mengedit jawaban mereka.
Nick Cox

Jawaban:

19

Lihat nls()fungsinya. Ini memiliki fungsi model kurva logistik mulai diri melalui SSlogis(). Misalnya dari ?nlshalaman bantuan

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

Saya sarankan Anda membaca halaman bantuan untuk fungsi-fungsi ini dan mungkin referensi yang ditautkan jika mungkin untuk mengetahui lebih lanjut.

Pasang kembali Monica - G. Simpson
sumber
9

Saya punya pertanyaan yang sama beberapa waktu lalu. Inilah yang saya temukan:

Fox dan Weisberg menulis artikel tambahan yang bagus menggunakan fungsi nls (baik dengan dan tanpa opsi memulai sendiri yang disebutkan oleh Gavin). Itu dapat ditemukan di sini:

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

Dari artikel itu, saya akhirnya menulis fungsi untuk kelas saya untuk digunakan ketika mencocokkan kurva logistik ke data mereka:

###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)
}
pengguna2581681
sumber