Wie ermittelt man den besten Grenzpunkt und sein Konfidenzintervall anhand der ROC-Kurve in R?


51

Ich habe die Daten eines Tests, mit dem sich normale und Tumorzellen unterscheiden lassen. Laut ROC-Kurve sieht es für diesen Zweck gut aus (Fläche unter der Kurve ist 0,9):

ROC-Kurve

Meine Fragen sind:

  1. Wie wird der Grenzwert für diesen Test und sein Konfidenzintervall bestimmt, in dem die Messwerte als nicht eindeutig beurteilt werden sollten?
  2. Was ist der beste Weg, dies zu visualisieren (mit ggplot2)?

Das Diagramm wird mit ROCRund ggplot2-Paketen gerendert :

#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 enthält die folgenden Daten:

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

Antworten:


30

Vielen Dank an alle, die diese Frage beantwortet haben. Ich stimme zu, dass es keine richtige Antwort geben kann und die Kriterien stark von den Zielen abhängen, die hinter dem bestimmten diagnostischen Test stehen.

Schließlich hatte ich ein R-Paket OptimalCutpoints gefunden, das genau dem Auffinden von Cutoff-Punkten in einer solchen Art von Analyse gewidmet war. Tatsächlich gibt es verschiedene Methoden zur Bestimmung des Grenzpunkts.

  • "CB" (Kosten-Nutzen-Methode);
  • "MCT" (minimiert die Fehlklassifizierungskosten);
  • "MinValueSp" (ein Mindestwert für die Spezifität);
  • "MinValueSe" (ein Mindestwert für die Empfindlichkeit);
  • "RangeSp" (ein Wertebereich, der für die Spezifität festgelegt wurde);
  • "RangeSe" (ein Wertebereich für die Empfindlichkeit);
  • "ValueSp" (ein für die Spezifität festgelegter Wert);
  • "ValueSe" (ein für die Empfindlichkeit festgelegter Wert);
  • "MinValueSpSe" (ein Mindestwert für Spezifität und Empfindlichkeit);
  • "MaxSp" (maximiert die Spezifität);
  • "MaxSe" (maximiert die Empfindlichkeit);
  • "MaxSpSe" (maximiert gleichzeitig Empfindlichkeit und Spezifität);
  • "Max-SumSpSe" (maximiert die Summe von Sensitivität und Spezifität);
  • "MaxProdSpSe" (maximiert das Produkt aus Empfindlichkeit und Spezifität);
  • "ROC01" (minimiert den Abstand zwischen ROC-Kurve und Punkt (0,1));
  • "SpEqualSe" (Empfindlichkeit = Spezifität);
  • "Youden" (Youden Index);
  • "MaxEfficiency" (maximiert die Effizienz oder Genauigkeit);
  • "Minimax" (minimiert den häufigsten Fehler);
  • "AUC" (maximiert die Konkordanz, die eine Funktion der AUC ist);
  • "MaxDOR" (maximiert das Diagnosewahrscheinlichkeitsverhältnis);
  • "MaxKappa" (maximiert den Kappa-Index);
  • "MaxAccuracyArea" (maximiert den Genauigkeitsbereich);
  • "MinErrorRate" (minimiert die Fehlerrate);
  • "MinValueNPV" (ein Mindestwert für den negativen Vorhersagewert);
  • "MinValuePPV" (ein Mindestwert für den positiven Vorhersagewert);
  • "MinValueNPVPPV" (ein Mindestwert für Vorhersagewerte);
  • "PROC01" (minimiert den Abstand zwischen PROC-Diagramm und Punkt (0,1));
  • "NPVEqualPPV" (negativer Vorhersagewert = positiver Vorhersagewert);
  • "ValueDLR.Negative" (ein für Negative Diagnostic Likelihood Ratio eingestellter Wert);
  • "ValueDLR.Positive" (ein für Positive Diagnostic Likelihood Ratio eingestellter Wert);
  • "MinPvalue" (minimiert den mit dem statistischen Chi-Quadrat-Test verbundenen p-Wert, der die Assoziation zwischen dem Marker und dem bei Verwendung des Schnittpunkts erhaltenen binären Ergebnis misst);
  • "ObservedPrev" (der Wert, der der beobachteten Prävalenz am nächsten kommt);
  • "MeanPrev" (der Wert, der dem Mittelwert der diagnostischen Testwerte am nächsten kommt);
  • "PrevalenceMatching" (Der Wert, für den die vorhergesagte Prävalenz praktisch der beobachteten Prävalenz entspricht).

Die Aufgabe beschränkt sich nun darauf, die Methode auszuwählen, die für jede Situation am besten geeignet ist.

In der Paketdokumentation sind viele andere Konfigurationsoptionen beschrieben , darunter verschiedene Methoden zum Bestimmen von Konfidenzintervallen und eine detaillierte Beschreibung der einzelnen Methoden.


