15 votos

¿Cuáles son las opciones en el modelo de regresión de riesgos proporcionales cuando los residuos de Schoenfeld no son buenos?

Estoy haciendo una regresión de riesgos proporcionales de Cox en R utilizando coxph que incluye muchas variables. Los residuos de Martingale se ven muy bien, y los residuos de Schoenfeld son excelentes para CASI todas las variables. Hay tres variables cuyos residuos de Schoenfeld no son planos, y la naturaleza de las variables es tal que tiene sentido que puedan variar con el tiempo.

Son variables que no me interesan mucho, por lo que hacerlas estrato estaría bien. Sin embargo, todas ellas son variables continuas, no categóricas. Así que percibo que los estratos no son una ruta viable*. He intentado construir interacciones entre las variables y el tiempo, como se describe aquí , pero obtenemos el error:

  In fitter(X, Y, strats, offset, init, control, weights = weights,  :
  Ran out of iterations and did not converge

Estoy trabajando con casi 1.000 puntos de datos, y estoy trabajando con media docena de variables con muchos factores cada una, así que parece que estamos llegando a los límites de cómo se pueden cortar estos datos. Desafortunadamente, todos los modelos más simples que he probado con menos variables incluidas son claramente peores (por ejemplo, los residuos de Schoenfeld son más crujientes para más variables).

¿Cuáles son mis opciones? Como no me importan estas variables en particular que se comportan mal, me gustaría simplemente ignorar su salida, ¡pero sospecho que no es una interpretación válida!

*Uno es continuo, otro es un entero con un rango superior a 100, y otro es un entero con un rango de 6. ¿Quizás binning?

2 votos

¿Y si se utiliza un modelo de Cox ampliado con una interacción temporal para las variables dependientes del tiempo?

0 votos

¿Qué tal si se considera la opción de covariables de tiempo (como -tvc- en Stata)?

1voto

Jochen Puntos 11

La forma más elegante sería utilizar un modelo de supervivencia paramétrico (Gompertz, Weibull, Exponencial, ...) si se tiene alguna idea de cómo podría ser el riesgo de base.

Si quiere seguir con su modelo de Cox, puede contratar un modelo cox ampliado con coeficientes dependientes del tiempo . Tenga en cuenta que también existen modelos Cox ampliados con covariables que dependen del tiempo, pero que no resuelven su problema.

Para R ver aquí: http://cran.r-project.org/web/packages/survival/vignettes/timedep.pdf

1voto

user13581 Puntos 26

Un par de ideas -

1) Prueba el enfoque de modelización de Royston-Parmar, por ejemplo http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0047804 y sus referencias. Hemos obtenido resultados útiles con él.

2) Centrar y normalizar las variables continuas puede ser útil numéricamente.

3) En muchos modelos con factores con muchos niveles hay unos cuantos niveles en los que básicamente no hay datos. Fusionar los niveles para eliminarlos, pero basándose en buenos criterios sustantivos, puede ser muy útil.

Buena suerte.

1voto

Yuval Sp Puntos 316

Si el uso de una interacción con el tiempo subyacente no funciona, puede intentar funciones de paso (para más información, véase Vignett 2016 de Therneau e).

Las funciones de paso se estratifican en coeficientes específicos en intervalos específicos. Después de ver sus residuos de Schoenfeld trazados para las covariables problemáticas (es decir plot(cox.zph(model.coxph)) ) hay que comprobar visualmente dónde cambian de ángulo las líneas. Intenta encontrar uno o dos puntos en los que la beta parezca notablemente diferente. Supongamos que esto ocurre en los tiempos 10 y 20. Entonces crearemos los datos utilizando survSplit() de la survival que creará un marco de datos para la agrupación del modelo de datos específico en los momentos mencionados:

step.data <- survSplit(Surv(t1, t2, event) ~ 
                      x1 + x2,
                      data = data, cut = c(10, 20), episode = "tgroup")

Y luego ejecutar el cox.ph con el modelo strata como interacciones con las variables problemáticas (al igual que con la interacción con el tiempo, no añada un efecto principal para el tiempo o los estratos):

> model.coxph2 <- coxph(Surv(t1, t2, event) ~ 
                          x1 + x2:strata(tgroup), data = step.data)

Y eso debería ayudar.

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