การรับค่าที่คาดการณ์ (Y = 1 หรือ 0) จากแบบจำลองการถดถอยโลจิสติกพอดี


50

สมมติว่าผมมีวัตถุของคลาสglm(สอดคล้องกับรูปแบบการถดถอยโลจิสติก) และฉันต้องการที่จะเปิดความน่าจะเป็นที่คาดการณ์ที่ได้รับจากpredict.glmการใช้อาร์กิวเมนต์type="response"ลงในการตอบสนองไบนารีคือหรือ 0 วิธีที่เร็วและเป็นที่ยอมรับมากที่สุดในการทำเช่นนี้ใน R คืออะไร?Y = 0Y=1Y=0

ในขณะที่อีกครั้งฉันรู้predict.glmฉันไม่ทราบว่าค่า cutoff ที่อยู่ตรงไหน- และฉันคิดว่านี่เป็นบล็อกหลักของฉันที่นี่P(Yi=1|X^i)

คำตอบ:


77

เมื่อคุณมีความน่าจะเป็นที่คาดการณ์แล้วมันก็ขึ้นอยู่กับคุณว่าคุณต้องการใช้ขีด จำกัด อะไร คุณอาจเลือกเกณฑ์เพื่อเพิ่มประสิทธิภาพความไวความเจาะจงหรือวัดสิ่งที่สำคัญที่สุดในบริบทของแอปพลิเคชัน (ข้อมูลเพิ่มเติมบางอย่างจะมีประโยชน์ที่นี่สำหรับคำตอบที่เฉพาะเจาะจงมากขึ้น) คุณอาจต้องการดู ROC curves และมาตรการอื่น ๆ ที่เกี่ยวข้องกับการจัดประเภทที่เหมาะสม

แก้ไข:เพื่อชี้แจงคำตอบนี้ค่อนข้างฉันจะยกตัวอย่าง คำตอบที่แท้จริงคือการตัดยอดที่ดีที่สุดนั้นขึ้นอยู่กับคุณสมบัติของลักษณนามที่มีความสำคัญในบริบทของแอพพลิเคชั่น ให้เป็นค่าที่แท้จริงสำหรับการสังเกตและเป็นคลาสที่ทำนายไว้ มาตรการทั่วไปของประสิทธิภาพการทำงานคือฉันYฉันYiiY^i

(1) ความไว: - สัดส่วนของ '1 ที่ระบุอย่างถูกต้องเช่นนั้นP(Y^i=1|Yi=1)

(2) ความเฉพาะ: - สัดส่วนของ '0 ที่ระบุอย่างถูกต้องเช่นนั้นP(Y^i=0|Yi=0)

(3) (ถูกต้อง) อัตราการจำแนกประเภท: - สัดส่วนของการทำนายที่ถูกต้องP(Yi=Y^i)

(1) เรียกอีกอย่างว่าอัตราบวกจริง (2) เรียกอีกอย่างว่าอัตราลบจริง

ตัวอย่างเช่นหากตัวจําแนกของคุณมีเป้าหมายเพื่อประเมินผลการทดสอบการวินิจฉัยโรคที่ร้ายแรงซึ่งมีวิธีรักษาที่ค่อนข้างปลอดภัยความไวเป็นสิ่งสําคัญกว่าความจำเพาะ ในอีกกรณีหนึ่งหากโรคมีขนาดค่อนข้างเล็กและการรักษามีความเสี่ยงความจำเพาะจะมีความสำคัญต่อการควบคุมมากกว่า สำหรับปัญหาการจำแนกประเภทโดยทั่วไปจะถือว่า "ดี" เพื่อเพิ่มประสิทธิภาพความไวและข้อมูลจำเพาะร่วมกันตัวอย่างเช่นคุณอาจใช้ตัวจําแนกที่ลดระยะห่างของปริภูมิแบบยุคลิดที่สั้นที่สุดจากจุด :(1,1)

δ=[P(Yi=1|Y^i=1)1]2+[P(Yi=0|Y^i=0)1]2

δสามารถถ่วงน้ำหนักหรือแก้ไขในอีกทางหนึ่งเพื่อสะท้อนการวัดระยะทางที่สมเหตุสมผลมากขึ้นจากในบริบทของแอปพลิเคชัน - ระยะทางแบบยุคลิดจาก (1,1) ถูกเลือกที่นี่โดยพลการเพื่อวัตถุประสงค์ในการอธิบาย ในกรณีใด ๆ มาตรการทั้งสี่นี้อาจเหมาะสมที่สุดขึ้นอยู่กับแอปพลิเคชัน(1,1)

