รหัสที่คุณใช้ประมาณการแบบจำลองการถดถอยแบบลอจิสติกโดยใช้glm
ฟังก์ชัน คุณไม่ได้รวมข้อมูลดังนั้นฉันจะทำขึ้น
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
ตัวแบบการถดถอยแบบโลจิสติกส์จะจำลองความสัมพันธ์ระหว่างตัวแปรการตอบสนองแบบไบนารีและในกรณีนี้คือตัวทำนายแบบต่อเนื่องหนึ่งตัว ผลที่ได้คือความน่าจะเป็นแบบ logit-transformซึ่งเป็นความสัมพันธ์เชิงเส้นกับตัวทำนาย ในกรณีของคุณผลที่ได้คือการตอบสนองแบบไบนารีที่สอดคล้องกับการชนะหรือไม่ชนะการเดิมพันและจะถูกทำนายโดยมูลค่าของการเดิมพัน ค่าสัมประสิทธิ์จากmod1
จะได้รับในอัตราต่อรองที่บันทึกไว้ (ซึ่งยากต่อการตีความ) ตาม:
logit ( p ) = บันทึก( หน้า( 1 - p )) = β0+ β1x1
ในการแปลงอัตราต่อรองที่บันทึกไว้เป็นความน่าจะเป็นเราสามารถแปลด้านบนเป็น
P = ประสบการณ์( β0+β1x1)( 1) + ประสบการณ์(β0+β1x1) )
คุณสามารถใช้ข้อมูลนี้เพื่อตั้งค่าพล็อต ก่อนอื่นคุณต้องใช้ช่วงของตัวแปรทำนาย:
plotdat <- data.frame(bid=(0:1000))
จากนั้นใช้predict
คุณสามารถรับการทำนายตามแบบจำลองของคุณ
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
โปรดทราบว่าสามารถติดตั้งค่าที่ติดตั้งผ่าน
mod1$fitted
โดยการระบุse.fit=TRUE
คุณจะได้รับข้อผิดพลาดมาตรฐานที่เกี่ยวข้องกับค่าติดตั้งแต่ละค่า ผลลัพธ์ที่ได้data.frame
คือเมทริกซ์ที่มีองค์ประกอบต่อไปนี้: การคาดคะเนที่พอดี ( fit
) ข้อผิดพลาดมาตรฐานโดยประมาณ ( se.fit
) และสเกลาร์ที่ให้สแควร์รูทของการกระจายตัวที่ใช้ในการคำนวณข้อผิดพลาดมาตรฐาน ( residual.scale
) ในกรณีของ logit ทวินามที่ค่าจะเป็น 1 (ซึ่งคุณสามารถมองเห็นโดยการป้อนpreddat$residual.scale
ในR
) หากคุณต้องการดูตัวอย่างของสิ่งที่คุณคำนวณไปแล้วคุณสามารถพิมพ์head(data.frame(preddat))
ได้
ขั้นตอนต่อไปคือการตั้งค่าพล็อต ฉันต้องการตั้งค่าพื้นที่การลงจุดว่างเปล่าด้วยพารามิเตอร์ก่อน:
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
ตอนนี้คุณสามารถดูได้ว่าการคำนวณความน่าจะเป็นที่ติดตั้งไว้เป็นสิ่งสำคัญอย่างไร คุณสามารถวาดเส้นที่สอดคล้องกับความน่าจะเป็นที่ติดตั้งตามสูตรที่สองข้างต้น การใช้preddat data.frame
คุณสามารถแปลงค่าติดตั้งเป็นความน่าจะเป็นและใช้ในการพล็อตบรรทัดกับค่าของตัวแปรตัวทำนายของคุณ
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
สุดท้ายตอบคำถามของคุณคุณสามารถเพิ่มช่วงความมั่นใจลงในพล็อตได้โดยการคำนวณความน่าจะเป็นสำหรับค่าติดตั้งคูณ+/- 1.96
กับข้อผิดพลาดมาตรฐาน:
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
พล็อตที่เกิดขึ้น (จากข้อมูลที่สร้างแบบสุ่ม) ควรมีลักษณะดังนี้:
เพื่อประโยชน์ของความเหมาะสมนี่คือรหัสทั้งหมดในอันเดียว:
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
plotdat <- data.frame(bid=(0:1000))
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
(หมายเหตุ: นี่เป็นคำตอบที่แก้ไขอย่างหนักเพื่อให้มีความเกี่ยวข้องกับ stats.stackexchange มากขึ้น)