55 votos

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

Tengo los datos de una prueba que podría usarse para distinguir células normales y tumorales. Según la curva ROC parece ser bueno para este propósito (á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 forma de visualizar esto (usando ggplot2)?

El gráfico se renderiza usando los paquetes ROCR y 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 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

38voto

Sonia Puntos 41

Gracias a todos los que respondieron a 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 diagnóstica específica.

Finalmente encontré un paquete de R OptimalCutpoints dedicado precisamente a encontrar el punto de corte en este tipo de análisis. De hecho, existen 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 la Especificidad);
  • "MinValueSe" (un valor mínimo establecido para la Sensibilidad);
  • "RangeSp" (un rango de valores establecido para la Especificidad);
  • "RangeSe" (un rango de valores establecido para la Sensibilidad);
  • "ValueSp" (un valor establecido para la Especificidad);
  • "ValueSe" (un valor establecido para la Sensibilidad);
  • "MinValueSpSe" (un valor mínimo establecido para la Especificidad y Sensibilidad);
  • "MaxSp" (maximiza la Especificidad);
  • "MaxSe" (maximiza la Sensibilidad);
  • "MaxSpSe" (maximiza simultáneamente la Sensibilidad y la Especificidad);
  • "Max-SumSpSe" (maximiza la suma de Sensibilidad y Especificidad);
  • "MaxProdSpSe" (maximiza el producto de Sensibilidad y Especificidad);
  • "ROC01" (minimiza la distancia entre la gráfica ROC y el punto (0,1));
  • "SpEqualSe" (Sensibilidad = Especificidad);
  • "Youden" (Índice de Youden);
  • "MaxEfficiency" (maximiza la Eficiencia o Exactitud);
  • "Minimax" (minimiza el error más frecuente);
  • "AUC" (maximiza la concordancia que es una función de AUC);
  • "MaxDOR" (maximiza la Razón de Probabilidades de Diagnóstico);
  • "MaxKappa" (maximiza el Índice Kappa);
  • "MaxAccuracyArea" (maximiza el Área de Exactitud);
  • "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 los Valores Predictivos);
  • "PROC01" (minimiza la distancia entre la gráfica PROC y el punto (0,1));
  • "NPVEqualPPV" (Valor Predictivo Negativo = Valor Predictivo Positivo);
  • "ValueDLR.Negative" (un valor establecido para la Razón de Probabilidades de Diagnóstico Negativa);
  • "ValueDLR.Positive" (un valor establecido para la Razón de Probabilidades de Diagnóstico Positiva);
  • "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 diagnóstica);
  • "PrevalenceMatching" (El valor para el cual la prevalencia predicha es prácticamente igual a la prevalencia observada).

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 intervalos de confianza y una descripción detallada de cada uno de los métodos.

21 votos

La simple cantidad de métodos es una señal de la arbitrariedad de un punto de corte. Y dado que es totalmente inapropiado usar puntos de corte en variables de entrada, y solo es apropiado buscar un punto de corte (si es necesario) en un valor predicho en general, no está claro por qué se dedica tanto esfuerzo a esto. Si configuras una regla de decisión óptima de Bayes con una función de pérdida, todo se encarga; no hay curva ROC, no hay probabilidades retroactivas como sensibilidad y especificidad, no hay puntos de corte en variables de entrada.

0 votos

@FrankHarrell ¿Podrías dar más detalles sobre esto? "Si configuras una regla de decisión óptima de Bayes con una función de pérdida, todo queda resuelto". ¿Dónde puedo encontrar más literatura sobre esto?

2 votos

Mira la literatura sobre decisiones óptimas de Bayes y sobre reglas de puntuación adecuadas.

26voto

ojrac Puntos 973

En mi opinión, hay múltiples opciones de punto de corte. Podrías ponderar la sensibilidad y la especificidad de manera diferente (por ejemplo, tal vez para ti es más importante tener una prueba con alta sensibilidad aunque esto signifique tener una prueba con baja especificidad. O viceversa).

Si la sensibilidad y la especificidad tienen la misma importancia para ti, una forma de calcular el punto de corte es elegir ese valor que minimice la distancia Euclidiana entre tu curva ROC y la esquina superior izquierda de tu 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 que se refieren al último método como el 'índice de Youden' [1].

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

16voto

dan90266 Puntos 609

Resiste la tentación de encontrar un punto de corte. A menos que tengas una función de utilidad/pérdida/costo preespecificada, un punto de corte va en contra de la toma de decisiones óptima. Y una curva ROC es irrelevante para este problema.

7voto

cbeleites Puntos 12461

Matemáticamente hablando, necesitas otra condición para resolver el corte.

Puedes traducir el punto de @Andrea a: "utilizar 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 peor que un falso positivo. (Eso te daría una modificación del punto más cercano a la esquina ideal.)

1 votos

Exactamente correcto que necesitas conocimiento externo para tomar la decisión óptima. Sin embargo, la función de pérdida no está declarada 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.

6voto

Sean Howe Puntos 115

Visualiza la precisión versus el punto de corte. Puedes leer más detalles en la documentación de ROCR y en una excelente presentación del mismo.

introducir descripción de la imagen aquí

1 votos

Si miras más de cerca el código fuente, he utilizado este paquete y he leído la documentación de este paquete. No tiene herramientas para determinar los puntos de corte adecuados y la "zona gris".

1 votos

Definitivamente leí tu código pero no existe un término "derecho de corte" pero la gráfica Precisión vs corte te puede dar la idea correcta. Y usando esta gráfica puedes averiguar cómo encontrar el corte para obtener la máxima precisión.

0 votos

@La precisión puede ser engañosa cuando tenemos datos desequilibrados [paradoja de la precisión].

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X