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:
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.
cph()
comando.index.corrected
es lo que debe enfatizarse. Estas son estimaciones del probable rendimiento futuro.u=60
no es necesariovalidate
ya 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.Respuestas:
@chl ha señalado una respuesta específica a su pregunta. La
cph
funció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.fuente
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
fuente