Comment déterminer le meilleur point de coupure et son intervalle de confiance en utilisant la courbe ROC dans R?

51

J'ai les données d'un test qui pourrait être utilisé pour distinguer les cellules normales et les cellules tumorales. Selon la courbe ROC, cela semble bon à cet égard (la surface sous la courbe est de 0,9):

Courbe ROC

Mes questions sont:

  1. Comment déterminer le point de coupure pour ce test et son intervalle de confiance où les lectures doivent être jugées ambiguës?
  2. Quel est le meilleur moyen de visualiser cela (en utilisant ggplot2)?

Le graphique est rendu en utilisant ROCRet ggplot2packages:

#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 contient les données suivantes:

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
Yuriy Petrovskiy
la source

Réponses:

30

Merci à tous ceux qui ont répondu à cette question. Je conviens qu'il ne pouvait y avoir une seule réponse correcte et que les critères dépendaient grandement des objectifs poursuivis par certains tests de diagnostic.

Enfin, j'avais trouvé un paquet R OptimalCutpoints spécialement dédié à la recherche de points limites dans ce type d'analyse. En réalité, il existe plusieurs méthodes pour déterminer le point de coupure.

  • "CB" (méthode coût-bénéfice);
  • "MCT" (minimise les coûts liés aux erreurs de classification);
  • "MinValueSp" (une valeur minimale définie pour la spécificité);
  • "MinValueSe" (une valeur minimale définie pour la sensibilité);
  • "RangeSp" (une plage de valeurs définie pour la spécificité);
  • "RangeSe" (une plage de valeurs définie pour la sensibilité);
  • "ValueSp" (une valeur définie pour Specificity);
  • "ValueSe" (une valeur définie pour la sensibilité);
  • "MinValueSpSe" (une valeur minimale définie pour la spécificité et la sensibilité);
  • "MaxSp" (maximise la spécificité);
  • "MaxSe" (maximise la sensibilité);
  • "MaxSpSe" (maximise simultanément la sensibilité et la spécificité);
  • "Max-SumSpSe" (maximise la somme de la sensibilité et de la spécificité);
  • "MaxProdSpSe" (maximise le produit de la sensibilité et de la spécificité);
  • "ROC01" (minimise la distance entre la parcelle ROC et le point (0,1));
  • "SpEqualSe" (Sensibilité = Spécificité);
  • "Youden" (Index de Youden);
  • "MaxEfficiency" (maximise l'efficacité ou la précision);
  • "Minimax" (minimise l'erreur la plus fréquente);
  • "AUC" (maximise la concordance qui est une fonction de l'AUC);
  • "MaxDOR" (maximise le rapport de cotes de diagnostic);
  • "MaxKappa" (maximise l'indice Kappa);
  • "MaxAccuracyArea" (maximise la zone de précision);
  • "MinErrorRate" (minimise le taux d'erreur);
  • "MinValueNPV" (valeur minimale définie pour la valeur prédictive négative);
  • "MinValuePPV" (valeur minimale définie pour la valeur prédictive positive);
  • "MinValueNPVPPV" (valeur minimale définie pour les valeurs prédictives);
  • "PROC01" (minimise la distance entre la parcelle PROC et le point (0,1));
  • "NPVEqualPPV" (valeur prédictive négative = valeur prédictive positive);
  • "ValueDLR.Negative" (valeur définie pour le rapport de probabilité de diagnostic négatif);
  • "ValueDLR.Positive" (valeur définie pour le rapport de probabilité de diagnostic positif);
  • "MinPvalue" (minimise la valeur p associée au test statistique du chi carré qui mesure l'association entre le marqueur et le résultat binaire obtenu en utilisant le point de coupure);
  • "ObservedPrev" (valeur la plus proche de la prévalence observée);
  • "MeanPrev" (valeur la plus proche de la moyenne des valeurs du test de diagnostic);
  • "PrevalenceMatching" (Valeur pour laquelle la prévalence prédite est pratiquement égale à la prévalence observée).

Alors maintenant, la tâche est réduite à la sélection de la méthode qui correspond le mieux à chaque situation.

Il existe de nombreuses autres options de configuration décrites dans la documentation du paquet, notamment plusieurs méthodes de détermination des intervalles de confiance et une description détaillée de chacune de ces méthodes.

Yuriy Petrovskiy
la source
18
Le grand nombre de méthodes est un signe de l'arbitraire d'une coupure. Et comme il est tout à fait inapproprié d’utiliser des seuils sur des variables d’entrée et qu’il est approprié de rechercher une limite (si vous le devez) sur une valeur prédite globale, il n’est pas clair pourquoi on consacre autant d’efforts à cela. Si vous configurez une règle de décision optimale de Bayes avec une fonction de perte, tout est pris en charge; pas de courbe ROC, pas de probabilités vers l'arrière telles que la sensibilité et la spécificité, pas de seuils pour les variables d'entrée.
Frank Harrell
@ FrankHarrell Pourriez-vous élaborer? "Si vous configurez une règle de décision optimale de Bayes avec une fonction de perte, tout est réglé." Où puis-je trouver plus de littérature à ce sujet?
Black Milk
1
Consultez la littérature sur les décisions optimales de Bayes et sur les règles de notation appropriées.
Frank Harrell
26

À mon avis, il y a plusieurs options de coupure. Vous pouvez pondérer la sensibilité et la spécificité différemment (par exemple, il est peut-être plus important pour vous d’avoir un test très sensible même si cela signifie de faire un test spécifique peu complexe. Ou vice-versa).

Si la sensibilité et la spécificité ont la même importance pour vous, vous pouvez choisir la valeur qui minimise la distance euclidienne entre votre courbe ROC et le coin supérieur gauche de votre graphique.

Une autre façon consiste à utiliser la valeur qui maximise (sensibilité + spécificité - 1) comme seuil.

Malheureusement, je n'ai pas de références pour ces deux méthodes telles que je les ai apprises de professeurs ou d'autres statisticiens. J'ai seulement entendu parler de cette dernière méthode sous le nom d '"index de Youden" [1]).

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

Boscovich
la source
15

Résistez à la tentation de trouver une coupure. À moins que vous n'ayez une fonction prédéfinie d'utilité / perte / coût, une coupure va à l'encontre d'une prise de décision optimale. Et une courbe ROC n'est pas pertinente à cette question.

Frank Harrell
la source
7

Mathématiquement, vous avez besoin d’une autre condition à résoudre pour la coupure.

Vous pouvez traduire le point @ Andrea en: "utiliser des connaissances externes sur le problème sous-jacent".

Exemple de conditions:

  • pour cette application, nous avons besoin d'une sensibilité> = x et / ou d'une spécificité> = y.

  • un faux négatif équivaut à 10 fois moins qu'un faux positif. (Cela vous donnerait une modification du point le plus proche du coin idéal.)

cbeleites soutient Monica
la source
1
C'est juste que vous avez besoin de connaissances externes pour prendre la décision optimale. Mais la fonction de perte n'est pas indiquée en termes des quantités ci-dessus, et la décision optimale provient de la probabilité prédite du résultat pour le sujet individuel , associée à la fonction de perte.
Frank Harrell
6

Visualisez la précision par rapport au seuil. Vous pouvez lire plus de détails dans la documentation de ROCR et une très belle présentation de la même chose.

entrez la description de l'image ici

Vladimir Chupakhin
la source
1
Si vous regardez de plus près le code source, j'avais utilisé ce paquet et lu la documentation de ce paquet. Il n'a pas d'outil pour déterminer les bons points de coupure et la "zone grise"
Yuriy Petrovskiy
1
J'ai bien lu votre code, mais il n’existe pas de terme comme «seuil exact», mais l’intrigue Précision vs seuil peut vous donner une idée juste. Et en utilisant ce graphique, vous pouvez comprendre comment trouver la valeur limite pour une précision maximale.
Vladimir Chupakhin
2

Ce qui est plus important, c'est qu'il y a très peu de points de données derrière cette courbe. Lorsque vous décidez comment vous allez faire le compromis sensibilité / spécificité, je vous encourage fortement à amorcer la courbe et le nombre de coupures qui en résulte. Vous constaterez peut-être qu'il y a beaucoup d'incertitude dans votre meilleure limite estimée.

Patrick Caldon
la source
1
L'expérience est toujours en cours, je vais donc obtenir plus de points de données. Je suis intéressé par la méthodologie (je pense que c'est la même chose pour tout décompte de points de données). Et je n'avais trouvé aucune méthode statistique pour déterminer la "zone grise" alors qu'elle est largement utilisée dans les tests de ce type.
Yuriy Petrovskiy