Cómo hacer análisis ROC en R con un modelo de Cox

10

He creado algunos modelos de regresión de Cox y me gustaría ver qué tan bien funcionan estos modelos y pensé que quizás una curva ROC o una estadística c podría ser útil de manera similar al uso de estos artículos:

JN Armitage och JH van der Meulen, "Identificar la comorbilidad en pacientes quirúrgicos utilizando datos administrativos con el Royal College of Surgeons Charlson Score", British Journal of Surgery, vol. 97, núm. 5, ss. 772-781, Maj 2010.

Armitage usó la regresión logística, pero me pregunto si es posible usar un modelo del paquete de supervivencia, survivalROC da una pista de que esto es posible, pero no puedo encontrar la manera de hacer que funcione con una regresión de Cox regular.

Estaría agradecido si alguien me mostrara cómo hacer un análisis ROC en este ejemplo:

library(survival)
data(veteran)

attach(veteran)
surv <- Surv(time, status)
fit <- coxph(surv ~ trt + age + prior, data=veteran)
summary(fit)

Si es posible, agradecería tanto la salida de c-static estática como un buen gráfico

¡Gracias!

Actualizar

Muchas gracias por las respuestas. @Dwin: Me gustaría asegurarme de haberlo entendido bien antes de seleccionar su respuesta.

El cálculo tal como lo entiendo según la sugerencia de DWin:

library(survival)
library(rms)
data(veteran)

fit.cph <- cph(surv ~ trt + age + prior, data=veteran, x=TRUE, y=TRUE, surv=TRUE)

# Summary fails!?
#summary(fit.cph)

# Get the Dxy
v <- validate(fit.cph, dxy=TRUE, B=100)
# Is this the correct value?
Dxy = v[rownames(v)=="Dxy", colnames(v)=="index.corrected"]

# The c-statistic according to the Dxy=2(c-0.5)
Dxy/2+0.5

No estoy familiarizado con la función de validación y bootstrapping, pero después de mirar al profesor. La respuesta de Frank Harrel aquí en R-help me di cuenta de que probablemente sea la forma de obtener el Dxy. La ayuda para validar estados:

... La correlación de rango Dxy de Somers se calculará en cada muestra (esto lleva un poco más de tiempo que las estadísticas basadas en la probabilidad). Los valores correspondientes a la fila Dxy son iguales a 2 * (C - 0.5) donde C es el índice C o la probabilidad de concordancia.

Supongo que estoy confundido por las columnas. Pensé que el valor corregido es el que debería usar, pero realmente no he entendido la salida de validación:

      index.orig training    test optimism index.corrected   n
Dxy      -0.0137  -0.0715 -0.0071  -0.0644          0.0507 100
R2        0.0079   0.0278  0.0037   0.0242         -0.0162 100
Slope     1.0000   1.0000  0.2939   0.7061          0.2939 100
...

En la pregunta de R-help , he entendido que debería tener "surv = TRUE" en el cph si tengo estratos, pero no estoy seguro de cuál es el propósito del parámetro "u = 60" en la función de validación. Le agradecería que me ayudara a comprender esto y comprobar que no he cometido ningún error.

Max Gordon
fuente
2
Probablemente echaría un vistazo al paquete rms y su cph()comando.
chl
2
index.correctedes lo que debe enfatizarse. Estas son estimaciones del probable rendimiento futuro. u=60no es necesario validateya que no tienes estratos. Si tenía estratos, las curvas de supervivencia pueden cruzarse, y debe especificar un punto de tiempo particular para obtener el área ROC generalizada.
Frank Harrell el

Respuestas:

2

@chl ha señalado una respuesta específica a su pregunta. La cphfunción del paquete 'rms' producirá un Somers-D que puede transformarse trivialmente en un índice c. Sin embargo, Harrell (quien introdujo el índice c en la práctica bioestadística) cree que esto no es prudente como una estrategia general para evaluar las medidas de pronóstico, porque tiene un bajo poder de discriminación entre las alternativas. En lugar de confiar en la literatura quirúrgica para su orientación metodológica, sería más prudente buscar la sabiduría acumulada en el texto de Harrell, "Estrategias de modelado de regresión" o "Modelos de predicción clínica" de Steyerberg.

DWin
fuente
44
Gracias por la nota Creo que y no son malos para describir la discriminación predictiva de un solo modelo preespecificado. Pero como dijiste, carecen de poder para hacer más que eso. CDxyC
Frank Harrell
Gracias por sus respuestas, mi situación es que tengo tres puntajes diferentes que quiero comparar y ver cómo funcionan. No he tenido tiempo de mirar la parte de Somers-D y volveré una vez que haya tenido tiempo (eché un vistazo rápido y no encontré nada útil). También he ordenado el libro @FrankHarrell, "Estrategias de modelado de regresión", ISBN 13: 978-0387952321, y espero que me guíe en mis elecciones.
Max Gordon
2
Como Dxy = 2 * (c- 0.5) el cálculo de c dado Dxy debería ser trivial.
DWin
3

Dependiendo de sus necesidades, incrustar un modelo dentro de un modelo más grande y hacer una prueba de "porción" de probabilidad para el valor agregado de las variables adicionales le dará una prueba poderosa. Mi libro habla sobre un índice que surge de este enfoque (el "índice de adecuación").χ2

Frank Harrell
fuente
+1 por guiarme en la dirección correcta. Acabo de terminar de hacer la estadística C y la puntuación más detallada que estoy viendo tenía una estadística C de 0.4365081 mientras que la otra tenía 0.4414625 (supongo que debería estar contando 0.5-Dxy / 2 en mi caso). Me tomó bastante tiempo hacer el cálculo en mi muestra de 140 000; Tuve que bajar los bootstraps a 10 y no estoy seguro de cuál es el impacto de eso. Espero leer su libro (está en el correo) y espero que me ayude a comprender mejor la metodología y a comparar la estadística C con el índice de adecuación.
Max Gordon el
Bueno. No es fácil decir si .44 vs. .43 significa mucho sin mirar las distribuciones de los valores pronosticados.
Frank Harrell el
Entiendo que es difícil comentar números como ese. Intentaré analizar la distribución. Mi interpretación principal del resultado es que mi modelo explica muy poco y, aunque hay una pequeña diferencia, probablemente no sea muy importante. Sería interesante qué esperar en un entorno de supervivencia: alcanzar un valor de .8 como lo hicieron en el análisis al que hice referencia en mi pregunta parece bastante lejano ... pero, de nuevo, mi supervivencia es la supervivencia de una prótesis implantada y No supervivencia del paciente. También usaron regresión logística que quizás cambia la estimación.
Max Gordon el
La regresión logística no funcionaría si el tiempo es importante o si el tiempo de seguimiento varía según los sujetos. Volviendo a la pregunta original, los riesgos predichos tendrán una distribución estrecha si el modelo explica muy poca variación.
Frank Harrell el
Acabo de recibir su libro ... He tenido un bloqueo rápido en la parte de supervivencia, pero cuando pruebo su Estudio de caso en el capítulo 20 pero recibo un error en la parte de imputar (w, sz): 'variable sz no tiene un atributo de nombres () '. Seguí el capítulo. 8: cargó el marco de datos con getHdata (próstata) (no pude encontrar el sitio web en el libro), hizo el w <- transcan (~ sz + sg + ap + sbp + dbp + age + wt + hg + ekg + pf + bm + hx, imputado = T, transformado = T, imcat = "árbol", datos = próstata) pero no encontré nada al nombrar ...
Max Gordon