ฉันมีคำถามเดียวกันเมื่อไม่นานมานี้ นี่คือสิ่งที่ฉันพบ:
Fox และ Weisberg เขียนบทความเพิ่มเติมที่ยอดเยี่ยมโดยใช้ฟังก์ชั่น nls (ทั้งที่มีและไม่มีตัวเลือกเริ่มต้นด้วยตนเองที่กล่าวถึงโดย Gavin) สามารถพบได้ที่นี่:
http://socserv.mcmaster.ca/jfox/Books/Companion/appendix/Appendix-Nonlinear-Regression.pdf
จากบทความนั้นฉันลงเอยด้วยการเขียนฟังก์ชั่นสำหรับชั้นเรียนของฉันที่จะใช้เมื่อปรับโค้งโลจิสติกให้เข้ากับข้อมูล:
###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)
}