R'deki lojistik büyüme eğrilerine uymanın en acısız yolu nedir?


19

Bu, Google için diğer bazı şeyler kadar kolay değil, açıkçası, kategorik değişkenleri tahmin etmek için regresyon kullanmak anlamında lojistik regresyondan bahsetmiyorum.

Verilen veri noktalarına bir lojistik büyüme eğrisi yerleştirmekten bahsediyorum. Spesifik olarak, , 1958'den 2012'ye kadar verilen bir yıl ve y , x yılının Kasım ayında tahmini küresel CO2 ppm'dir (milyonda karbondioksit başına parça) .xyx

Şu anda hızlanıyor, ancak bir noktada dengelenmesi gerekiyor. Bu yüzden lojistik bir eğri istiyorum.

Bunu yapmak için henüz nispeten basit bir yol bulamadım.


3
Bir lojistik eğri, 'seviye atlayan' tek eğri değildir. Gerçekten de sürekli cdf'lerin katları bu gereksinimi karşılar.
Glen_b

2
Paket grofitini kullanın Spline ve büyüme eğrilerini kullanır.

Nick, kodunuzu positng için çok teşekkür ederim, sadece bir denklem olarak nasıl yazacağımı merak ediyordum? kodda C, a ve K değerleri hangi parametrelere atıfta bulunur?

1
Sanırım beni @ user2581681 olmaya götürüyorsun. Yanıtlarını yeni düzenledim.
Nick Cox

Yanıtlar:


19

nls()Fonksiyona bakın . Üzerinden kendiliğinden başlayan lojistik eğri modeli işlevi vardır SSlogis(). Örneğin ?nlsyardım sayfasından

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

Daha fazla bilgi edinmek için bu işlevler için yardım sayfalarını ve muhtemelen bağlı referansları okumanızı öneririz.


9

Bir süre önce aynı soruyu sordum. Bulduğum şey bu:

Fox ve Weisberg, nls işlevini (Gavin tarafından belirtilen kendi kendine başlama seçeneğiyle veya bu seçenek olmadan) kullanarak mükemmel bir tamamlayıcı makale yazdı. Burada bulunabilir:

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

Bu makaleden, sınıfımın verilerine lojistik bir eğri yerleştirirken kullanacağı bir işlev yazdım:

###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)
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.