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


16

ฉันใช้การถดถอยเชิงเส้นหลายเส้นเพื่ออธิบายความสัมพันธ์ระหว่าง Y และ X1, X2

จากทฤษฎีฉันเข้าใจว่าการถดถอยหลายครั้งถือว่าความสัมพันธ์เชิงเส้นระหว่าง Y กับแต่ละ X (Y และ X1, Y และ X2) ฉันไม่ได้ใช้การแปลง X ใด ๆ

ดังนั้นฉันได้โมเดลที่มี R = 0.45 และ X สำคัญทั้งหมด (P <0.05) จากนั้นฉันวางแผน Y กับ X1 ฉันไม่เข้าใจว่าเพราะเหตุใดวงกลมสีแดงที่เป็นตัวทำนายของแบบจำลองจึงไม่ก่อตัวเป็นเส้น อย่างที่ฉันพูดไปก่อนหน้านี้ฉันคาดว่าแต่ละคู่ของ Y และ X จะถูกต่อด้วยเส้น

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

พล็อตถูกสร้างในไพ ธ อนด้วยวิธีนี้:

fig, ax = plt.subplots()
plt.plot(x['var1'], ypred, 'o', validation['var1'], validation['y'], 'ro');
ax.set_title('blue: true,   red: OLS')
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.show()

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

คุณคาดหวังเพียงแค่บรรทัดถ้า (i) ค่าของตัวทำนายอื่น ๆถือว่าเป็นค่าเดียวกันสำหรับแต่ละจุดที่คาดการณ์ (และถ้าคุณลองสมมติค่าที่แตกต่างกันของx 2คุณจะได้บรรทัดที่แตกต่างกัน) หรือ ( ii) ถ้าคุณใช้การคาดการณ์สำหรับข้อมูลที่แท้จริงของคุณ แต่ "ออกบางส่วน" (เช่นชดเชย) การเปลี่ยนแปลงในx 2ซึ่งเป็นสิ่งที่วางแผนการถดถอยบางส่วนหรือพล็อตเพิ่มตัวแปรสำหรับ โดยไม่ทราบว่าคุณได้สร้างพล็อตนี้เป็นไปไม่ได้ที่จะรู้ว่าปัญหาของคุณคืออะไรในขณะที่ @ dawny33 พูดว่าx2x2x2
Silverfish

ฉันคิดว่าความคิดเห็นโดย @Silverfish นั้นถูกต้อง ในสามมิติหมายถึงเครื่องบินP หากคุณลดขนาดลงเหลือสองมิติคุณจะ 'ฉาย' ระนาบสามมิติ ( P ) ลงในระนาบเช่น( y , x 1 )นี่จะเป็นเส้นตรงถ้าPเป็นมุมฉากกับระนาบ( y , x 1 ) y=β0+β1x1+β2x2PP(y,x1)P(y,x1)

@ Dawny33: โพสต์
Klausos

@f coppens: ขอบคุณ เหตุใดวรรณกรรมจึงกล่าวว่าแบบจำลองการถดถอยเชิงเส้นหลายเส้นถือว่าความสัมพันธ์เชิงเส้นระหว่าง Y กับแต่ละ X (Y และ X1, Y และ X2)
Klausos

คำตอบ:


33

สมมติว่าสมการถดถอยหลายตัวของคุณคือ

y^=2x1+5x2+3

ที่ปีหมายความว่า "คาดการณ์ปี "y^y

ตอนนี้ใช้เวลาเพียงแค่จุดเหล่านั้นที่ 1 แล้วถ้าคุณวางแผนYกับx 1 , จุดเหล่านี้จะตอบสนองความสมการ:x2=1y^x1

y^=2x1+5(1)+3=2x1+8

ดังนั้นพวกเขาจะต้องนอนอยู่บนแนวลาดชัน 2 และกับตัด 8y

ตอนนี้ใช้จุดเหล่านั้นที่ 2 เมื่อคุณวางแผนYกับx 1แล้วจุดเหล่านี้ตอบสนอง:x2=2y^x1

y^=2x1+5(2)+3=2x1+13

นั่นก็คือเส้นของความชัน 2 และกับ -intercept 13 คุณสามารถตรวจสอบด้วยตัวคุณเองว่าถ้าx 2 = 3คุณก็จะได้อีกเส้นของความชัน 2 และy- จุดตัดคือ 18yx2=3y