ด้านล่างเป็นตัวอย่างที่จำลองขึ้นโดยใช้การทำนายจากตัวแบบการถดถอยโลจิสติกเพื่อจำแนก ทางลัดต่าง ๆ เพื่อดูว่าทางลัดให้ตัวแยกประเภท "ดีที่สุด" ภายใต้มาตรการสามอย่างนี้ ในตัวอย่างนี้ข้อมูลมาจากตัวแบบการถดถอยโลจิสติกพร้อมตัวทำนายสามตัว (ดูรหัส R ด้านล่างพล็อต) ดังที่คุณเห็นได้จากตัวอย่างนี้การตัดยอด "ดีที่สุด" ขึ้นอยู่กับมาตรการเหล่านี้สำคัญที่สุด - นี่ขึ้นอยู่กับการใช้งานทั้งหมด

แก้ไข 2: และ , ค่าพยากรณ์เชิงบวกและค่าทำนายเชิงลบ (หมายเหตุเหล่านี้ไม่เหมือนกัน เนื่องจากความไวและความเฉพาะเจาะจง) อาจเป็นตัวชี้วัดประสิทธิภาพที่มีประโยชน์P ( Y ฉัน = 0 | Yฉัน = 0 )P(Yi=1|Y^i=1)P(Yi=0|Y^i=0)

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

# data y simulated from a logistic regression model 
# with with three predictors, n=10000
x = matrix(rnorm(30000),10000,3)
lp = 0 + x[,1] - 1.42*x[2] + .67*x[,3] + 1.1*x[,1]*x[,2] - 1.5*x[,1]*x[,3] +2.2*x[,2]*x[,3] + x[,1]*x[,2]*x[,3]
p = 1/(1+exp(-lp))
y = runif(10000)<p

# fit a logistic regression model
mod = glm(y~x[,1]*x[,2]*x[,3],family="binomial")

# using a cutoff of cut, calculate sensitivity, specificity, and classification rate
perf = function(cut, mod, y)
{
   yhat = (mod$fit>cut)
   w = which(y==1)
   sensitivity = mean( yhat[w] == 1 ) 
   specificity = mean( yhat[-w] == 0 ) 
   c.rate = mean( y==yhat ) 
   d = cbind(sensitivity,specificity)-c(1,1)
   d = sqrt( d[1]^2 + d[2]^2 ) 
   out = t(as.matrix(c(sensitivity, specificity, c.rate,d)))
   colnames(out) = c("sensitivity", "specificity", "c.rate", "distance")
   return(out)
}

s = seq(.01,.99,length=1000)
OUT = matrix(0,1000,4)
for(i in 1:1000) OUT[i,]=perf(s[i],mod,y)
plot(s,OUT[,1],xlab="Cutoff",ylab="Value",cex.lab=1.5,cex.axis=1.5,ylim=c(0,1),type="l",lwd=2,axes=FALSE,col=2)
axis(1,seq(0,1,length=5),seq(0,1,length=5),cex.lab=1.5)
axis(2,seq(0,1,length=5),seq(0,1,length=5),cex.lab=1.5)
lines(s,OUT[,2],col="darkgreen",lwd=2)
lines(s,OUT[,3],col=4,lwd=2)
lines(s,OUT[,4],col="darkred",lwd=2)
box()
legend(0,.25,col=c(2,"darkgreen",4,"darkred"),lwd=c(2,2,2,2),c("Sensitivity","Specificity","Classification Rate","Distance"))

2
(+1) คำตอบที่ดีมาก ฉันชอบตัวอย่าง มีการตีความพร้อมหรือไม่ที่คุณรู้ว่าจะกระตุ้นการใช้ระยะทางแบบยุคลิดที่คุณได้ให้ไว้? ฉันยังคิดว่ามันน่าสนใจที่จะชี้ให้เห็นในบริบทนี้ว่าเส้นโค้ง ROC นั้นได้มาโดยการปรับเปลี่ยนโพสต์เฉพาะกิจของการประมาณค่าสกัดกั้นของแบบจำลองลอจิสติก
พระคาร์ดินัล

@ สำคัญฉันรู้ว่าเกณฑ์สำหรับการจำแนกไบนารีมักจะเลือกตามจุดบนเส้นโค้ง ROC ที่ใกล้เคียงที่สุด (1,1) - ระยะทางแบบยุคลิดนั้นเป็นนิยามเริ่มต้นของ "ระยะทาง" ในตัวอย่างของฉัน
มาโคร

ฉันเห็น. ฉันคิดว่าอาจมีการตีความปริมาณที่เข้าใจได้ง่ายนี้ในแง่ของแบบจำลองพื้นฐานที่ฉันไม่เห็น (อาจจะมี [?])
สำคัญ

อาจเป็นเพราะฉันได้พบจุดที่ความไวและความโค้งเฉพาะเป็นจุดตัดเดียวกับที่ถูกย่อให้เล็กสุด ...δ
มาโคร

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