การสร้างกราฟเส้นโค้งความน่าจะเป็นสำหรับโมเดล Logit พร้อมตัวทำนายหลายตัว


12

ฉันมีฟังก์ชั่นความน่าจะเป็นดังต่อไปนี้:

Prob=11+ez

ที่ไหน

z=B0+B1X1++BnXn.

แบบจำลองของฉันดูเหมือน

Pr(Y=1)=11+exp([3.92+0.014×(bid)])

สิ่งนี้ถูกมองเห็นผ่านเส้นโค้งความน่าจะเป็นซึ่งดูเหมือนกับด้านล่าง

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

ฉันกำลังพิจารณาเพิ่มตัวแปรสองตัวในสมการการถดถอยเดิมของฉัน สมมติว่าฉันเพิ่มเพศ (หมวดหมู่: F และ M) และอายุ (หมวดหมู่: <25 และ> 26) ลงในโมเดลฉันท้ายด้วย:

Pr(Y=1)=11+exp([3.92+0.014×(bid)+0.25×(gender)+0.15×(age)])

ใน RI สามารถสร้างเส้นโค้งความน่าจะเป็นที่คล้ายกันซึ่งจะบอกความน่าจะเป็นของ Y = 1 เมื่อคิดเป็นสามตัวทำนาย ที่ฉันหลงทางฉันต้องการค้นหาความน่าจะเป็นที่จะเกิดการเปลี่ยนแปลงรูปแบบเหล่านี้ทุกครั้ง

ดังนั้นเมื่อการเสนอราคา = 1, เพศ = M, และอายุคือ> = 26, ความน่าจะเป็นที่ Y = 1 คืออะไร? ในทำนองเดียวกันเมื่อการเสนอราคา = 2, เพศ = F และอายุคือ> = 26, ความน่าจะเป็นที่ Y = 1 คืออะไร?

ฉันต้องการสร้างเส้นโค้งความน่าจะเป็นซึ่งจะทำให้ฉันเห็นภาพนี้

ใครช่วยได้บ้าง ฉันอาจเข้าใจผิดอย่างสมบูรณ์ว่าข้อมูลชนิดใดที่สามารถรวบรวมได้จากแบบจำลอง logit แต่โปรดบอกฉันด้วยว่าฉันเข้าใจทฤษฎีด้วยหรือไม่


คุณต้องการให้รหัสทำเช่นนี้ใน R หรือเพียงเพื่อทำความเข้าใจปัญหาในเชิงแนวคิด?
gung - Reinstate Monica

ถ้าฉันต้องเลือกฉันจะพูดถึงปัญหาในเชิงแนวคิด ฉันคิดว่ารหัส R ที่ฉันสามารถจัดการได้ด้วยตัวเอง
ATMathew

2
หากคุณสะดวกสบายในการแก้ปัญหาเดียวกันกับการถดถอยแบบธรรมดา (กำลังสองน้อยที่สุด) ทำไมไม่เพียงแค่แสดงการตอบสนองเป็นอัตราต่อรองบันทึก (ซึ่งก็คือ ) และใช้เทคนิคที่คุณรู้จัก? B0+B1X1++BnXn
whuber

1
แน่นอนว่าให้ดูที่แพ็คเกจ @FrankHarrell rms (สามารถดูเอกสารมากมายได้ในเว็บไซต์ RMS ) เริ่มต้นด้วยPredict()และplot.Predict()ฟังก์ชั่นเพื่อทำความเข้าใจกับสิ่งที่สามารถทำได้ (ซึ่งรวมถึงการวางแผนเป็นฟังก์ชันของโดยมีตั้งไว้ที่ค่าเริ่มต้น หรือค่าคงที่ที่คุณเลือก) Pr(Y=1|x2,,xp)x1x2,,xp
chl

คำตอบ:


24

โชคดีสำหรับคุณคุณมีcovariate ต่อเนื่องเพียงหนึ่งเดียว ดังนั้นคุณก็สามารถทำให้สี่ (เช่น 2 x 2 เพศอายุ) แปลงแต่ละคนมีความสัมพันธ์ระหว่าง BID และ1) หรือคุณสามารถสร้างหนึ่งพล็อตที่มีสี่บรรทัดที่แตกต่างกันบนมัน (คุณสามารถใช้สไตล์เส้นที่แตกต่างกันน้ำหนักหรือสีเพื่อแยกแยะพวกเขา) คุณสามารถรับบรรทัดที่คาดการณ์เหล่านี้ได้โดยการแก้สมการการถดถอยที่แต่ละชุดค่าผสมสี่ชุดสำหรับช่วงของค่า BID p(Y=1)