เราเห็นว่าคะแนนที่มีค่าต่างกันของจะอยู่บนเส้นที่ต่างกัน แต่ทั้งหมดมีการไล่ระดับสีเดียวกัน: ความหมายของสัมประสิทธิ์ของ2 x 1ในสมการการถดถอยดั้งเดิมคือceteris paribusคือการทำนายค่าคงที่อื่น เพิ่มขึ้นในหน่วยx 1เพิ่มคาดการณ์การตอบสนองเฉลี่ยปีสองคันขณะที่ความหมายของการสกัดกั้นของ3ในสมการถดถอยเป็นอย่างนี้เมื่อx 1 = 0และx 2 = 0แล้วการตอบสนองเฉลี่ยที่คาดการณ์ไว้คือ3x22x1x1y^3x1=0x2=03. แต่ไม่ทั้งหมดคะแนนของคุณมีเหมือนกันซึ่งหมายความว่าพวกเขาอยู่บนเส้นที่มีความแตกต่างกันตัด - บรรทัดจะมีเพียงตัด3สำหรับจุดเหล่านั้นที่x 2 = 0 ดังนั้นแทนที่จะเห็นเพียงบรรทัดเดียวคุณอาจเห็น (หากมีค่าเฉพาะของx 2ที่เกิดขึ้นเช่นถ้าx 2เป็นจำนวนเต็มเสมอ) ชุดของ "เส้นริ้ว" ในแนวทแยง พิจารณาข้อมูลต่อไปนี้ที่Y = 2 x 1 + 5 x 2 + 3x23x2=0x2x2y^=2x1+5x2+3

ก่อนเพิ่มสาย

ที่นี่มี "ลายเส้น" ที่สังเกตได้ ทีนี้ถ้าผมวาดในจุดเหล่านั้นซึ่งเป็นวงกลมสีแดง, x 2 = 2เป็นสามเหลี่ยมทองคำและx 2 = 3เป็นสี่เหลี่ยมสีน้ำเงินที่เราเห็นว่ามันอยู่ในสามบรรทัดที่แตกต่างกัน, ความชัน 2 ทั้งหมดและy-ตัด 8, 13 และ 18 ตามที่คำนวณไว้ข้างต้น แน่นอนว่าถ้าx 2ไม่ได้ถูก จำกัด ให้ใช้ค่าจำนวนเต็มหรือสถานการณ์นั้นซับซ้อนโดยตัวแปรตัวทำนายอื่น ๆ ที่รวมอยู่ในการถดถอยแล้วเส้นทแยงมุมจะมีความชัดเจนน้อยลง แต่ก็ยังคงเป็นกรณีที่แต่ละจุดที่ทำนายไว้ อยู่บนเส้นแยกx2=1x2=2x2=3yx2ขึ้นอยู่กับค่าของทำนายอื่น ๆ ไม่ได้แสดงบนกราฟ

หลังจากเพิ่มสายแล้ว

yx1x2y^=2x1+5x2+3yx1x2yx1แกนจะชี้ไปทางขวาของคุณ

พล็อต 3d

yy

y^x1x2x2y^x1x2yx1 x2yx1

รหัสสำหรับแปลง R

library(scatterplot3d)

data.df <- data.frame(
  x1 = c(0,2,4,5,8, 1,3,4,7,8, 0,3,5,6,7),
  x2 = c(1,1,1,1,1, 2,2,2,2,2, 3,3,3,3,3)
)

data.df$yhat <- with(data.df, 2*x1 + 5*x2 + 3)

data1.df <- data.df[data.df$x2==1,]
data2.df <- data.df[data.df$x2==2,]
data3.df <- data.df[data.df$x2==3,]

#Before lines added    
mar.default <- c(5,4,4,2) + 0.1
par(mar = mar.default + c(0, 1, 0, 0)) 
plot(data.df[c("x1","yhat")], main=expression("Predicted y against "*x[1]),
     xlab=expression(x[1]), ylab=expression(hat(y)))

#After lines added
plot(data.df[c("x1","yhat")], main=expression("Predicted y against "*x[1]),
     xlab=expression(x[1]), ylab=expression(hat(y)), pch=".")
points(data1.df[c("x1","yhat")], pch=19, col="red")
abline(lm(yhat ~ x1, data=data1.df), col="red")
points(data2.df[c("x1","yhat")], pch=17, col="gold")
abline(lm(yhat ~ x1, data=data2.df), col="gold")
points(data3.df[c("x1","yhat")], pch=15, col="blue")
abline(lm(yhat ~ x1, data=data3.df), col="blue")

#3d plot
myPlot <- scatterplot3d(data.df, pch=".", xlab=expression(x[1]),
                        ylab=expression(x[2]), zlab=expression(hat(y)),
                        main=expression("Predicted y against "*x[1]*" and "*x[2]))
myPlot$plane3d(Intercept=3, x.coef=2, y.coef=5, col="darkgrey")
myPlot$points3d(data1.df, pch=19, col="red")
myPlot$points3d(data2.df, pch=17, col="gold")
myPlot$points3d(data3.df, pch=15, col="blue")
print(myPlot)

คำถามเล็ก ๆ เพียงข้อเดียว: การบอกว่าระนาบคุณหมายถึงระนาบที่มีความโค้งบ้างไหม?
Klausos

มันหมายถึงระนาบ "แบน" ฉันจะเพิ่มภาพเพื่ออธิบายในภายหลัง
Silverfish

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