วิธีการกำหนดจุดตัดที่ดีที่สุดและช่วงความมั่นใจโดยใช้เส้นโค้ง ROC ใน R?


51

ฉันมีข้อมูลการทดสอบที่สามารถใช้แยกแยะเซลล์ปกติและเนื้องอก ตามโค้ง ROC มันดูดีสำหรับจุดประสงค์นี้ (พื้นที่ใต้เส้นโค้งคือ 0.9):

เส้นโค้ง ROC

คำถามของฉันคือ:

  1. จะกำหนดจุดตัดสำหรับการทดสอบนี้และช่วงความมั่นใจได้อย่างไรโดยที่การอ่านควรถูกตัดสินว่าไม่ชัดเจน
  2. วิธีที่ดีที่สุดในการมองเห็นภาพนี้ggplot2คืออะไร

กราฟแสดงผลโดยใช้ROCRและggplot2แพ็คเกจ:

#install.packages("ggplot2","ROCR","verification") #if not installed yet
library("ggplot2")
library("ROCR")
library("verification")
d <-read.csv2("data.csv", sep=";")
pred <- with(d,prediction(x,test))
perf <- performance(pred,"tpr", "fpr")
auc <-performance(pred, measure = "auc")@y.values[[1]]
rd <- data.frame(x=perf@x.values[[1]],y=perf@y.values[[1]])
p <- ggplot(rd,aes(x=x,y=y)) + geom_path(size=1)
p <- p + geom_segment(aes(x=0,y=0,xend=1,yend=1),colour="black",linetype= 2)
p <- p + geom_text(aes(x=1, y= 0, hjust=1, vjust=0, label=paste(sep = "", "AUC = ",round(auc,3) )),colour="black",size=4)
p <- p + scale_x_continuous(name= "False positive rate")
p <- p + scale_y_continuous(name= "True positive rate")
p <- p + opts(
            axis.text.x = theme_text(size = 10),
            axis.text.y = theme_text(size = 10),
            axis.title.x = theme_text(size = 12,face = "italic"),
            axis.title.y = theme_text(size = 12,face = "italic",angle=90),
            legend.position = "none",
            legend.title = theme_blank(),
            panel.background = theme_blank(),
            panel.grid.minor = theme_blank(), 
            panel.grid.major = theme_line(colour='grey'),
            plot.background = theme_blank()
            )
p

data.csv มีข้อมูลต่อไปนี้:

x;group;order;test
56;Tumor;1;1
55;Tumor;1;1
52;Tumor;1;1
60;Tumor;1;1
54;Tumor;1;1
43;Tumor;1;1
52;Tumor;1;1
57;Tumor;1;1
50;Tumor;1;1
34;Tumor;1;1
24;Normal;2;0
34;Normal;2;0
22;Normal;2;0
32;Normal;2;0
25;Normal;2;0
23;Normal;2;0
23;Normal;2;0
19;Normal;2;0
56;Normal;2;0
44;Normal;2;0

คำตอบ:


30

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

