Come determinare il miglior punto di taglio e il suo intervallo di confidenza usando la curva ROC in R?


51

Ho i dati di un test che potrebbe essere utilizzato per distinguere le cellule normali e tumorali. Secondo la curva ROC sembra buono per questo scopo (l'area sotto la curva è 0.9):

Curva ROC

Le mie domande sono:

  1. Come determinare il punto limite per questo test e il suo intervallo di confidenza in cui le letture devono essere giudicate ambigue?
  2. Qual è il modo migliore per visualizzarlo (usando ggplot2)?

Il grafico viene reso usando ROCRe ggplot2pacchetti:

#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 contiene i seguenti dati:

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

Risposte:


30

Grazie a tutti coloro che hanno risposto a questa domanda. Concordo sul fatto che non ci potrebbe essere una risposta corretta e che i criteri dipendono in larga misura dagli obiettivi alla base di determinati test diagnostici.

Alla fine avevo trovato un pacchetto R OptimalCutpoints dedicato esattamente alla ricerca del punto limite in questo tipo di analisi. In realtà ci sono diversi metodi per determinare il punto di taglio.

  • "CB" (metodo costo-beneficio);
  • "MCT" (riduce al minimo il termine di classificazione errata);
  • "MinValueSp" (un valore minimo impostato per Specificità);
  • "MinValueSe" (un valore minimo impostato per Sensibilità);
  • "RangeSp" (un intervallo di valori impostato per Specificità);
  • "RangeSe" (un intervallo di valori impostato per Sensibilità);
  • "ValueSp" (un valore impostato per Specificity);
  • "ValueSe" (un valore impostato per Sensibilità);
  • "MinValueSpSe" (un valore minimo impostato per Specificità e Sensibilità);
  • "MaxSp" (massimizza la specificità);
  • "MaxSe" (massimizza la sensibilità);
  • "MaxSpSe" (massimizza contemporaneamente la sensibilità e la specificità);
  • "Max-SumSpSe" (massimizza la somma di sensibilità e specificità);
  • "MaxProdSpSe" (massimizza il prodotto di sensibilità e specificità);
  • "ROC01" (minimizza la distanza tra il diagramma ROC e il punto (0,1));
  • "SpEqualSe" (Sensibilità = Specificità);
  • "Youden" (indice Youden);
  • "MaxEfficiency" (massimizza l'efficienza o la precisione);
  • "Minimax" (minimizza l'errore più frequente);
  • "AUC" (massimizza la concordanza che è una funzione dell'AUC);
  • "MaxDOR" (massimizza il rapporto delle quote diagnostiche);
  • "MaxKappa" (massimizza l'indice Kappa);
  • "MaxAccuracyArea" (massimizza l'area di precisione);
  • "MinErrorRate" (riduce al minimo il tasso di errore);
  • "MinValueNPV" (un valore minimo impostato per Valore predittivo negativo);
  • "MinValuePPV" (un valore minimo impostato per il valore predittivo positivo);
  • "MinValueNPVPPV" (un valore minimo impostato per i valori predittivi);
  • "PROC01" (minimizza la distanza tra il diagramma PROC e il punto (0,1));
  • "NPVEqualPPV" (valore predittivo negativo = valore predittivo positivo);
  • "ValueDLR.Negative" (un valore impostato per Negative Diagnostic Likelihood Ratio);
  • "ValueDLR.Positive" (un valore impostato per Rapporto di verosimiglianza diagnostica positiva);
  • "MinPvalue" (minimizza il valore p associato al test statico Chi-quadrato che misura l'associazione tra il marcatore e il risultato binario ottenuto usando il punto di taglio);
  • "ObservedPrev" (Il valore più vicino alla prevalenza osservata);
  • "MeanPrev" (Il valore più vicino alla media dei valori del test diagnostico);
  • "PrevalenceMatching" (Il valore per il quale la prevalenza prevista è praticamente uguale alla prevalenza osservata).

Quindi ora l'attività è ristretta alla selezione del metodo che è la migliore corrispondenza per ogni situazione.

Esistono molte altre opzioni di configurazione descritte nella documentazione del pacchetto, inclusi diversi metodi per determinare gli intervalli di confidenza e una descrizione dettagliata di ciascuno dei metodi.


18
Il semplice numero di metodi è un segno dell'arbitrarietà di un taglio. E poiché è del tutto inappropriato utilizzare i valori di cutoff sulle variabili di input e solo cercare il valore di cutoff (se necessario) su un valore complessivo previsto, non è chiaro il motivo per cui si spendono così tanti sforzi su questo. Se imposti una regola di decisione ottimale di Bayes con una funzione di perdita, tutto viene curato; nessuna curva ROC, nessuna probabilità di arretramento come sensibilità e specificità, nessuna interruzione delle variabili di input.
Frank Harrell,

@FrankHarrell Potresti approfondire questo? "Se si imposta una regola di decisione ottimale di Bayes con una funzione di perdita, tutto viene curato." Dove posso trovare più letteratura su questo?
Black Milk,

1
Guarda la letteratura sulle decisioni ottimali di Bayes e sulle regole di punteggio adeguate.
Frank Harrell,

26

A mio avviso, ci sono più opzioni di taglio. Potresti ponderare la sensibilità e la specificità in modo diverso (ad esempio, forse per te è più importante avere un test ad alta sensibilità anche se questo significa avere un test specifico basso. O viceversa).

Se la sensibilità e la specificità hanno la stessa importanza per te, un modo per calcolare il cut-off è scegliere quel valore che minimizza la distanza euclidea tra la tua curva ROC e l'angolo in alto a sinistra del tuo grafico.

Un altro modo consiste nell'utilizzare il valore che massimizza (sensibilità + specificità - 1) come limite.

Sfortunatamente, non ho riferimenti per questi due metodi come li ho appresi da professori o altri statistici. Ho sentito solo riferirsi a quest'ultimo metodo come "indice di Youden" [1]).

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


15

Resistere alla tentazione di trovare un taglio. A meno che non si disponga di una funzione di utilità / perdita / costo predefinita, un taglio vola di fronte a un processo decisionale ottimale. E una curva ROC è irrilevante per questo problema.


7

Matematicamente parlando, hai bisogno di un'altra condizione da risolvere per il taglio.

Puoi tradurre il punto di @Andrea a: "utilizzare le conoscenze esterne sul problema di fondo".

Condizioni di esempio:

  • per questa applicazione, abbiamo bisogno di sensibilità> = x, e / o specificità> = y.

  • un falso negativo è 10 volte più cattivo di un falso positivo. (Ciò ti darebbe una modifica del punto più vicino all'angolo ideale.)


1
Esatto che hai bisogno di conoscenze esterne per ottenere la decisione ottimale. Ma la funzione di perdita non è dichiarata in termini di quantità sopra indicate e la decisione ottimale deriva dalla probabilità prevista del risultato per il singolo soggetto, unita alla funzione di perdita.
Frank Harrell,

6

Visualizza la precisione rispetto al valore soglia. Puoi leggere maggiori dettagli nella documentazione ROCR e una presentazione molto piacevole dalla stessa.

inserisci qui la descrizione dell'immagine


1
Se guardi più da vicino al codice sorgente avevo usato questo pacchetto e ho letto la documentazione di questo pacchetto. Non ha strumenti per determinare i giusti punti di taglio e la "zona grigia"
Yuriy Petrovskiy

1
Ho sicuramente letto il tuo codice ma non esiste un termine "cutoff corretto", ma la trama Precisione vs cutoff può darti la visione corretta. E usando questa trama puoi capire come trovare il cutoff per la massima precisione.
Vladimir Chupakhin,

2

Cosa c'è di più importante - ci sono pochissimi punti dati dietro questa curva. Quando decidi come fare il compromesso di sensibilità / specificità, ti consiglio vivamente di avviare la curva e il numero di cutoff risultante. Potresti scoprire che c'è molta incertezza nel tuo cutoff migliore stimato.


1
L'esperimento è ancora in corso, quindi otterrò più punti dati. Sono interessato alla metodologia (penso che sia lo stesso per qualsiasi conteggio dei punti dati). E non avevo trovato alcun metodo statistico per determinare la "zona grigia" mentre è ampiamente usato nei test di questo tipo.
Yuriy Petrovskiy il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.