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 :

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 :

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 :

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 :

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 :

Bonnes pratiques d’interprétation

Bien définir le temps zéro

Le point de départ du suivi doit être défini clairement :

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 :

Cas particuliers

Certains jeux de données demandent des précautions supplémentaires :

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 :

Conclusion

L’analyse de survie Kaplan‑Meier repose sur une logique simple une fois les bases comprises :

À retenir :

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.