Je n'ai pas pu accéder à l'article de Simon et Makuch mentionné ci-dessus, mais après avoir étudié le sujet, j'ai trouvé:
Steven M Snapinn, Qi Jiang & Boris Iglewicz (2005) Illustrating the Impact of a Time-Varying Covariate With an Extended Kaplan-Meier Estimator , The American Statistician , 59: 4, 301-307.
Cet article propose un tracé de Kaplan-Meier dépendant du temps (KM) en mettant simplement à jour les cohortes à tout moment de l'événement. Il cite également l'article de Simon et Makuch pour avoir proposé une idée similaire. Le KM régulier ne le permet pas, il ne permet qu'une division fixe en groupes. La méthode proposée divise en fait le temps de survie en fonction du statut de covariable - tout comme on pourrait le faire lors de l'estimation d'un modèle de Cox avec des covariables constantes par morceaux. Pour le modèle Cox, il s'agit d'une idée viable et standard. Il est cependant plus complexe lors d'un tracé KM. Permettez-moi de l'illustrer avec un exemple de simulation.
Supposons que nous n'ayons pas de censure, mais un événement (par exemple, un accouchement) qui pourrait ou non survenir avant le décès. Supposons également des risques constants par souci de simplicité. Nous supposerons également que l'accouchement ne modifie pas le risque de mourir. Nous allons maintenant suivre la procédure prescrite dans l'article ci-dessus. L'article indique clairement comment cela se fait dans R, divisez simplement vos sujets au moment de l'accouchement de sorte qu'ils soient constants dans votre variable de regroupement. Utilisez ensuite la formulation du processus de comptage dans la Surv
fonction. Dans du code
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
Je le divise plus ou moins "à la main". Nous pourrions également utiliser survSplit
. La procédure me donne en fait une très belle estimation.
Nous obtenons des estimations presque identiques pour les deux groupes comme nous le devrions. Mais en fait, ma simulation était peut-être un peu irréaliste. Disons qu'une femme ne peut pas accoucher dans les deux premières unités de temps pour une raison quelconque. C'est au moins raisonnable dans votre exemple: il y aura un certain temps entre deux grossesses correspondant à la même femme. Faire un petit ajout au code
data <- data.frame(id = seq(n),
preg = rexp(n, 1) + 2,
death = rexp(n, .5),
enter = 0,
preg = NA,
event = 1)
nous obtenons l'intrigue suivante:
La même chose se produirait avec vos données. Vous ne verrez aucune troisième grossesse pendant au moins une période initiale, ce qui signifie que votre estimation sera de 1 pour ce groupe et cette période. Il s'agit à mon avis d'une fausse représentation de vos données. Considérez ma simulation. Les dangers sont identiques, mais pour chaque point dans le temps, l' per1
estimation est supérieure à l' per0
estimation.
Vous pouvez envisager différents remèdes à ce problème. Vous proposez de les coller ensemble à un moment donné (laissez la per1
courbe commencer à partir d'un certain point de la per0
courbe). J'aime cette idée. Si je le fais sur les données de simulation, on obtient:
Dans notre cas spécifique, je pense que cela représente bien mieux les données, mais je ne connais aucun résultat publié qui soutienne cette approche. Heuristiquement, on peut utiliser l'argument que j'ai présenté dans une autre réponse:
Diagramme KM avec coefficient variant dans le temps