Table de survie en R : la méthode actuarielle pas à pas
Construisez une table de survie actuarielle (de cohorte) à la main à partir de données de suivi groupées — sujets à risque, décès, retraits, l’ajustement retraits/2 et la survie cumulée — et voyez en quoi elle diffère de Kaplan-Meier, et concorde avec elle
Apprenez la méthode actuarielle de la table de survie en R : estimez la survie quand les données de suivi arrivent en intervalles de temps groupés plutôt qu’en temps d’événement exacts. Construisez la table à la main en R base — sujets à risque, décès, retraits, la taille d’échantillon effective (n moins la moitié des retraits), la probabilité conditionnelle de décès et de survie par intervalle, et la survie cumulée — lisez-la en langage clair, et superposez-la à la courbe de Kaplan-Meier pour confirmer que les deux méthodes concordent quand les intervalles sont fins. Illustré sur les données de cancer du poumon NCCTG.
Date de publication
26 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Une table de survie (la méthode actuarielle ou de cohorte) estime la survie quand les données de suivi arrivent en intervalles de temps groupés — vous savez combien de sujets sont morts et combien ont abandonné dans chaque intervalle, mais pas les temps d’événement exacts dont Kaplan-Meier a besoin.
Chaque intervalle fournit une probabilité conditionnelle de survie\(p_j = 1 - q_j\), où \(q_j = d_j / (n_j - w_j/2)\) : les décès divisés par le nombre effectif de sujets à risque — l’effectif au début de l’intervalle moins la moitié des retraits (l’ajustement actuariel, car les patients censurés ne sont à risque que pendant une partie de l’intervalle). Multiplier les \(p_j\) sur l’ensemble des intervalles donne la survie cumulée.
Table de survie vs Kaplan-Meier : utilisez une table de survie pour des données groupées / enregistrées par intervalle (bilans annuels, grands registres) ; utilisez Kaplan-Meier quand vous disposez des temps d’événement exacts. Ce sont la même idée à deux résolutions — et elles concordent étroitement quand les intervalles sont fins.
Vous pouvez construire toute la table en R base (seq() pour les bornes, une boucle comptant à risque / décès / retraits par intervalle) — aucun package spécial nécessaire.
Le seul nombre à retenir est l’ajustement retraits/2 : oubliez-le et votre survie est biaisée.
Introduction
Imaginez un registre à long terme où les patients viennent pour un bilan annuel. À chaque visite vous notez qui est encore en vie, qui est décédé depuis la dernière visite, et qui a abandonné — mais vous ne connaissez pas le jour exact où chaque décès est survenu, seulement l’année où il est tombé. Ou imaginez une grande cohorte où les données arrivent déjà regroupées en intervalles. Dans les deux cas, les temps de survie sont groupés, pas exacts.
Kaplan-Meier a besoin d’un temps d’événement exact pour placer chaque marche dans la courbe, il ne s’applique donc pas directement ici. La méthode qui le fait est la table de survie — la méthode actuarielle (ou de cohorte), le plus ancien estimateur en analyse de survie. Elle découpe le temps en intervalles et estime la survie un intervalle à la fois, en posant une seule question par intervalle : parmi ceux encore à risque au début de l’intervalle, quelle fraction y a survécu ?
Cette leçon construit une table de survie actuarielle à la main en R base pour que vous voyiez exactement d’où vient chaque nombre, la lit en langage clair, et la superpose à la courbe de Kaplan-Meier pour prouver que les deux méthodes racontent la même histoire. Nous travaillons sur les données de cancer du poumon NCCTG pour que vous puissiez reproduire chaque figure — en regroupant ses temps exacts en intervalles pour simuler la situation groupée pour laquelle une table de survie est construite.
Nous utilisons lung, le jeu de données du North Central Cancer Treatment Group fourni avec le package survival — la survie de 228 patients atteints d’un cancer du poumon avancé. Son time est en jours et status est codé 1 = censuré, 2 = décédé. Une table de survie travaille sur des données groupées, nous regroupons donc les temps de survie en intervalles de 90 jours (à peu près des bilans trimestriels). Regardez d’abord les colonnes et les bornes :
library(survival)# 90-day intervals from 0 to 1080 days (≈ quarterly follow-up)breaks <-seq(0, 1080, by =90)breaks
# status: 1 = censored (alive at last visit), 2 = dead. Recode to a 0/1 event flag.event <-as.integer(lung$status ==2)c(n_patients =nrow(lung), n_deaths =sum(event), n_censored =sum(event ==0))
n_patients n_deaths n_censored
228 165 63
Soit 228 patients, 165 décès, 63 censurés — et douze intervalles de 90 jours à parcourir.
La mécanique de la table de survie
Pour chaque intervalle \([t_j, t_{j+1})\) la méthode actuarielle a besoin de quatre effectifs et en dérive trois probabilités :
Symbole
Signification
\(n_j\)
nombre de sujets à risque au début de l’intervalle (tous ceux dont le suivi atteint \(t_j\))
\(d_j\)
décès pendant l’intervalle
\(w_j\)
retraits — patients censurés (perdus de vue / encore en vie à la dernière visite) pendant l’intervalle
\(n_j' = n_j - w_j/2\)
nombre effectif de sujets à risque — l’ajustement actuariel
\(q_j = d_j / n_j'\)
probabilité conditionnelle de décès dans l’intervalle
\(p_j = 1 - q_j\)
probabilité conditionnelle de survivre à l’intervalle
\(S(t_{j+1}) = \prod_{k \le j} p_k\)
survie cumulée jusqu’à la fin de l’intervalle
La seule idée qui distingue une table de survie d’un taux de décès naïf est l’ajustement retraits/2. Un patient censuré au milieu d’un intervalle n’était à risque que pendant une partie de celui-ci, pas en totalité. La méthode actuarielle suppose que les retraits sont répartis uniformément sur l’intervalle, donc chacun contribue en moyenne pour la moitié de l’exposition de l’intervalle. Nous retranchons donc la moitié des retraits du dénominateur : \(n_j' = n_j - w_j/2\). Sautez cette étape et vous surcomptez le dénominateur, sous-estimez le taux de décès, et biaisez la survie vers le haut.
Parcours d’un intervalle
Prenez le deuxième intervalle, 90–180 jours, avec les chiffres de lung (calculés ci-dessous) : \(n_j = 201\) à risque, \(d_j = 35\) décès, \(w_j = 6\) retraits. L’arithmétique est toute la méthode en miniature :
Survie cumulée à 180 jours : multipliez par la survie de l’intervalle précédent, \(S(180) = 0.882 \times 0.823 = 0.726\).
Voilà la recette ; nous l’exécutons maintenant sur les douze intervalles.
Construire la table de survie en R base
Aucun package spécial n’est nécessaire — seq() a fait les bornes, et une simple boucle compte les trois nombres par intervalle, puis une arithmétique vectorisée donne les probabilités. Tout est en R base, donc le bloc s’exécute copié-collé dans n’importe quel ordre :
library(survival)breaks <-seq(0, 1080, by =90)time <- lung$timeevent <-as.integer(lung$status ==2) # 1 = death, 0 = censored# One row per intervallt <-data.frame(start =head(breaks, -1), end = breaks[-1])# Count at-risk, deaths, withdrawals in each intervallt$n_risk <-sapply(lt$start, function(s) sum(time >= s))lt$deaths <-mapply(function(s, e) sum(time >= s & time < e & event ==1), lt$start, lt$end)lt$withdrawn <-mapply(function(s, e) sum(time >= s & time < e & event ==0), lt$start, lt$end)# Actuarial adjustment + conditional and cumulative survivallt$eff_n <- lt$n_risk - lt$withdrawn /2# effective number at risklt$q <- lt$deaths / lt$eff_n # conditional prob of deathlt$p <-1- lt$q # conditional prob of survivallt$surv <-cumprod(lt$p) # cumulative survival# Tidy displayround(lt, 3)
n_risk part de 228 et baisse à chaque intervalle à mesure que des patients meurent ou se retirent — c’est la cohorte encore suivie quand l’intervalle s’ouvre.
deaths / withdrawn sont les événements et les patients censurés (perdus de vue / encore en vie) dans cet intervalle.
eff_n est n_risk − withdrawn/2 — le dénominateur actuariel. Dans l’intervalle 1 il n’y a aucun retrait donc eff_n = n_risk ; à partir de l’intervalle 2, l’ajustement entre en jeu.
q monte d’environ 0.12 à 0.39 — le risque de décès par intervalle grimpe à mesure que la cohorte s’amincit.
surv est le chiffre clé : la survie cumulée chute de 0.88 à 90 jours à environ 0.13 à 720 jours. Lisez-le comme « on estime que 44 % des patients survivent au-delà de 360 jours » (surv = 0.437 à la fin de l’intervalle 270–360).
Les derniers intervalles affichent q = 0 et une survie plate — il ne reste qu’une poignée de patients, donc une queue sans décès laisse l’estimation inchangée. Interprétez la queue de toute table de survie avec la même prudence qu’une queue de KM : peu de patients, estimation instable.
La table de survie estime la fonction de survie\(S(t)\) comme un produit de probabilités de survie propres à chaque intervalle — la même idée de limite de produit que Kaplan-Meier, mais sur des intervalles fixes au lieu de temps d’événement exacts :
où \(n_k\) est le nombre de sujets à risque au début de l’intervalle \(k\), \(d_k\) les décès, et \(w_k\) les retraits (censurés). Le nombre effectif de sujets à risque\(n_k'\) encode l’hypothèse actuarielle selon laquelle les retraits surviennent uniformément dans l’intervalle, de sorte que chaque patient censuré contribue en moyenne pour la moitié de l’exposition de l’intervalle. À mesure que la largeur de l’intervalle se réduit vers zéro — au plus un événement par intervalle — \(n_k'\) se rapproche de l’ensemble de sujets à risque exact et la table de survie converge vers l’estimateur de Kaplan-Meier. Kaplan-Meier est simplement le cas limite de la table de survie quand vous connaissez les temps d’événement exacts.
Table de survie vs Kaplan-Meier : concordent-elles ?
La table de survie et Kaplan-Meier sont la même idée à deux résolutions : la table de survie regroupe le temps en intervalles ; Kaplan-Meier place une marche à chaque temps d’événement exact. Elles devraient donc concorder étroitement — et plus les intervalles sont fins, plus elles sont proches. Superposez la survie de la table de survie (un point à la fin de chaque intervalle) à la courbe de Kaplan-Meier pour le voir :
library(survival)# Kaplan-Meier on the exact timeskm <-survfit(Surv(time, status) ~1, data = lung)# Life-table survival from the table built above (recomputed self-contained)breaks <-seq(0, 1080, by =90)time <- lung$timeevent <-as.integer(lung$status ==2)starts <-head(breaks, -1); ends <- breaks[-1]n_risk <-sapply(starts, function(s) sum(time >= s))deaths <-mapply(function(s, e) sum(time >= s & time < e & event ==1), starts, ends)withdrawn <-mapply(function(s, e) sum(time >= s & time < e & event ==0), starts, ends)eff_n <- n_risk - withdrawn /2lt_surv <-cumprod(1- deaths / eff_n)# Plot the KM curve, then the life-table survival as points at interval endsplot(km, conf.int =FALSE, mark.time =TRUE,xlab ="Time (days)", ylab ="Survival probability",xlim =c(0, 760), col ="grey20", lwd =2)points(ends[ends <=760], lt_surv[ends <=760],pch =19, col ="#e8731b", cex =1.3)legend("topright", bty ="n",legend =c("Kaplan-Meier (exact times)", "Life table (90-day intervals)"),col =c("grey20", "#e8731b"), lwd =c(2, NA), pch =c(NA, 19))
Les points orange de la table de survie se situent presque exactement sur la courbe de Kaplan-Meier. Quantifiez la concordance à quelques temps repères :
library(survival)breaks <-seq(0, 1080, by =90)time <- lung$timeevent <-as.integer(lung$status ==2)starts <-head(breaks, -1); ends <- breaks[-1]n_risk <-sapply(starts, function(s) sum(time >= s))deaths <-mapply(function(s, e) sum(time >= s & time < e & event ==1), starts, ends)withdrawn <-mapply(function(s, e) sum(time >= s & time < e & event ==0), starts, ends)lt_surv <-cumprod(1- deaths / (n_risk - withdrawn /2))km <-survfit(Surv(time, status) ~1, data = lung)landmarks <-c(180, 360, 540)data.frame(time = landmarks,life_table =round(lt_surv[match(landmarks, ends)], 3),kaplan_meier =round(summary(km, times = landmarks)$surv, 3))
À 180, 360 et 540 jours, les deux estimations diffèrent d’au plus ~0.005 — bien à l’intérieur de toute tolérance pratique. Réduisez les intervalles (disons 30 jours) et elles convergent encore davantage ; élargissez-les et la table de survie perd en résolution et s’écarte de KM (voir Problèmes courants). À retenir : quand les temps exacts sont disponibles, KM et une table de survie à grain fin donnent la même réponse — utilisez donc KM. La table de survie justifie son intérêt précisément quand les temps exacts ne sont pas disponibles.
NoteQuelle méthode mes données appellent-elles ?
Temps d’événement exacts (le jour où chaque événement s’est produit) → Kaplan-Meier. C’est la référence pour le suivi d’essai clinique.
Données groupées / enregistrées par intervalle (événements connus seulement par intervalle — bilans annuels, registres regroupés) → la table de survie (cette leçon). C’est l’estimateur naturel quand la résolution des données est l’intervalle, pas le jour.
Les deux estiment la même fonction de survie ; la table de survie est la sœur à résolution plus grossière de KM.
Essayez en direct
Construisez vous-même la table de survie — changez la largeur d’intervalle (by =) et regardez les estimations de survie et la concordance avec Kaplan-Meier évoluer. Le bac à sable démarre au premier Run.
🟢 Avec un agent IA
Demandez à Prova« J’ai des données de suivi groupées avec décès et retraits par intervalle — construis une table de survie actuarielle en R, avec l’ajustement retraits/2 et la survie cumulée, et vérifie-la par rapport à une courbe de Kaplan-Meier » — elle répond avec du code R base que vous pouvez exécuter sur vos propres intervalles. The runtime is the judge.Demander à Prova →
Problèmes courants
Vous avez oublié l’ajustement retraits/2. Utiliser q = deaths / n_risk (l’effectif brut au début de l’intervalle) au lieu de q = deaths / (n_risk - withdrawn/2) surcompte le dénominateur, sous-estime le taux de décès, et biaise la survie vers le haut. L’ajustement est la caractéristique déterminante de la méthode actuarielle — ne le laissez jamais tomber. (Il n’importe que lorsqu’il y a des retraits à l’intérieur d’un intervalle ; sans aucun, les deux formules coïncident.)
Intervalles trop larges — vous perdez en résolution. Des intervalles très larges regroupent de nombreux décès en une seule marche, donc la courbe devient anguleuse et s’écarte de la vraie survie (Kaplan-Meier), et l’hypothèse actuarielle de « retraits uniformes » devient plus fragile. Trop étroits et la plupart des intervalles sont vides, ajoutant du bruit. Adaptez l’intervalle à la résolution réelle des données (le calendrier des bilans, le regroupement) — et visez une poignée d’événements par intervalle.
Mélanger données groupées et exactes. Si vous disposez réellement de temps d’événement exacts, ne les regroupez pas dans une table de survie — vous jetez de la résolution pour rien. Utilisez directement Kaplan-Meier. La table de survie est faite pour quand les données arrivent groupées, pas pour grossir des données que vous avez déjà à pleine résolution.
Questions fréquentes
NoteQuelle est la différence entre une table de survie et Kaplan-Meier ?
Une table de survie (méthode actuarielle) estime la survie sur des intervalles de temps fixes — elle n’a besoin que des décès et des retraits par intervalle, pas des temps d’événement exacts. Kaplan-Meier place une marche à chaque temps d’événement exact. Elles estiment la même fonction de survie et concordent étroitement ; la table de survie est la sœur à résolution plus grossière que vous utilisez quand les données arrivent groupées (bilans annuels, registres regroupés) et que les temps exacts sont indisponibles.
NoteQu’est-ce que la méthode actuarielle en analyse de survie ?
La méthode actuarielle est l’estimateur de la table de survie. Pour chaque intervalle elle calcule la probabilité conditionnelle de décès \(q_j = d_j / (n_j - w_j/2)\) — les décès divisés par le nombre effectif de sujets à risque, où la moitié des retraits est retranchée car les patients censurés n’étaient à risque que pendant une partie de l’intervalle — puis multiplie les probabilités de survie par intervalle \(p_j = 1 - q_j\) pour obtenir la survie cumulée. Le nom vient de ses origines dans la science actuarielle (assurance).
NotePourquoi retrancher la moitié des retraits du nombre de sujets à risque ?
Parce qu’un patient censuré au milieu d’un intervalle n’était à risque que pendant une partie de celui-ci, pas tout l’intervalle. La méthode actuarielle suppose que les retraits sont répartis uniformément sur l’intervalle, donc en moyenne chacun contribue pour la moitié de l’exposition de l’intervalle. Retrancher withdrawn/2 donne le nombre effectif de sujets à risque ; le sauter gonfle le dénominateur et biaise la survie vers le haut.
NoteQuand utiliser une table de survie plutôt que Kaplan-Meier ?
Utilisez une table de survie quand vos données sont groupées ou enregistrées par intervalle — vous savez combien de sujets sont morts et ont abandonné dans chaque intervalle mais pas les temps d’événement exacts (par ex. bilans périodiques, grands registres rapportés par intervalle). Utilisez Kaplan-Meier chaque fois que vous disposez des temps d’événement exacts, ce qui est le cas habituel en essai clinique. Elles concordent quand les intervalles sont fins, donc KM est préféré chaque fois que les temps exacts existent.
NoteComment choisir la largeur d’intervalle pour une table de survie ?
Adaptez l’intervalle à la résolution de vos données — le calendrier des bilans ou le regroupement que les données ont déjà. Visez une poignée d’événements par intervalle : trop large et la courbe perd en résolution et s’écarte de la vraie survie ; trop étroit et la plupart des intervalles sont vides, ajoutant du bruit. En cas de doute, essayez quelques largeurs et vérifiez que les estimations de survie sont stables.
Testez vos connaissances
ImportantPratique
Construisez-la. Dans la cellule interactive ci-dessous, un intervalle compte 100 à risque, 20 décès et 10 retraits. Remplissez les blancs pour calculer le nombre effectif de sujets à risque et la probabilité conditionnelle de survie\(p\) pour cet intervalle.
Interprétez. Si la survie cumulée à l’entrée de cet intervalle était de 0.80, quelle est la survie cumulée à la fin de celui-ci ?
NoteIndice
Le nombre effectif de sujets à risque retranche la moitié des retraits : n_risk - withdrawn/2. La survie conditionnelle est p = 1 - deaths/eff_n. Pour la survie cumulée à la fin de l’intervalle, multipliez la survie cumulée entrante par le p de cet intervalle.
NoteSolution
eff_n <-100-10/2# = 95q <-20/95# = 0.211p <-1- q # = 0.789# Cumulative survival at end of interval:0.80* p # = 0.80 × 0.789 = 0.631
Le nombre effectif de sujets à risque est 95 (pas 100 — la moitié des 10 retraits est retirée). La probabilité conditionnelle de survivre à l’intervalle est de 0.789, donc la survie cumulée tombe de 0.80 à environ 0.63 à la fin de l’intervalle. Si vous aviez oublié l’ajustement des retraits (q = 20/100 = 0.20, p = 0.80), vous auriez surestimé la survie de fin d’intervalle à 0.64 — le biais que la correction actuarielle supprime.
AstuceVérification rapide
Vous disposez d’un grand registre où la survie n’est enregistrée qu’aux visites annuelles — vous savez combien de patients sont morts chaque année mais pas les dates exactes. Quel estimateur utiliser, et pourquoi ?
NoteAfficher la réponse
Une table de survie (méthode actuarielle). Les données sont groupées en intervalles annuels, donc vous n’avez pas les temps d’événement exacts que Kaplan-Meier requiert — mais vous avez les décès et les retraits par intervalle, ce qui est exactement ce dont la table de survie a besoin. Kaplan-Meier ne serait approprié que si vous connaissiez le jour exact de chaque décès.
Conclusion
Vous savez désormais réaliser une analyse par table de survie en R : regrouper les données de suivi en intervalles, compter le nombre de sujets à risque, les décès et les retraits par intervalle, appliquer l’ajustement actuariel retraits/2 pour obtenir le nombre effectif de sujets à risque, et multiplier les probabilités de survie par intervalle en une estimation de survie cumulée — le tout en R base, sans package spécial. La table de survie est l’estimateur naturel quand les données arrivent groupées plutôt qu’en temps d’événement exacts ; superposée à la courbe de Kaplan-Meier, elle se situe presque exactement dessus, confirmant que les deux sont la même idée à deux résolutions. Quand vous avez des temps d’événement exacts, tournez-vous vers Kaplan-Meier ; quand vos données arrivent en intervalles, la table de survie est le bon outil.
Prouvez que vous savez le faire. Maîtrisez toute la série Analyse de survie en R — suivez votre parcours, construisez des projets et obtenez un certificat.
Chaque résultat de cette page a été produit par le code montré, exécuté au moment du build contre un environnement R figé — modifiez n’importe quel bloc et faites Run pour le reproduire vous-même.
@online{2026,
author = {},
title = {Table de survie en R : la méthode actuarielle pas à pas},
date = {2026-06-26},
url = {https://www.datanovia.com/learn/biostatistics/survival-analysis/life-tables},
langid = {fr}
}