ในที่สุดฉันก็ได้พบแพคเกจ R OptimalCutpoints ที่ทุ่มเทให้กับการค้นหาจุดตัดในการวิเคราะห์ประเภทนี้ จริงๆแล้วมีหลายวิธีในการกำหนดจุดตัด

  • "CB" (วิธีประหยัดต้นทุน);
  • "MCT" (ลดระยะเวลาการจัดประเภทค่าใช้จ่ายให้น้อยลง);
  • "MinValueSp" (การตั้งค่าขั้นต่ำสำหรับความเจาะจง);
  • "MinValueSe" (ค่าขั้นต่ำที่กำหนดไว้สำหรับความไว);
  • "RangeSp" (ช่วงของค่าที่ตั้งไว้สำหรับ Specificity);
  • "RangeSe" (ช่วงของค่าที่ตั้งไว้สำหรับความไว);
  • "ValueSp" (ชุดของค่าสำหรับความเจาะจง);
  • "ValueSe" (ค่าที่ตั้งไว้สำหรับความไว);
  • "MinValueSpSe" (การตั้งค่าขั้นต่ำสำหรับความจำเพาะและความไว);
  • "MaxSp" (ขยายความจำเพาะสูงสุด);
  • "MaxSe" (เพิ่มความไวสูงสุด);
  • "MaxSpSe" (เพิ่มความไวและความจำเพาะสูงสุดพร้อมกัน);
  • "Max-SumSpSe" (เพิ่มผลรวมของความไวและความเฉพาะเจาะจงสูงสุด)
  • "MaxProdSpSe" (เพิ่มผลิตภัณฑ์ความไวและความจำเพาะสูงสุด)
  • "ROC01" (ลดระยะห่างระหว่างพล็อต ROC และจุดให้น้อยที่สุด (0,1));
  • "SpEqualSe" (ความไว = ความจำเพาะ);
  • "Youden" (ดัชนี Youden);
  • "MaxEfficiency" (เพิ่มประสิทธิภาพหรือความแม่นยำสูงสุด);
  • "Minimax" (ลดข้อผิดพลาดที่พบบ่อยที่สุด);
  • "AUC" (เพิ่มความสอดคล้องซึ่งเป็นหน้าที่ของ AUC)
  • "MaxDOR" (เพิ่มอัตราส่วนอัตราต่อรองที่วินิจฉัยสูงสุด);
  • "MaxKappa" (เพิ่มดัชนีคัปปาให้สูงสุด);
  • "MaxAccuracyArea" (ขยายขอบเขตความแม่นยำให้สูงสุด);
  • "MinErrorRate" (ลดอัตราความผิดพลาดให้น้อยที่สุด);
  • "MinValueNPV" (ค่าขั้นต่ำที่ตั้งไว้สำหรับค่าทำนายเชิงลบ);
  • "MinValuePPV" (ค่าขั้นต่ำที่ตั้งไว้สำหรับค่าทำนายเชิงบวก);
  • "MinValueNPVPPV" (ค่าขั้นต่ำที่ตั้งไว้สำหรับค่า Predictive);
  • "PROC01" (ลดระยะห่างระหว่างพล็อต PROC และจุด (0,1) ให้น้อยที่สุด);
  • "NPVEqualPPV" (ค่าพยากรณ์เชิงลบ = ค่าพยากรณ์เชิงบวก);
  • "ValueDLR.Negative" (ชุดค่าสำหรับอัตราส่วนการวิเคราะห์ความน่าจะเป็นเชิงลบ);
  • "ValueDLR.Positive" (ค่าที่กำหนดสำหรับอัตราส่วนการวิเคราะห์ความน่าจะเป็นเชิงบวก);
  • "MinPvalue" (ย่อขนาด p-value ที่เกี่ยวข้องกับการทดสอบ Chi-squared เชิงสถิติซึ่งวัดความสัมพันธ์ระหว่างเครื่องหมายและผลไบนารีที่ได้จากการใช้จุดตัด)
  • "ObservedPrev" (ค่าที่ใกล้เคียงกับความชุกที่สังเกตมากที่สุด);
  • "MeanPrev" (ค่าที่ใกล้เคียงที่สุดกับค่าเฉลี่ยของค่าทดสอบวินิจฉัย);
  • "PrevalenceMatching" (ค่าที่ความชุกที่คาดการณ์ไว้มีค่าเท่ากับความชุกที่สังเกต)

ดังนั้นตอนนี้งานจะถูก จำกัด ให้แคบลงเพื่อเลือกวิธีที่เหมาะสมที่สุดสำหรับแต่ละสถานการณ์

มีตัวเลือกการกำหนดค่าอื่น ๆ อีกมากมายที่อธิบายไว้ในเอกสารประกอบแพคเกจรวมถึงวิธีการต่างๆในการกำหนดช่วงความมั่นใจและคำอธิบายโดยละเอียดของแต่ละวิธี


18
จำนวนวิธีการที่แท้จริงเป็นสัญญาณของความเด็ดขาดของการตัดทอน และเนื่องจากมันไม่เหมาะสมอย่างยิ่งที่จะใช้ cutoffs กับตัวแปรอินพุตและเหมาะสมที่จะค้นหา cutoff (ถ้าคุณต้อง) ตามค่าที่คาดการณ์โดยรวมจึงไม่ชัดเจนว่าทำไมจึงต้องใช้ความพยายามอย่างมากในเรื่องนี้ หากคุณตั้งค่ากฎการตัดสินใจที่เหมาะสมที่สุดของ Bayes พร้อมกับฟังก์ชั่นการสูญเสีย ไม่มีเส้นโค้ง ROC ไม่มีความน่าจะเป็นเวลาย้อนหลังเช่นความไวและความเฉพาะเจาะจงไม่มีการตัดทอนตัวแปรอินพุต
Frank Harrell

