Kaplan-Meier en R : comparer une survie entre deux groupes pas à pas
Vous analysez des données cliniques et vous devez comparer la survie entre deux groupes de patients — par exemple, ceux ayant reçu un traitement expérimental et ceux sous placebo. Votre directeur de thèse vous parle de courbe de Kaplan‑Meier, de censure, peut‑être même de test log‑rank. Mais par où commencer, surtout en R ?
Cet article vous guide pas à pas : de la mise en forme de vos données jusqu’à l’interprétation rigoureuse de votre courbe, en passant par le code R prêt à l’emploi. Que vous soyez doctorant en médecine, chercheur en santé publique ou étudiant en biostatistique, vous repartirez avec les bases nécessaires pour mener une analyse de survie solide.
Comprendre l’analyse de survie
L’analyse de survie — aussi appelée analyse de durée ou time-to-event analysis — s’intéresse au temps écoulé avant qu’un événement survienne. Cet événement peut être un décès, une rechute, une guérison, une hospitalisation, ou tout autre événement clairement défini et binaire : il se produit ou non.
Deux variables sont indispensables :
- le temps de suivi, exprimé en jours, mois ou années, entre le point de départ de l’étude et la fin de l’observation ;
- le statut de l’événement, codé en général 1 si l’événement est survenu, 0 s’il ne l’est pas encore au moment de la dernière observation.
La censure
La censure est au cœur de l’analyse de survie. Un patient est censuré lorsqu’on ne connaît pas son temps exact jusqu’à l’événement, soit parce qu’il est perdu de vue, soit parce que l’étude se termine avant que l’événement ne survienne.
Ce n’est pas une donnée manquante au sens classique : le patient apporte bien de l’information jusqu’au moment où il est observé. L’exclure complètement biaiserait les résultats. Kaplan‑Meier permet justement d’intégrer correctement cette information partielle.
Exemple : dans un essai clinique de 24 mois sur le cancer du sein, une patiente recrutée au mois 20 et qui n’a pas rechuté à la clôture de l’étude contribue 4 mois de suivi sans événement. Elle est censurée à droite, pas ignorée.
Préparer les données dans R
Pour une analyse de survie Kaplan‑Meier, deux packages sont généralement utilisés :
- survival : le package de référence, qui fournit
Surv()etsurvfit(); - survminer : très utile pour produire des graphiques lisibles et bien présentés.
r
install.packages("survival")
install.packages("survminer")
library(survival)
library(survminer)
Le jeu de données lung du package survival est souvent utilisé pour illustrer la méthode. Il contient les données de survie de 228 patients atteints d’un cancer du poumon avancé.
Variables utiles :
time: durée de survie en jours ;status: dans ce jeu de données,2 = décèset1 = censuré;sex:1 = homme,2 = femme.
Avant d’aller plus loin, il faut donc recoder le statut pour qu’il corresponde à la convention habituelle :
r data(lung) lung$status2 <- ifelse(lung$status == 2, 1, 0) table(lung$status2)
Il est toujours utile de vérifier la proportion d’événements et de censures avant l’analyse.
Construire la courbe de Kaplan-Meier
Créer l’objet de survie
La première étape consiste à créer un objet de survie avec Surv() :
r surv_obj <- Surv(time = lung$time, event = lung$status2)
Cet objet combine le temps et le statut de l’événement. Les observations censurées sont signalées par un petit symbole dans la sortie R.
Estimer la survie globale
Pour calculer la courbe globale :
r km_global <- survfit(Surv(time, status2) ~ 1, data = lung) summary(km_global)
La sortie donne, pour chaque temps où un événement se produit :
- le nombre de sujets à risque ;
- le nombre d’événements ;
- la probabilité de survie estimée ;
- l’intervalle de confiance à 95%.
La médiane de survie est fournie automatiquement lorsqu’elle peut être estimée. Elle correspond au moment où la survie passe sous 0,5.
Comparer deux groupes
L’intérêt principal de Kaplan‑Meier est de comparer des groupes.
Par exemple, si l’on veut comparer la survie entre hommes et femmes :
r km_sex <- survfit(Surv(time, status2) ~ sex, data = lung) print(km_sex)
Pour visualiser la courbe :
r
ggsurvplot(
km_sex,
data = lung,
pval = TRUE,
conf.int = TRUE,
risk.table = TRUE,
legend.labs = c("Homme", "Femme"),
xlab = "Temps (jours)",
ylab = "Probabilité de survie",
title = "Survie selon le sexe — données NCCTG",
palette = c("#0072B2", "#D55E00")
)
Les courbes en escalier descendent progressivement au fil du temps. Les petits traits verticaux indiquent les censures. Ils sont importants : ils montrent que tous les patients n’ont pas connu l’événement pendant la période d’observation.
Interpréter les résultats
La médiane de survie
La médiane de survie est plus pertinente que la moyenne dans ce contexte, car les temps de survie sont généralement asymétriques.
Elle correspond au temps au bout duquel 50% des sujets ont présenté l’événement.
Dans un compte-rendu, on peut dire par exemple que la médiane de survie est plus élevée chez les femmes que chez les hommes, ce qui suggère une meilleure survie dans ce groupe. Mais cette différence doit encore être testée statistiquement.
Le test log-rank
Le test log-rank, ou test de Mantel‑Cox, est le test de référence pour comparer deux courbes de Kaplan‑Meier. Son hypothèse nulle est que les fonctions de survie des groupes sont identiques sur toute la période de suivi.
r survdiff(Surv(time, status2) ~ sex, data = lung)
Si le test est significatif, on conclut que les courbes de survie diffèrent globalement entre les groupes.
Cependant, ce test suppose que les risques sont à peu près proportionnels au cours du temps. Si les courbes se croisent, ou si le profil de risque change fortement selon la période, l’interprétation du log‑rank devient moins robuste.
Lire les intervalles de confiance et le tableau à risque
Les zones ombrées autour des courbes représentent les intervalles de confiance à 95% de l’estimateur de Kaplan‑Meier.
Ils s’élargissent généralement en fin de suivi, parce que moins de patients restent à risque : la précision de l’estimation diminue. C’est pourquoi le risk table sous le graphique est essentiel : il permet de voir combien de sujets contribuent encore à la courbe à chaque moment.
Une courbe de survie ne doit jamais être lue sans regarder simultanément :
- le nombre de sujets à risque ;
- la proportion de censures ;
- la largeur des intervalles de confiance.
Bonnes pratiques d’interprétation
Bien définir le temps zéro
Le point de départ du suivi doit être défini clairement :
- date de randomisation dans un essai ;
- date de diagnostic dans une cohorte ;
- date de début d’exposition dans une étude observationnelle.
Un temps zéro incohérent peut introduire un biais d’immortalité et surestimer artificiellement la survie.
Quand Kaplan-Meier ne suffit plus
Kaplan‑Meier est excellent pour décrire et comparer des courbes. En revanche, dès qu’on veut ajuster sur des variables de confusion, il faut passer au modèle de Cox.
En pratique :
- Kaplan‑Meier = description et comparaison simple ;
- Cox = analyse ajustée et estimation d’effets indépendants.
Cas particuliers
Certains jeux de données demandent des précautions supplémentaires :
- événements compétitifs ;
- temps de suivi très hétérogènes ;
- covariables qui varient dans le temps ;
- données manquantes importantes.
Dans ces situations, il peut être utile d’aller au-delà de l’approche de base et de vérifier que la méthode choisie correspond bien à votre question de recherche.
Exporter vos résultats
Pour un mémoire ou un article, exportez votre courbe en bonne résolution :
r
p <- ggsurvplot(km_sex, data = lung, pval = TRUE, risk.table = TRUE)
ggsave("courbe_kaplan_meier.png", plot = p$plot, width = 8, height = 6, dpi = 300)
Dans la légende ou le texte, pensez à préciser :
- la définition de l’événement ;
- l’unité de temps ;
- la p‑valeur du test log‑rank ;
- le nombre de sujets dans chaque groupe.
Conclusion
L’analyse de survie Kaplan‑Meier repose sur une logique simple une fois les bases comprises :
- définir clairement l’événement et le temps zéro ;
- coder correctement les censures ;
- créer l’objet de survie avec
Surv(); - estimer les courbes avec
survfit(); - les visualiser avec
ggsurvplot(); - comparer les groupes avec le test log‑rank.
À retenir :
- la censure n’est pas une donnée manquante, elle doit être intégrée ;
- la médiane de survie est plus informative que la moyenne ;
- le log‑rank est utile, mais il suppose des risques comparables dans le temps ;
- le tableau des sujets à risque est indispensable pour lire correctement la courbe ;
- Kaplan‑Meier décrit et compare, tandis que Cox permet d’ajuster.
Avec cette base, vous pouvez mener une analyse de survie propre et défendable dans un mémoire, une thèse ou un article scientifique.