¿Cómo determinar el mejor punto de corte y su intervalo de confianza utilizando la curva ROC en R?

51

Tengo los datos de una prueba que podría usarse para distinguir células normales y tumorales. De acuerdo con la curva ROC, se ve bien para este propósito (el área bajo la curva es 0.9):

Curva ROC

Mis preguntas son:

  1. ¿Cómo determinar el punto de corte para esta prueba y su intervalo de confianza donde las lecturas deben considerarse ambiguas?
  2. ¿Cuál es la mejor manera de visualizar esto (usando ggplot2)?

El gráfico se representa usando ROCRy ggplot2paquetes:

#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 los siguientes datos:

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
fuente

Respuestas:

30

Gracias a todos los que respondieron esta pregunta. Estoy de acuerdo en que no puede haber una respuesta correcta y los criterios dependen en gran medida de los objetivos que respaldan la prueba de diagnóstico determinada.

Finalmente encontré un paquete R OptimalCutpoints dedicado exactamente a encontrar el punto de corte en este tipo de análisis. En realidad, hay varios métodos para determinar el punto de corte.

  • "CB" (método de costo-beneficio);
  • "MCT" (minimiza el término de costo de clasificación errónea);
  • "MinValueSp" (un valor mínimo establecido para Especificidad);
  • "MinValueSe" (un valor mínimo establecido para Sensibilidad);
  • "RangeSp" (un rango de valores establecidos para Especificidad);
  • "RangeSe" (un rango de valores establecidos para Sensibilidad);
  • "ValueSp" (un valor establecido para Especificidad);
  • "ValueSe" (un valor establecido para Sensibilidad);
  • "MinValueSpSe" (un valor mínimo establecido para Especificidad y Sensibilidad);
  • "MaxSp" (maximiza la especificidad);
  • "MaxSe" (maximiza la sensibilidad);
  • "MaxSpSe" (maximiza la sensibilidad y la especificidad simultáneamente);
  • "Max-SumSpSe" (maximiza la suma de sensibilidad y especificidad);
  • "MaxProdSpSe" (maximiza el producto de sensibilidad y especificidad);
  • "ROC01" (minimiza la distancia entre el gráfico ROC y el punto (0,1));
  • "SpEqualSe" (Sensibilidad = Especificidad);
  • "Youden" (Índice de Youden);
  • "MaxEfficiency" (maximiza la eficiencia o precisión);
  • "Minimax" (minimiza el error más frecuente);
  • "AUC" (maximiza la concordancia que es una función de AUC);
  • "MaxDOR" (maximiza la relación de probabilidades de diagnóstico);
  • "MaxKappa" (maximiza el índice Kappa);
  • "MaxAccuracyArea" (maximiza el área de precisión);
  • "MinErrorRate" (minimiza la tasa de error);
  • "MinValueNPV" (un valor mínimo establecido para el valor predictivo negativo);
  • "MinValuePPV" (un valor mínimo establecido para el valor predictivo positivo);
  • "MinValueNPVPPV" (un valor mínimo establecido para valores predictivos);
  • "PROC01" (minimiza la distancia entre el diagrama PROC y el punto (0,1));
  • "NPVEqualPPV" (valor predictivo negativo = valor predictivo positivo);
  • "ValueDLR.Negative" (un valor establecido para la Relación de probabilidad de diagnóstico negativo);
  • "ValueDLR.Positive" (un valor establecido para el índice de probabilidad de diagnóstico positivo);
  • "MinPvalue" (minimiza el valor p asociado con la prueba estadística de Chi-cuadrado que mide la asociación entre el marcador y el resultado binario obtenido al usar el punto de corte);
  • "ObservedPrev" (El valor más cercano a la prevalencia observada);
  • "MeanPrev" (el valor más cercano a la media de los valores de la prueba de diagnóstico);
  • "PrevalenceMatching" (El valor para el cual la prevalencia prevista es prácticamente igual a la prevalencia observada).

Así que ahora la tarea se reduce a seleccionar el método que mejor se adapte a cada situación.

Hay muchas otras opciones de configuración descritas en la documentación del paquete, incluidos varios métodos para determinar los intervalos de confianza y una descripción detallada de cada uno de los métodos.