@ Frankankarrell คุณช่วยอธิบายเรื่องนี้ได้ไหม? "หากคุณตั้งค่ากฎการตัดสินใจที่เหมาะสมที่สุดของเบย์พร้อมกับฟังก์ชั่นการสูญเสียทุกอย่างจะได้รับการดูแล" ฉันจะหาวรรณกรรมเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่ไหน
นมดำ

1
ดูวรรณกรรมเกี่ยวกับการตัดสินใจที่ดีที่สุดของเบย์และกฎการให้คะแนนที่เหมาะสม
Frank Harrell

26

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

หากความไวและความเฉพาะเจาะจงมีความสำคัญกับคุณเช่นกันวิธีหนึ่งในการคำนวณทางลัดคือเลือกค่าที่ช่วยลดระยะห่างแบบยุคลิดระหว่างเส้นโค้ง ROC ของคุณและมุมซ้ายบนของกราฟ

อีกวิธีคือใช้ค่าที่เพิ่ม (ความไว + ความจำเพาะ - 1) เป็นค่าสูงสุด

น่าเสียดายที่ฉันไม่มีการอ้างอิงสำหรับสองวิธีนี้เนื่องจากฉันได้เรียนรู้จากอาจารย์หรือนักสถิติอื่น ๆ ฉันเคยได้ยินเพียงอ้างถึงวิธีการหลังเป็นดัชนี 'Youden' [1])

[1] https://en.wikipedia.org/wiki/Youden%27s_J_statistic


15

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


7

การพูดทางคณิตศาสตร์คุณต้องการเงื่อนไขอื่นเพื่อแก้ปัญหาการถูกตัดออก

คุณอาจแปล @ Andrea ถึง: "ใช้ความรู้ภายนอกเกี่ยวกับปัญหาพื้นฐาน"

เงื่อนไขตัวอย่าง:

  • สำหรับแอปพลิเคชันนี้เราต้องการความไว> = x และ / หรือความเฉพาะเจาะจง> = y

  • ค่าลบที่เป็นเท็จคือ 10 x ไม่ดีเท่าของค่าบวกที่ผิด (นั่นจะทำให้คุณปรับเปลี่ยนจุดที่ใกล้ที่สุดไปยังมุมในอุดมคติ)


1
ถูกต้องที่คุณต้องการความรู้จากภายนอกเพื่อรับการตัดสินใจที่เหมาะสมที่สุด แต่ฟังก์ชั่นการสูญเสียไม่ได้ระบุไว้ในแง่ของปริมาณข้างต้นและการตัดสินใจที่เหมาะสมนั้นมาจากความน่าจะเป็นที่คาดการณ์ไว้ของผลลัพธ์สำหรับแต่ละวิชาควบคู่ไปกับฟังก์ชั่นการสูญเสีย
Frank Harrell

6

เห็นภาพความแม่นยำและทางลัด คุณสามารถอ่านรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบ ROCR และการนำเสนอที่ดีมากจากสิ่งเดียวกัน

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


1
หากคุณมองใกล้ซอร์สโค้ดฉันใช้แพ็คเกจนี้และอ่านเอกสารประกอบของแพ็คเกจนี้ ไม่มีเครื่องมือในการกำหนดจุดตัดที่ถูกต้องและ "โซนสีเทา"
Yuriy Petrovskiy

1
ฉันอ่านโค้ดของคุณแน่นอน แต่ไม่มีคำเช่น "right cutoff" แต่พล็อต Accuracy vs cutoff สามารถให้ข้อมูลเชิงลึกที่ถูกต้องแก่คุณ และการใช้พล็อตนี้คุณสามารถหาวิธีหาทางลัดเพื่อความแม่นยำสูงสุด
Vladimir Chupakhin

2

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


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