อะไรคือวิธีที่ปราศจากความเจ็บปวดที่สุดในการปรับเส้นโค้งการเติบโตของโลจิสติกส์ใน R


19

นี่ไม่ใช่เรื่องง่ายสำหรับ Google เช่นเดียวกับสิ่งอื่น ๆ อย่างชัดเจนฉันไม่ได้พูดถึงการถดถอยแบบลอจิสติกในแง่ของการใช้การถดถอยเพื่อทำนายตัวแปรเด็ดขาด

ฉันกำลังพูดถึงการปรับกราฟการเติบโตโลจิสติกให้เหมาะสมกับจุดข้อมูลที่กำหนด จะเฉพาะเจาะจง, เป็นปีที่ได้รับ 1958-2012 และปีคือประมาณ ppm CO2 ทั่วโลก (ส่วนต่อล้านส่วนของก๊าซคาร์บอนไดออกไซด์) ในเดือนพฤศจิกายนปีxxyx

ตอนนี้มันกำลังเร่งความเร็ว แต่มันก็ต้องหยุดลงในบางจุด ดังนั้นฉันต้องการเส้นโค้งโลจิสติก

ฉันยังไม่พบวิธีที่ตรงไปตรงมาในการทำเช่นนี้


3
โค้งโลจิสติกไม่ใช่เส้นโค้งเดียวที่ 'ปรับระดับ' แน่นอนหลาย cdf อย่างต่อเนื่องจะตอบสนองความต้องการที่
Glen_b -Reinstate Monica

2
ใช้แพคเกจ grofit ทำให้การใช้งานของเส้นโค้งและเส้นโค้งการเจริญเติบโต

นิคขอบคุณมากสำหรับการวางรหัสของคุณฉันแค่สงสัยว่าจะเขียนมันเป็นสมการได้อย่างไร ในรหัสค่า C, a และ K อ้างถึงพารามิเตอร์ใด?

1
ฉันคิดว่าคุณกำลังพาฉันไปเป็น @ user2581681 ฉันเพิ่งแก้ไขคำตอบของพวกเขา
Nick Cox

คำตอบ:


19

ดูnls()ฟังก์ชั่น SSlogis()แต่ก็มีฟังก์ชั่นเริ่มต้นด้วยตนเองโมเดลโค้งโลจิสติกผ่านทาง เช่นจาก?nlsหน้าช่วยเหลือ

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

ฉันขอแนะนำให้คุณอ่านหน้าช่วยเหลือสำหรับฟังก์ชั่นเหล่านี้และอาจอ้างอิงการเชื่อมโยงถ้าเป็นไปได้ที่จะหาข้อมูลเพิ่มเติม


9

ฉันมีคำถามเดียวกันเมื่อไม่นานมานี้ นี่คือสิ่งที่ฉันพบ:

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)
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.