¿Alguien puede explicarme mi modelo de Cox en inglés simple?
Ajusté el siguiente modelo de regresión de Cox a todos mis datos usando la cph
función. Mis datos se guardan en un objeto llamado Data
. Las variables w
, x
y y
son continuas; z
Es un factor de dos niveles. El tiempo se mide en meses. A algunos de mis pacientes les faltan datos para la variable z
( Nota : He notado debidamente la sugerencia del Dr. Harrell, a continuación, de que imputo estos valores para evitar sesgar mi modelo, y lo haré en el futuro).
> fit <- cph(formula = Surv(time, event) ~ w + x + y + z, data = Data, x = T, y = T, surv = T, time.inc = 12)
Cox Proportional Hazards Model
Frequencies of Missing Values Due to Each Variable
Surv(time, event) w x y z
0 0 0 0 14
Model Tests Discrimination
Indexes
Obs 152 LR chi2 8.33 R2 0.054
Events 64 d.f. 4 g 0.437
Center 0.7261 Pr(> chi2) 0.0803 gr 1.548
Score chi2 8.07
Pr(> chi2) 0.0891
Coef S.E. Wald Z Pr(>|Z|)
w -0.0133 0.0503 -0.26 0.7914
x -0.0388 0.0351 -1.11 0.2679
y -0.0363 0.0491 -0.74 0.4600
z=1 0.3208 0.2540 1.26 0.2067
También traté de probar la suposición de riesgos proporcionales usando el cox.zph
comando, a continuación, pero no sé cómo interpretar sus resultados. Poner plot()
alrededor del comando da un mensaje de error.
cox.zph(fit, transform="km", global=TRUE)
rho chisq p
w -0.1125 1.312 0.2520
x 0.0402 0.179 0.6725
y 0.2349 4.527 0.0334
z=1 0.0906 0.512 0.4742
GLOBAL NA 5.558 0.2347
Primer problema
- ¿Alguien puede explicarme los resultados de la salida anterior en inglés simple? Tengo antecedentes médicos y no tengo capacitación formal en estadística.
Segundo problema
Como lo sugirió el Dr. Harrell, me gustaría validar internamente mi modelo realizando 100 iteraciones de validación cruzada 10 veces utilizando el
rms
paquete (por lo que entiendo, esto implicaría construir100 * 10 = 1000
diferentes modelos y luego pedirles que predigan los tiempos de supervivencia de pacientes que nunca habían visto).Intenté usar la
validate
función, como se muestra.> v1 <- validate(fit, method="crossvalidation", B = 10, dxy=T) > v1 index.orig training test optimism index.corrected n Dxy -0.2542 -0.2578 -0.1356 -0.1223 -0.1320 10 R2 0.0543 0.0565 0.1372 -0.0806 0.1350 10 Slope 1.0000 1.0000 0.9107 0.0893 0.9107 10 D 0.0122 0.0128 0.0404 -0.0276 0.0397 10 U -0.0033 -0.0038 0.0873 -0.0911 0.0878 10 Q 0.0155 0.0166 -0.0470 0.0636 -0.0481 10 g 0.4369 0.4424 0.6754 -0.2331 0.6700 10
¿Cómo se realiza el muestreo de 100x? Creo que mi código anterior solo realiza la validación cruzada una vez.
Entonces quería saber qué tan bueno era mi modelo en la predicción. Intenté lo siguiente:
> c_index <- abs(v1[1,5])/2 + 0.5 > c_index [1] 0.565984
¿Significa esto que mi modelo es solo un poco mejor que lanzar una moneda?
Tercer problema
El Dr. Harrell señala que asumí la linealidad de los efectos covariables, y que el número de eventos en mi muestra es apenas lo suficientemente grande como para ajustarse a un modelo confiable si todos los efectos covariables son lineales.
- ¿Significa esto que debería incluir algún tipo de término de interacción en mi modelo? Si es así, ¿algún consejo sobre qué poner?
fuente
cph
resultado anterior en inglés simple o me indicara una referencia que lo hiciera. Dr. Harrell, ¡muchas gracias por su ayuda hasta ahora!Respuestas:
Para comenzar, considere algunas cosas. Primero, está excluyendo demasiadas observaciones con datos faltantes y esto provocará un sesgo. Considere la imputación múltiple. En segundo lugar, hay un método de trazado para2 × 2
cox.zph
lo cual es útil para evaluar los riesgos proporcionales. En tercer lugar, ha asumido la linealidad de los efectos covariables. Cuarto, el número de eventos en su muestra de entrenamiento es apenas lo suficientemente grande como para ajustarse a un modelo confiable si todos los efectos covariables son lineales (lo cual es raro). Y su muestra de prueba tendría que tener quizás 400 eventos antes de obtener una evaluación confiable de la precisión de la predicción. No está claro que tenía suficientes datos para dividir los datos en dos partes. La validación de remuestreo (100 repeticiones de validación cruzada 10 veces, o usar el bootstrap) es una mejor solución. Tanto su validación externa original (funcionesrcorr.cens
yval.surv
) como la validación interna de remuestreo (funcionesvalidate
,calibrate
) se implementan en elrms
paquete R. Estudios de caso para elrms
el paquete se encuentra en mis notas del curso enfuente
plot(cox.zph(fit[[1]], transform="km", global=TRUE))
, sin embargo, esto arrojóError in plot.cox.zph(cox.zph(fit[[1]], transform = "km", global = TRUE)) : Spline fit is singular, try a smaller degrees of freedom
. ¿Estoy llamando a esta función incorrectamente?plot(cox.zph(...), df=2)
. Consulte los estudios de caso en las notas del curso para verrms
ejemplos o instale el paquete (que también necesita elHmisc
paquete) y escriba estos comandos para que aparezcan los archivos de ayuda:?cph
?validate.cph
?calibrate.cph
La salida de la función R CPH, en base a un ejemplo relevante, se explica en este fácil de seguimiento de papel por J. Fox.
Recomiendo leer este documento si aún no lo ha hecho.
fuente
cph
resultado?