No he podido acceder al artículo de Simon y Makuch mencionado anteriormente, pero tras investigar el tema he encontrado:
Steven M Snapinn, Qi Jiang y Boris Iglewicz (2005) Ilustración del impacto de una covariable temporal con un estimador de Kaplan-Meier ampliado , El Estadístico Americano , 59:4, 301-307.
Ese artículo propone un gráfico de Kaplan-Meier (KM) dependiente del tiempo, simplemente actualizando las cohortes en todos los momentos del evento. También cita el artículo de Simon y Makuch por proponer una idea similar. El KM normal no permite esto, sólo permite una división fija en grupos. El método propuesto realmente divide el tiempo de supervivencia según el estado de la covariable - al igual que se podría hacer al estimar un modelo de Cox con covariables constantes a trozos. Para el modelo de Cox, esta es una idea viable y estándar. Sin embargo, es más complicada cuando se hace un gráfico de KM. Permítame ilustrarlo con un ejemplo de simulación.
Supongamos que no hay censura, sino algún acontecimiento (por ejemplo, dar a luz) que podría ocurrir o no antes del momento de la muerte. Supongamos también que los riesgos son constantes para simplificar. También supondremos que dar a luz no altera el peligro de morir. A continuación, seguiremos el procedimiento prescrito en el artículo anterior. El artículo indica claramente cómo se hace esto en R, simplemente divida sus sujetos en el momento de dar a luz de tal manera que sean constantes en su variable de agrupación. A continuación, utilice la formulación del proceso de recuento en el Surv
función. En código
library(survival)
library(ggplot2)
n <- 10000
data <- data.frame(id = seq(n),
preg = rexp(n, 1),
death = rexp(n, .5),
enter = 0,
per = NA,
event = 1)
data$exit <- data$death
data0 <- data
data0$exit <- with(data, pmin(preg, death))
data0$per <- 0
data0$event[with(data0, preg < death)] <- 0
data1 <- subset(data, preg < death)
data1$enter <- data1$preg
data1$per <- 1
data <- rbind(data0, data1)
data <- data[order(data$id), ]
Sfit <- survfit(Surv(time = enter, time2 = exit, event = event) ~ per, data = data)
autoplot(Sfit, censSize = 0)$plot
Lo divido más o menos "a mano". Podríamos utilizar survSplit
también. El procedimiento realmente me da una estimación muy agradable.
Obtenemos estimaciones casi idénticas para los dos grupos, como debería ser. Pero, en realidad, mi simulación era quizá un poco irreal. Supongamos que una mujer no puede dar a luz en las dos primeras unidades de tiempo por alguna razón. Esto es al menos razonable en su ejemplo: habrá algún tiempo entre dos embarazos correspondientes a la misma mujer. Haciendo un pequeño añadido al código
data <- data.frame(id = seq(n),
preg = rexp(n, 1) + 2,
death = rexp(n, .5),
enter = 0,
preg = NA,
event = 1)
obtenemos el siguiente gráfico:
Lo mismo estaría ocurriendo con tus datos. No verás ningún tercer embarazo durante al menos un periodo de tiempo inicial, lo que significa que tu estimación será 1 para ese grupo y ese periodo de tiempo. Esto es, en mi opinión, una representación errónea de sus datos. Considere mi simulación. Los riesgos son idénticos, pero para cada punto de tiempo el per1
estimación es mayor que la per0
estimación.
Podrías considerar diferentes remedios a este problema. Se propone pegarlas en algún momento (dejar que el per1
-La curva parte de un punto determinado de la per0
-curva). Me gusta esta idea. Si lo hago con los datos de la simulación, obtenemos:
En nuestro caso concreto, creo que esto representa mejor los datos, pero no conozco ningún resultado publicado que apoye este enfoque. Heurísticamente, se puede utilizar el argumento que presenté en otra respuesta:
Gráfico de KM con coeficiente variable en el tiempo