18
Die bloße Anzahl von Methoden ist ein Zeichen für die Willkür eines Cutoffs. Und da es völlig unangemessen ist, Grenzwerte für Eingabevariablen zu verwenden und nur nach einem prognostizierten Gesamtwert zu suchen (falls erforderlich), ist nicht klar, warum hierfür so viel Aufwand aufgewendet wird. Wenn Sie eine Bayes-Optimierungsentscheidungsregel mit einer Verlustfunktion einrichten, wird alles erledigt. Keine ROC-Kurve, keine Rücklaufwahrscheinlichkeiten wie Sensitivität und Spezifität, keine Grenzwerte für Eingabevariablen.
Frank Harrell

@FrankHarrell Könnten Sie das näher erläutern? "Wenn Sie eine Bayes-Optimalentscheidungsregel mit einer Verlustfunktion einrichten, wird für alles gesorgt." Wo finde ich mehr Literatur dazu?
Black Milk

1
Lesen Sie in der Literatur nach, wie Bayes optimale Entscheidungen trifft und welche Bewertungsregeln gelten.
Frank Harrell

26

Meiner Meinung nach gibt es mehrere Abschaltoptionen. Sie können Sensitivität und Spezifität unterschiedlich gewichten (zum Beispiel ist es für Sie wichtiger, einen hochsensitiven Test durchzuführen, obwohl dies einen niedrigen spezifischen Test bedeutet. Oder umgekehrt).

Wenn Empfindlichkeit und Spezifität für Sie gleich wichtig sind, besteht eine Möglichkeit zur Berechnung des Cutoff darin, den Wert zu wählen, der den euklidischen Abstand zwischen Ihrer ROC-Kurve und der oberen linken Ecke Ihres Diagramms minimiert.

Eine andere Möglichkeit besteht darin, den maximierten Wert (Empfindlichkeit + Spezifität - 1) als Grenzwert zu verwenden.

Leider habe ich keine Referenzen für diese beiden Methoden, da ich sie von Professoren oder anderen Statistikern gelernt habe. Ich habe nur gehört, dass ich die letztgenannte Methode als Youden-Index bezeichnet habe [1].

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


15

Widerstehen Sie der Versuchung, eine Grenze zu finden. Sofern Sie nicht über eine vordefinierte Funktion für Nutzen / Verlust / Kosten verfügen, steht eine Abschaltung im Widerspruch zu einer optimalen Entscheidungsfindung. Und eine ROC-Kurve ist für dieses Problem irrelevant.


7

Mathematisch gesehen benötigen Sie eine andere Bedingung, um den Cut-Off zu lösen.

Sie können den Punkt von @ Andrea folgendermaßen übersetzen: "Externes Wissen über das zugrunde liegende Problem verwenden".

Beispielbedingungen:

  • Für diese Anwendung benötigen wir Sensitivität> = x und / oder Spezifität> = y.

  • Ein falsches Negativ ist 10 x so schlecht wie ein falsches Positiv. (Das würde Ihnen eine Änderung des nächstgelegenen Punkts zur idealen Ecke geben.)


1
Genau richtig, dass Sie externes Wissen benötigen, um die optimale Entscheidung zu treffen. Die Verlustfunktion wird jedoch nicht in Bezug auf die obigen Größen angegeben, und die optimale Entscheidung ergibt sich aus der vorhergesagten Wahrscheinlichkeit des Ergebnisses für das einzelne Subjekt, gekoppelt mit der Verlustfunktion.
Frank Harrell

6

Visualisieren Sie die Genauigkeit gegenüber dem Cutoff. Weitere Informationen finden Sie in der ROCR-Dokumentation und in der sehr schönen Präsentation derselben.

Bildbeschreibung hier eingeben


1
Wenn Sie sich den Quellcode genauer ansehen, habe ich dieses Paket verwendet und die Dokumentation zu diesem Paket gelesen. Es hat keine Werkzeuge, um die richtigen Grenzpunkte und "Grauzone" zu bestimmen
Yuriy Petrovskiy

1
Ich habe auf jeden Fall Ihren Code gelesen, aber es gibt keinen Begriff wie "rechter Grenzwert", aber die Darstellung Genauigkeit gegen Grenzwert kann Ihnen den richtigen Einblick geben. Und mit diesem Diagramm können Sie herausfinden, wie Sie den Cutoff für maximale Genauigkeit finden.
Vladimir Chupakhin

2

Was noch wichtiger ist - es gibt sehr wenige Datenpunkte hinter dieser Kurve. Wenn Sie sich für einen Kompromiss zwischen Empfindlichkeit und Spezifität entscheiden, empfehle ich Ihnen dringend, die Kurve und die daraus resultierende Cutoff-Zahl zu booten. Möglicherweise stellen Sie fest, dass Ihre geschätzte Höchstgrenze sehr ungewiss ist.


1
Das Experiment ist noch im Gange, daher werde ich weitere Datenpunkte erhalten. Ich interessiere mich für Methodik (ich denke, dass es für jede Anzahl von Datenpunkten das gleiche ist). Und ich hatte keine statistische Methode zur Bestimmung der "Grauzone" gefunden, während sie in Tests dieser Art weit verbreitet ist.
Yuriy Petrovskiy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.