Modelo de historial de eventos en tiempo discreto (supervivencia) en R

10

Estoy tratando de ajustar un modelo de tiempo discreto en R, pero no estoy seguro de cómo hacerlo.

He leído que puede organizar la variable dependiente en diferentes filas, una para cada observación de tiempo, y usar la glmfunción con un enlace logit o cloglog. En este sentido, tengo tres columnas: ID, Event(1 o 0, en cada tiempo-obs) y Time Elapsed(desde el inicio de la observación), además de las otras covariables.

¿Cómo escribo el código para que se ajuste al modelo? ¿Cuál es la variable dependiente? Supongo que podría usar Eventcomo variable dependiente e incluir el Time Elapseden las covariables. ¿Pero qué pasa con el ID? ¿Lo necesito?

Gracias.

Fran Villamil
fuente
Cuando dices "Estoy tratando de adaptarme a un modelo de tiempo discreto" ... ¿qué modelo quieres ajustar? (Si esto es por algún tema, por favor agregue la self-studyetiqueta.)
Glen_b -Reinstate Monica
Quiero ajustar un modelo de supervivencia de tiempo discreto logit.
Fran Villamil
1
Parece poco probable que la ID sea relevante, pero depende de qué, exactamente representa y si eso es algo que desea modelar.
Glen_b -Reinstate Monica el

Respuestas:

8

Básicamente tienes razón sobre la organización de datos. Si tiene casos organizados así:

ID M1 M2 M3 EVENT

Es probable que desee reorganizar los datos para que se vean así:

ID TIME EVENT
1  1    0
1  2    1
1  3    1
2  1    0
2  2    0
.  .    .
.  .    .

Llamo a esto una conversión de un formato ancho a un formato largo. Se hace fácilmente en R usando la reshape()función o incluso más fácilmente con el reshape2paquete.

Personalmente, mantendría el IDcampo para su uso potencial en la identificación de una fuente de variación en un modelo de efectos mixtos. Pero esto no es necesario (como lo señaló @BerndWeiss). Lo siguiente asume que te gustaría hacerlo. De lo contrario, ajuste un modelo similar glm(...,family=binomial)sin los términos de efecto aleatorio.

El lme4paquete en R se ajustará a un modelo de regresión logística de efectos mixtos similar al que está hablando, excepto con un efecto aleatorio o dos para tener en cuenta la variabilidad en los coeficientes entre los sujetos ( ID). El siguiente sería un código de ejemplo para ajustar un modelo de ejemplo si sus datos se almacenan en un marco de datos llamado df.

require(lme4)
ans <- glmer(EVENT ~ TIME + (1+TIME|ID), data=df, family=binomial)

Este modelo en particular permite que las TIMEy los interceptcoeficientes que varían aleatoriamente a través de ID. En otras palabras, este es un modelo jerárquico lineal mixto de medidas anidadas en individuos.

Una forma alternativa de un modelo de historial de eventos de tiempo discreto se divide TIMEen dummies discretos y se ajusta a cada uno como parámetro. Este es esencialmente el caso discreto del modelo Cox PH porque la curva de riesgo no está restringida a ser lineal (o cuadrática, o como se pueda imaginar transformando el tiempo). Sin TIMEembargo , es posible que desee agrupar en un conjunto manejable (es decir, pequeño) de períodos de tiempo discretos si hay muchos de ellos.

Otras alternativas implican transformar el tiempo para obtener la curva de riesgo correcta. El método anterior básicamente lo alivia de tener que hacer esto, pero el método anterior es menos parsimonioso que este (y el caso lineal original que planteé) porque puede tener muchos puntos de tiempo y, por lo tanto, muchos parámetros molestos.

Una excelente referencia sobre este tema es el Análisis de datos longitudinales aplicados de Judith Singer y John Willet : Modelado de cambio y ocurrencia de eventos .

ndoogan
fuente
44
No necesita un "modelo de regresión logística de efectos mixtos" para estimar un modelo de tiempo discreto simple (Fiona Steel ha publicado algunos artículos sobre " Análisis de historial de eventos de tiempo discreto multinivel "). Tiene una referencia? En cuanto al paso de preparación de datos, también sugiero echar un vistazo a la función survSplit .
Bernd Weiss
6

Singer y Willett se han publicado mucho sobre este tema. Le recomiendo que lea algunos de sus documentos . También es posible que desee obtener su libro "Análisis de datos longitudinales aplicados: cambio de modelado y ocurrencia de eventos" . Claramente uno de los mejores libros de texto en este campo.

Para la mayoría de los capítulos de libros hay un código de muestra R (ver capítulos 11ff) disponible que demuestra cómo deben estructurarse sus datos ("formato de período de persona") y cómo analizar ese tipo de datos. Para un modelo estándar de tiempo discreto, no necesita la variable ID y tampoco necesita estimar un modelo de efectos mixtos como lo sugiere @ndoogan. Un simple glm(event ~ time + ..., family = "binomial")funciona bien. Singer y Willett también discuten muchos temas sobre cómo modelar la variable de tiempo (lineal, cuadrática, ...)

Para citar dos referencias más que recomiendo:

Bernd Weiss
fuente
1

(0 0,1],(1,2],...dynamichazard::static_glm

Este método difiere del un @ndoogan con dummies de tiempo, ya que solo obtienes una intercepción común en todos los períodos de tiempo dynamichazard::static_glm. Sin embargo, puede obtener una referencia ficticia para cada período llamando dynamichazard::get_survival_case_weights_and_datacon un argumento use_weights = FALSE, agregue el indicador ficticio de tiempo usted mismo al devuelto data.framey luego llame, por ejemplo glm.

Benjamin Christoffersen
fuente
Además, puede interesarle esta viñeta en mi paquete dynamichazard.
Benjamin Christoffersen
0

Esto se denomina datos de "proceso de conteo". El paquete de supervivencia tiene una muy buena función tmerge (). Es muy útil insertar covariables dependientes del tiempo o acumulativas y el tiempo de seguimiento de la partición en consecuencia. El proceso está muy bien explicado en esta viñeta.

Koray
fuente