ทำไมฉันถึงได้รับการคาดการณ์ที่แตกต่างกันสำหรับการขยายพหุนามด้วยตนเองและการใช้ฟังก์ชั่น R `poly`


10

ทำไมฉันถึงได้รับการคาดการณ์ที่แตกต่างกันสำหรับการขยายพหุนามด้วยตนเองและการใช้polyฟังก์ชั่นR

set.seed(0)
x <- rnorm(10)
y <- runif(10)
plot(x,y,ylim=c(-0.5,1.5))
grid()

# xp is a grid variable for ploting
xp <- seq(-3,3,by=0.01)
x_exp <- data.frame(f1=x,f2=x^2)
fit <- lm(y~.-1,data=x_exp)
xp_exp <- data.frame(f1=xp,f2=xp^2)
yp <- predict(fit,xp_exp)
lines(xp,yp)

# using poly function
fit2 <- lm(y~ poly(x,degree=2) -1)
yp <- predict(fit2,data.frame(x=xp))
lines(xp,yp,col=2)

ป้อนคำอธิบายรูปภาพที่นี่

ความพยายามของฉัน:

  • ดูเหมือนว่าจะมีปัญหากับการสกัดกั้นเมื่อฉันพอดีกับรูปแบบที่มีการสกัดกั้นคือไม่มี-1ในรูปแบบformulaทั้งสองเส้นจะเหมือนกัน แต่ทำไมไม่มีการสกัดกั้นสองบรรทัดจึงแตกต่างกัน

  • "แก้ไข" อีกอันหนึ่งกำลังใช้rawการขยายตัวแบบพหุนามแทนพหุนามแบบมุมฉาก หากเราเปลี่ยนรหัสเป็นfit2 = lm(y~ poly(x,degree=2, raw=T) -1)จะทำให้ 2 บรรทัดเหมือนกัน แต่ทำไม


4
นี่ไม่ใช่หัวข้อจากคำถามของคุณ แต่คุณมักจะเปิดกว้างต่อการแสดงความคิดเห็น เมื่ออ่านรหัสของคุณสิ่งแรกที่ฉันสังเกตเห็นคือคุณใช้=และ<-สำหรับการมอบหมายที่ไม่สอดคล้องกัน ฉันจะไม่ทำสิ่งนี้จริงๆมันไม่ได้ทำให้สับสน แต่มันเพิ่มสัญญาณรบกวนทางภาพลงในโค้ดของคุณโดยไม่มีประโยชน์ คุณควรใช้รหัสอื่นเพื่อใช้ในรหัสส่วนตัวของคุณและติดกับมัน
Matthew Drury

ขอบคุณที่ช่วยฉันเขียนโปรแกรม! คำถามถูกแก้ไขแล้ว @MatthewDrury
Haitao Du

3
เคล็ดลับติดตามผลแบบสุ่มเพื่อ<-ลดความยุ่งยากในการพิมพ์: alt+-.
JAD

@ JarkoDubbeldam ขอบคุณสำหรับเคล็ดลับการเข้ารหัส ฉันรักคีย์ลัดสำหรับกระดาน
Haitao Du

คำตอบ:


12

ในขณะที่คุณทราบความแตกต่างเดิมอย่างถูกต้องเป็นเพราะในกรณีแรกที่คุณใช้ชื่อพหุนาม "ดิบ" ในขณะที่ในกรณีที่สองคุณใช้พหุนาม orthogonal ดังนั้นหากต่อมาlmเรียกร้องการเปลี่ยนแปลงเป็น: fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)เราจะได้รับผลลัพธ์ที่เหมือนกันระหว่าง และfit fit3เหตุผลที่ว่าทำไมเราได้รับผลลัพธ์ที่เหมือนกันในกรณีนี้คือ "จิ๊บจ๊อย"; เราพอดีกับรูปแบบเดียวกันที่แน่นอนในขณะที่เราติดตั้งfit<-lm(y~.-1,data=x_exp)ไม่น่าประหลาดใจที่มี

หนึ่งสามารถตรวจสอบได้ง่ายว่าแบบจำลองการฝึกอบรมของทั้งสองรุ่นเหมือนกันall.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE)


สิ่งที่น่าสนใจกว่าคือทำไมคุณจะได้พล็อตเดียวกันเมื่อใช้การสกัดกั้น สิ่งแรกที่ควรสังเกตคือเมื่อติดตั้งโมเดลที่มีจุดตัด

  • ในกรณีของfit2เราเพียงแค่เลื่อนตัวแบบการทำนายในแนวตั้ง รูปร่างที่แท้จริงของเส้นโค้งเหมือนกัน

  • ในทางกลับกันรวมถึงการสกัดกั้นในกรณีของfitผลลัพธ์ไม่เพียง แต่เป็นเส้นที่แตกต่างกันในแง่ของการจัดวางแนวตั้ง แต่มีรูปร่างที่แตกต่างกันโดยรวม

