No he podido acceder al artículo de Simon y Makuch mencionado anteriormente, pero después de investigar el tema encontré:
Steven M Snapinn, Qi Jiang y Boris Iglewicz (2005) que ilustran el impacto de una covariable variable en el tiempo con un estimador extendido de Kaplan-Meier , The American Statistician , 59: 4, 301-307.
Ese artículo propone un diagrama de Kaplan-Meier (KM) dependiente del tiempo simplemente actualizando las cohortes en todo momento del evento. También cita el artículo de Simon y Makuch por proponer una idea similar. El KM regular no permite esto, solo permite una división fija en grupos. El método propuesto en realidad divide el tiempo de supervivencia de acuerdo con el estado de covariable, tal como se podría hacer al estimar un modelo de Cox con covariables constantes por partes. Para el modelo de Cox, esta es una idea viable y estándar. Sin embargo, es más intrincado cuando se hace un diagrama KM. Permítanme ilustrarlo con un ejemplo de simulación.
Supongamos que no tenemos censura, sino algún evento (por ejemplo, dar a luz) que podría o no ocurrir antes del momento de la muerte. Supongamos también riesgos constantes por simplicidad. También asumiremos que dar a luz no altera el peligro de morir. Ahora seguiremos el procedimiento prescrito en el artículo anterior. El artículo establece claramente cómo se hace esto en R, simplemente divida sus temas a tiempo de dar a luz de modo que sean constantes en su variable de agrupación. Luego use la formulación del proceso de conteo en la Surv
función. En codigo
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 estoy dividiendo más o menos "a mano". Podríamos usar survSplit
también. El procedimiento en realidad me da una muy buena estimación.
Obtenemos estimaciones casi idénticas para los dos grupos como deberíamos. Pero en realidad, mi simulación fue quizás un poco poco realista. Digamos 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. Hacer una pequeña adición 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 la siguiente trama:
Lo mismo sucedería con sus datos. No verá ningún tercer embarazo durante al menos un período inicial de tiempo, lo que significa que su estimación será 1 para ese grupo y ese período de tiempo. Esto es, en mi opinión, una tergiversación de sus datos. Considera mi simulación. Los riesgos son idénticos, pero para cada punto de tiempo la per1
estimación es mayor que la per0
estimación.
Podría considerar diferentes remedios para este problema. Propone pegarlos juntos en algún momento (deje que la per1
curva comience desde cierto punto en la per0
curva). Me gusta esta idea. Si lo hago en los datos de simulación, obtenemos:
En nuestro caso específico, creo que esto representa los datos mucho mejor, pero no conozco ningún resultado publicado que respalde este enfoque. Heurísticamente, uno puede usar el argumento que presenté en otra respuesta:
Gráfico de KM con coeficiente variable en el tiempo