สถานการณ์ที่ซับซ้อนมากขึ้นคือที่ที่คุณมี covariate ต่อเนื่องมากกว่าหนึ่ง ในกรณีเช่นนี้มักมี covariate เฉพาะที่ 'หลัก' ในบางแง่ covariate นั้นสามารถใช้กับแกน X ได้ จากนั้นคุณแก้หาค่าที่ระบุไว้ล่วงหน้าของ covariates อื่น ๆ โดยทั่วไปคือค่าเฉลี่ยและ +/- 1SD ตัวเลือกอื่น ๆ ได้แก่ พล็อต 3 มิติ, โคพล็อตหรือพล็อตเชิงโต้ตอบประเภทต่างๆ

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

ปรับปรุง:

ฉันได้เขียนโค้ดตัวอย่างง่ายๆใน R เพื่อทำแปลงเหล่านี้ ให้ฉันสังเกตบางสิ่ง: เนื่องจาก 'การกระทำ' เกิดขึ้นเร็วฉันจึงวิ่ง BID ผ่าน 700 (แต่อย่าลังเลที่จะขยายไปถึง 2000) ในตัวอย่างนี้ฉันใช้ฟังก์ชันที่คุณระบุและรับหมวดหมู่แรก (เช่นหญิงและชาย) เป็นหมวดหมู่อ้างอิง (ซึ่งเป็นค่าเริ่มต้นใน R) ในฐานะ @whuber บันทึกในความคิดเห็นของเขารุ่น LR เป็นแบบเชิงเส้นในอัตราต่อรองดังนั้นคุณสามารถใช้บล็อกแรกของค่าที่คาดการณ์และพล็อตตามที่คุณอาจใช้กับการถดถอยแบบ OLS หากคุณเลือก logit เป็นฟังก์ชั่นลิงค์ซึ่งช่วยให้คุณเชื่อมต่อโมเดลกับความน่าจะเป็น บล็อกที่สองแปลงอัตราต่อรองเข้าสู่ความน่าจะเป็นผ่านทางตรงกันข้ามของฟังก์ชั่น logit นั่นคือโดย exponentiating (กลายเป็นอัตราต่อรอง) แล้วแบ่งอัตราต่อรองโดย 1 + ราคา (ฉันพูดถึงลักษณะของฟังก์ชั่นลิงค์และรุ่นของประเภทนี้ที่นี่ถ้าคุณต้องการข้อมูลเพิ่มเติม)

BID = seq(from=0, to=700, by=10)

logOdds.F.young = -3.92 + .014*BID
logOdds.M.young = -3.92 + .014*BID + .25*1
logOdds.F.old   = -3.92 + .014*BID         + .15*1
logOdds.M.old   = -3.92 + .014*BID + .25*1 + .15*1

pY.F.young = exp(logOdds.F.young)/(1+ exp(logOdds.F.young))
pY.M.young = exp(logOdds.M.young)/(1+ exp(logOdds.M.young))
pY.F.old   = exp(logOdds.F.old)  /(1+ exp(logOdds.F.old))
pY.M.old   = exp(logOdds.M.old)  /(1+ exp(logOdds.M.old))

windows()
  par(mfrow=c(2,2))
  plot(x=BID, y=pY.F.young, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for young women")
  plot(x=BID, y=pY.M.young, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for young men")
  plot(x=BID, y=pY.F.old, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for old women")
  plot(x=BID, y=pY.M.old, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for old men")

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

windows()
  plot(x=BID, y=pY.F.young, type="l", col="red", lwd=1, 
       ylab="Pr(Y=1)", main="predicted probabilities")
  lines(x=BID, y=pY.M.young, col="blue", lwd=1)
  lines(x=BID, y=pY.F.old,   col="red",  lwd=2, lty="dotted")
  lines(x=BID, y=pY.M.old,   col="blue", lwd=2, lty="dotted")
  legend("bottomright", legend=c("young women", "young men", 
         "old women", "old men"), lty=c("solid", "solid", "dotted",
         "dotted"), lwd=c(1,1,2,2), col=c("red", "blue", "red", "blue"))

ผลิตในทางกลับกันพล็อตนี้:
ป้อนคำอธิบายรูปภาพที่นี่

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