¿Puede alguien explicarme el modelo de Cox en lenguaje sencillo?
He ajustado el siguiente modelo de regresión de Cox para todo de mis datos utilizando el cph
función. Mis datos se guardan en un objeto llamado Data
. Las variables w
, x
y y
son continuos; 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
( NB : He tomado buena nota de la sugerencia del Dr. Harrell, más abajo, de que impute estos valores para no sesgar mi modelo, y así 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 el supuesto de riesgos proporcionales utilizando el cox.zph
más abajo, pero no sabe cómo interpretar sus resultados. Poniendo 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
- ¿Puede alguien explicarme los resultados de la salida anterior en un lenguaje sencillo? Tengo formación médica y no tengo formación formal en estadística.
Segundo problema
-
Como sugiere el Dr. Harrell, me gustaría validar internamente mi modelo realizando 100 iteraciones de validación cruzada de 10 veces utilizando el
rms
(por lo que tengo entendido, esto implicaría construir100 * 10 = 1000
diferentes modelos y luego pedirles que predijeran los tiempos de supervivencia de pacientes que nunca habían visto).Intenté usar el
validate
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 remuestreo 100x? Creo que mi código anterior sólo realiza la validación cruzada una vez.
-
A continuación, quise saber lo bueno que era mi modelo en la predicción. Probé lo siguiente:
> c_index <- abs(v1[1,5])/2 + 0.5 > c_index [1] 0.565984
¿Significa esto que mi modelo es sólo ligeramente mejor que lanzar una moneda?
Tercer problema
El Dr. Harrell señala que he asumido la linealidad de los efectos de las covariables, y que el número de eventos en mi muestra es apenas lo suficientemente grande como para ajustar un modelo fiable si todos los efectos de las covariables resultan ser lineales.
- ¿Significa esto que debo incluir algún tipo de término de interacción en mi modelo? Si es así, ¿algún consejo sobre qué poner?
2 votos
He hecho algunas modificaciones importantes a mi pregunta inicial, más arriba, unas tres horas después de haberla formulado inicialmente. He intentado seguir los útiles consejos del Dr. Harrell. Todavía apreciaría mucho si alguien intentara explicar lo anterior
cph
de la producción en inglés, o indíqueme una referencia que lo haga. Dr. Harrell, ¡muchas gracias por su ayuda hasta ahora!