Yuriy Petrovskiy
fuente
18
La gran cantidad de métodos es un signo de la arbitrariedad de un límite. Y dado que es totalmente inapropiado usar valores de corte en las variables de entrada, y solo es apropiado buscar el valor de corte (si es necesario) en un valor general predicho, no está claro por qué se gasta tanto esfuerzo en esto. Si configura una regla de decisión óptima de Bayes con una función de pérdida, todo se solucionará; sin curva ROC, sin probabilidades de retroceso en el tiempo, como sensibilidad y especificidad, sin cortes en las variables de entrada.
Frank Harrell
@FrankHarrell ¿Podrías dar más detalles sobre esto? "Si configura una regla de decisión óptima de Bayes con una función de pérdida, todo se solucionará". ¿Dónde puedo encontrar más literatura sobre esto?
Black Milk
1
Mire la literatura sobre las decisiones óptimas de Bayes y las reglas de puntuación adecuadas.
Frank Harrell
26

En mi opinión, hay múltiples opciones de corte. Puede ponderar la sensibilidad y la especificidad de manera diferente (por ejemplo, tal vez para usted es más importante hacerse una prueba de alta sensibilidad, aunque esto significa tener una prueba específica baja o viceversa).

Si la sensibilidad y la especificidad tienen la misma importancia para usted, una forma de calcular el límite es elegir ese valor que minimice la distancia euclidiana entre su curva ROC y la esquina superior izquierda de su gráfico.

Otra forma es usar el valor que maximiza (sensibilidad + especificidad - 1) como punto de corte.

Desafortunadamente, no tengo referencias para estos dos métodos, ya que los aprendí de profesores u otros estadísticos. Solo he escuchado referirse al último método como el 'índice de Youden' [1]).

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

boscovich
fuente
15

Resista la tentación de encontrar un límite. A menos que tenga una función de utilidad / pérdida / costo preespecificada, un límite va en contra de la toma de decisiones óptima. Y una curva ROC es irrelevante para este problema.

Frank Harrell
fuente
7

Matemáticamente hablando, necesitas otra condición para resolver el límite.

Puede traducir el punto de @ Andrea a: "usar conocimiento externo sobre el problema subyacente".

Condiciones de ejemplo:

  • para esta aplicación, necesitamos sensibilidad> = x, y / o especificidad> = y.

  • un falso negativo es 10 veces más malo que un falso positivo. (Eso le daría una modificación del punto más cercano a la esquina ideal).

cbeleites apoya a Monica
fuente
1
Exactamente correcto que necesita conocimiento externo para obtener la decisión óptima. Pero la función de pérdida no se establece en términos de las cantidades anteriores, y la decisión óptima proviene de la probabilidad predicha del resultado para el sujeto individual , junto con la función de pérdida.
Frank Harrell
6

Visualice la precisión versus el corte. Puede leer más detalles en la documentación de ROCR y una muy buena presentación de la misma.

ingrese la descripción de la imagen aquí

Vladimir Chupakhin
fuente
1
Si observa más de cerca el código fuente, utilicé este paquete y leí la documentación de este paquete. No tiene herramientas para determinar los puntos de corte correctos y la "zona gris"
Yuriy Petrovskiy
1
Definitivamente leí su código, pero no existe el término "corte correcto", pero la precisión de la trama frente al corte puede brindarle la información correcta. Y con este gráfico puede descubrir cómo encontrar el límite para obtener la máxima precisión.
Vladimir Chupakhin
2

Lo que es más importante: hay muy pocos puntos de datos detrás de esta curva. Cuando decida cómo va a hacer la compensación de sensibilidad / especificidad, le recomiendo encarecidamente que inicie la curva y el número de corte resultante. Puede encontrar que hay mucha incertidumbre en su mejor corte estimado.

Patrick Caldon
fuente
1
El experimento todavía está en marcha, por lo que obtendré más puntos de datos. Estoy interesado en la metodología (creo que es lo mismo para cualquier recuento de puntos de datos). Y no había encontrado ningún método estadístico para determinar la "zona gris" mientras se usa ampliamente en pruebas de este tipo.
Yuriy Petrovskiy