ปัญหาของฉัน : เมื่อเร็ว ๆ นี้ฉันได้พบกับนักสถิติที่แจ้งให้ฉันทราบว่าเส้นโค้งนั้นมีประโยชน์สำหรับการสำรวจข้อมูลเท่านั้นและอาจมีการ overfitting ดังนั้นจึงไม่มีประโยชน์ในการทำนาย เขาชอบสำรวจด้วยพหุนามอย่างง่าย ๆ ... เนื่องจากฉันเป็นแฟนตัวยงของเส้นโค้งและสิ่งนี้ขัดกับสัญชาตญาณของฉันฉันสนใจที่จะค้นหาว่าข้อโต้แย้งเหล่านี้มีเหตุผลเพียงใดและถ้ามีกลุ่มต่อต้านจำนวนมาก - นักเคลื่อนไหวออกไปที่นั่น?
ข้อมูลประกอบ : ฉันพยายามติดตาม Frank Harrell กลยุทธ์การสร้างแบบจำลองการถดถอย (1) เมื่อฉันสร้างแบบจำลอง เขาให้เหตุผลว่าลูกบาศก์ splines ที่ จำกัด เป็นเครื่องมือที่ถูกต้องสำหรับการสำรวจตัวแปรต่อเนื่อง นอกจากนี้เขายังระบุว่าชื่อพหุนามน่าสงสารในการสร้างแบบจำลองความสัมพันธ์บางอย่างเช่นเกณฑ์ลอการิทึม (2) สำหรับการทดสอบความเป็นเชิงเส้นของแบบจำลองเขาแนะนำการทดสอบ ANOVA สำหรับเส้นโค้ง:
ฉัน googled สำหรับ overfitting กับ splines แต่ไม่พบว่ามีประโยชน์มาก (นอกเหนือจากคำเตือนทั่วไปเกี่ยวกับการไม่ใช้ knots มากเกินไป) ในฟอรั่มนี้ดูเหมือนว่าจะมีการตั้งค่าสำหรับการสร้างแบบจำลองเส้นโค้งเป็นKolassa , ฮาร์เรล , ยินดีปรีดา
ฉันพบหนึ่งโพสต์ในบล็อกเกี่ยวกับชื่อพหุนามปีศาจของ overfittingที่พูดคุยเกี่ยวกับการทำนายพหุนาม โพสต์ลงท้ายด้วยความคิดเห็นเหล่านี้:
ตัวอย่างบางส่วนที่แสดงในที่นี้คือการโกง - การถดถอยพหุนามเป็นที่รู้กันว่าไม่น่าเชื่อถือสูง ในทางปฏิบัติมากขึ้นคือการใช้เส้นโค้งมากกว่าชื่อพหุนาม
ตอนนี้สิ่งนี้กระตุ้นให้ฉันตรวจสอบว่า splines จะทำงานกับตัวอย่างได้อย่างไร:
library(rms)
p4 <- poly(1:100, degree=4)
true4 <- p4 %*% c(1,2,-6,9)
days <- 1:70
set.seed(7987)
noise4 <- true4 + rnorm(100, sd=.5)
reg.n4.4 <- lm(noise4[1:70] ~ poly(days, 4))
reg.n4.4ns <- lm(noise4[1:70] ~ ns(days,4))
dd <- datadist(noise4[1:70], days)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4[1:70] ~ rcs(days,5))
plot(1:100, noise4)
nd <- data.frame(days=1:100)
lines(1:100, predict(reg.n4.4, newdata=nd), col="orange", lwd=3)
lines(1:100, predict(reg.n4.4ns, newdata=nd), col="red", lwd=3)
lines(1:100, predict(reg.n4.4rcs_ols, newdata=nd), col="darkblue", lwd=3)
legend("top", fill=c("orange", "red","darkblue"),
legend=c("Poly", "Natural splines", "RCS - ols"))
ให้ภาพต่อไปนี้:
โดยสรุปฉันไม่พบมากที่จะโน้มน้าวใจฉันจากการพิจารณาเส้นโค้งฉันจะหายไปอะไร
- FE Harrell กลยุทธ์การสร้างแบบจำลองการถดถอย: ด้วยการประยุกต์ใช้กับตัวแบบเชิงเส้นถดถอยโลจิสติกและการวิเคราะห์การอยู่รอดพิมพ์ปกอ่อนของปกแข็งฉบับที่ 1 ed 2544 Springer, 2010
- FE Harrell, KL Lee และ BG Pollock, "แบบจำลองการถดถอยในการศึกษาทางคลินิก: การกำหนดความสัมพันธ์ระหว่างผู้ทำนายและการตอบสนอง" JNCI J Natl Cancer Inst, vol. 80, ไม่มี 15, pp. 1198–1202, ตุลาคม 2531
ปรับปรุง
ความคิดเห็นทำให้ฉันสงสัยว่าเกิดอะไรขึ้นในช่วงข้อมูล แต่มีเส้นโค้งที่ไม่สบาย ในสถานการณ์ส่วนใหญ่ฉันจะไม่ออกนอกขอบเขตของข้อมูลตามตัวอย่างข้างต้นบ่งชี้ ฉันไม่แน่ใจว่าสิ่งนี้มีคุณสมบัติเป็นการคาดการณ์ ...
ต่อไปนี้เป็นตัวอย่างที่ฉันสร้างบรรทัดที่ซับซ้อนขึ้นซึ่งไม่สามารถแปลเป็นพหุนาม เนื่องจากข้อสังเกตส่วนใหญ่อยู่ในศูนย์กลางของข้อมูลฉันจึงพยายามจำลองสิ่งนั้นด้วย:
library(rms)
cmplx_line <- 1:200/10
cmplx_line <- cmplx_line + 0.05*(cmplx_line - quantile(cmplx_line, .7))^2
cmplx_line <- cmplx_line - 0.06*(cmplx_line - quantile(cmplx_line, .3))^2
center <- (length(cmplx_line)/4*2):(length(cmplx_line)/4*3)
cmplx_line[center] <- cmplx_line[center] +
dnorm(6*(1:length(center)-length(center)/2)/length(center))*10
ds <- data.frame(cmplx_line, x=1:200)
days <- 1:140/2
set.seed(1234)
sample <- round(rnorm(600, mean=100, 60))
sample <- sample[sample <= max(ds$x) &
sample >= min(ds$x)]
sample_ds <- ds[sample, ]
sample_ds$noise4 <- sample_ds$cmplx_line + rnorm(nrow(sample_ds), sd=2)
reg.n4.4 <- lm(noise4 ~ poly(x, 6), data=sample_ds)
dd <- datadist(sample_ds)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4 ~ rcs(x, 7), data=sample_ds)
AIC(reg.n4.4)
plot(sample_ds$x, sample_ds$noise4, col="#AAAAAA")
lines(x=ds$x, y=ds$cmplx_line, lwd=3, col="black", lty=4)
nd <- data.frame(x=ds$x)
lines(ds$x, predict(reg.n4.4, newdata=ds), col="orange", lwd=3)
lines(ds$x, predict(reg.n4.4rcs_ols, newdata=ds), col="lightblue", lwd=3)
legend("bottomright", fill=c("black", "orange","lightblue"),
legend=c("True line", "Poly", "RCS - ols"), inset=.05)
สิ่งนี้ให้พล็อตต่อไปนี้:
อัปเดต 2
เนื่องจากโพสต์นี้ฉันได้เผยแพร่บทความที่มีลักษณะเป็นแบบไม่เป็นเชิงเส้นสำหรับอายุบนชุดข้อมูลขนาดใหญ่ เสริมเปรียบเทียบวิธีการที่แตกต่างกันและฉันได้เขียนบล็อกโพสต์เกี่ยวกับเรื่องนี้