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


15

Estoy haciendo una regresión de riesgos proporcionales de Cox en R usando coxph, que incluye muchas variables. Los residuos de Martingala se ven geniales, 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.

Estas son variables que realmente no me interesan, por lo que estarlas en estratos estaría bien. Sin embargo, todas ellas son variables continuas, no variables categóricas. Entonces 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 1000 puntos de datos, y estoy trabajando con media docena de variables con muchos factores cada una, por lo que parece que estamos empujando los límites de cómo estos datos se pueden dividir y cortar en cubitos. 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 complicados para más variables).

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

* Uno es continuo, uno es un número entero con un rango de más de 100 y uno es un número entero con un rango de 6. ¿Quizás binning?


2
¿Qué pasa con el uso de un modelo Cox extendido con una interacción de tiempo para las variables dependientes del tiempo?
Kirk

¿Qué hay de considerar la opción de covariables de variación temporal (como -tvc- en Stata)?
Carlo Lazzaro

Respuestas:


1

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

Si desea permanecer con su modelo de Cox, puede adoptar un modelo de Cox extendido con coeficientes dependientes del tiempo . Tenga en cuenta que también hay modelos de Cox extendidos con covariables que dependen del tiempo: ¡estos no resuelven su problema!

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


1

Un par de ideas

1) Pruebe el enfoque de modelado de Royston-Parmar, p. Ej. Http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0047804 y sus referencias. Hemos tenido resultados útiles con eso.

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

3) En muchos modelos con factores con muchos niveles, hay algunos niveles en los que básicamente no hay datos. La fusión de niveles para eliminarlos, pero basada en buenos criterios sustantivos, puede ser muy útil.

¡Buena suerte!


1

Si el uso de una interacción con el tiempo subyacente no funciona, puede probar las funciones de paso (para obtener más información, consulte el vignett e 2016 de Therneau ).

Las funciones escalonadas se estratifican en coeficientes específicos a intervalos específicos. Después de ver los residuos de Schoenfeld trazados para las covariables problemáticas (es decir plot(cox.zph(model.coxph))), debe verificar visualmente dónde cambian de ángulo las líneas. Intenta encontrar uno o dos puntos donde la beta parezca marcadamente diferente. Suponga que esto ocurrió en el momento 10 y 20. Por lo tanto, crearemos datos utilizando survSplit()el survivalpaquete que creará un marco de datos para la agrupación de modelos de datos específicos en los momentos antes mencionados:

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

Y luego ejecute el cox.phmodelo con la stratafunción como interacciones con las variables problemáticas (como al interactuar con el tiempo, no agregue 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.