เราสามารถเห็นได้อย่างง่ายดายโดยการต่อท้ายพอดีกับพล็อตที่มีอยู่

fit_b<-lm(y~. ,data=x_exp)
yp=predict(fit_b,xp_exp)
lines(xp,yp, col='green', lwd = 2)

fit2_b<-lm(y~ poly(x,degree=2, raw = FALSE) )
yp=predict(fit2_b,data.frame(x=xp))
lines(xp,yp,col='blue')

ป้อนคำอธิบายรูปภาพที่นี่

ตกลง ... ทำไมการสกัดกั้นจึงไม่เหมาะในขณะที่การสกัดกั้นรวมถึงพอดีเหมือนกัน จับเป็นอีกครั้งในสภาพ orthogonality

ในกรณีของfit_bแบบจำลองเมทริกซ์ที่ใช้มีองค์ประกอบที่ไม่ใช่มุมฉากเมทริกซ์แกรมcrossprod( model.matrix(fit_b) )อยู่ไกลจากเส้นทแยงมุม ในกรณีของfit2_bองค์ประกอบเป็นมุมฉาก ( crossprod( model.matrix(fit2_b) )เป็นแนวทแยงได้อย่างมีประสิทธิภาพ)

เช่นในกรณีที่fitเมื่อเราขยายมันเพื่อรวมการสกัดกั้นในfit_bเราเปลี่ยนรายการนอกแนวขวางของGram matrix และทำให้ผลลัพธ์ที่ได้นั้นแตกต่างกันโดยรวม (ความโค้งแตกต่างกันเป็นต้น) ในการเปรียบเทียบ กับแบบที่มีให้โดย ในกรณีของแต่เมื่อเราขยายไปยังรวมถึงการสกัดกั้นในขณะที่เราผนวกคอลัมน์ที่มีอยู่แล้วตั้งฉากกับคอลัมน์ที่เรามีที่ตั้งฉากคือกับพหุนามอย่างต่อเนื่องของการศึกษาระดับปริญญา 0 นี่เป็นเพียงผลลัพธ์ในการเคลื่อนที่ในแนวตั้งของเราโดยการสกัดกั้น นี่คือเหตุผลที่แปลงแตกต่างกันXTXfitfit2fit2_b

คำถามที่น่าสนใจคือทำไมfit_bและfit2_bเหมือนกัน; หลังจากเมทริกซ์โมเดลทั้งหมดจากfit_bและfit2_bไม่เหมือนกันในมูลค่าที่ตราไว้ ที่นี่เราก็ต้องจำไว้ว่าในที่สุดfit_bและfit2_bมีข้อมูลเดียวกัน fit2_bเป็นเพียงการรวมกันเชิงเส้นของfit_bผลลัพธ์ที่เป็นหลักของพวกเขาจะเหมือนกัน ความแตกต่างที่สังเกตได้ในสัมประสิทธิ์การสะท้อนกลับจะแสดงการรวมตัวกันอีกครั้งของค่าfit_bเพื่อให้ได้ฉากฉากหลัง (ดูคำตอบกรัม Grothendieck นี่เกินไปสำหรับตัวอย่างที่แตกต่างกัน.)


+2.5 ขอบคุณสำหรับคำตอบที่ดี สำหรับกราฟสุดท้ายฉันเรียนรู้จาก @kjetilb halvorsen: อีกวิธีหนึ่งที่เป็นนามธรรมในการอธิบายสิ่งนี้คือรูปแบบนั้นขึ้นอยู่กับพื้นที่ย่อยเชิงเส้นเฉพาะคือพื้นที่คอลัมน์ที่กำหนดโดยเมทริกซ์การออกแบบ แต่พารามิเตอร์นั้นไม่เพียง แต่ขึ้นอยู่กับพื้นที่ย่อยนี้เท่านั้น แต่ขึ้นอยู่กับพื้นฐานของพื้นที่ย่อยนั้นที่กำหนดโดยตัวแปรเฉพาะที่ใช้นั่นคือคอลัมน์เอง ยกตัวอย่างเช่นการคาดการณ์จากตัวแบบจะขึ้นอยู่กับพื้นที่ย่อยเชิงเส้นเท่านั้นไม่ใช่บนพื้นฐานที่เลือกไว้
Haitao Du

หวังว่าคุณจะไม่รังเกียจฉันจัดรูปแบบเล็กน้อย ..
Haitao Du

@ hxd1011: ไม่มีปัญหาเลยขอบคุณที่สละเวลาเพื่อ "หวี" มันนิดหน่อย
usεr11852
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.