Modèles de survie paramétriques en R : Weibull, AFT et extrapolation
Supposez une distribution pour le temps de survie avec survreg et flexsurv — ajustez des modèles Weibull, exponentiel, log-normal et log-logistique, interprétez le rapport de temps, choisissez par AIC, convertissez l’AFT en hazard ratio et extrapolez au-delà du suivi
Apprenez les modèles de survie paramétriques en R avec les packages survival et flexsurv. Ajustez des modèles à temps de défaillance accéléré (AFT) Weibull, exponentiel, log-normal et log-logistique avec survreg(), interprétez le rapport de temps (et non le hazard ratio), choisissez une distribution par AIC, superposez la courbe ajustée à la courbe de Kaplan-Meier, convertissez un AFT Weibull en hazard ratio à la Cox, ajustez un modèle spline flexible Royston-Parmar avec flexsurvspline(), et extrapolez la survie au-delà du suivi observé pour les modèles médico-économiques.
Date de publication
26 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Un modèle de survie paramétrique suppose que le temps de survie suit une distribution connue (Weibull, exponentielle, log-normale, log-logistique). En échange de cette hypothèse, vous obtenez une courbe de survie et de risque lisse, des résumés distributionnels complets (n’importe quel quantile, la moyenne) et — la fonctionnalité phare — l’extrapolation au-delà du suivi observé.
La plupart des modèles paramétriques sont des modèles à temps de défaillance accéléré (AFT) : les covariables étirent ou compriment la chronologie de survie. La taille d’effet est un rapport de temps, et non un hazard ratio — « être une femme multiplie le temps de survie par ~1.49 » plutôt que « réduit le risque de 41 % ».
Ajustez-les avec survreg(Surv(time, status) ~ ., dist = "weibull") (le package survival) ou flexsurv::flexsurvreg() (résumés plus soignés, traçage intégré, plus de distributions).
Choisissez la distribution par AIC et en superposant la courbe ajustée à la courbe de Kaplan-Meier — l’AIC le plus bas qui suit aussi la courbe KM l’emporte. Sur les données lung, c’est le Weibull qui s’ajuste le mieux (AIC 2275).
Le Weibull est particulier : il est à la fois AFT et à risques proportionnels, vous pouvez donc convertir son rapport de temps en hazard ratio à la Cox — ils concordent (HR ≈ 0.58 pour le sexe, identique au modèle Cox).
Lorsqu’une distribution standard est trop rigide, ajustez un modèle spline flexible avec flexsurvspline() (Royston-Parmar) pour une forme de risque arbitraire.
Introduction
Votre essai a suivi les patients pendant deux ans et le modèle Cox vous a donné des hazard ratios propres. Maintenant l’équipe médico-économique a besoin de la survie à 5 ans pour un modèle de coût-efficacité — un chiffre que vos données n’ont jamais observé. Le modèle Cox ne peut pas vous le fournir : il laisse le risque de base non spécifié, il n’a donc rien à dire au-delà du dernier temps d’événement. Vous avez besoin d’un modèle qui suppose une forme pour l’ensemble de la courbe de survie, afin de pouvoir l’extrapoler.
C’est un modèle de survie paramétrique. Au lieu de laisser le risque de base libre (le compromis du modèle Cox), vous supposez que le temps de survie suit une distribution spécifique — Weibull, exponentielle, log-normale, log-logistique — et vous estimez ses paramètres. La récompense :
une courbe de survie et de risque lisse (pas de fonction en escalier), et n’importe quel quantile ou la moyenne, pas seulement la médiane ;
l’extrapolation de la survie au-delà du suivi observé — la raison pour laquelle les modèles médico-économiques et de coût-efficacité utilisent presque toujours un ajustement paramétrique ;
un effet de covariable exprimé sous forme de rapport de temps (l’interprétation en temps de défaillance accéléré), que beaucoup trouvent plus intuitif qu’un hazard ratio.
Cette leçon ajuste la famille paramétrique en R avec la fonction survreg() de survival et le package plus complet flexsurv, en choisissant une distribution par AIC et par une superposition ajustée-vs-Kaplan-Meier, sur les mêmes données de cancer du poumon NCCTG utilisées tout au long de cette série pour que vous puissiez reproduire chaque chiffre.
NoteAFT vs PH — deux façons de modéliser une covariable
Un modèle à risques proportionnels (PH) (Cox) dit qu’une covariable multiplie le risque par une constante — le hazard ratio.
Un modèle à temps de défaillance accéléré (AFT) dit qu’une covariable multiplie le temps de survie par une constante — le rapport de temps. Un rapport de temps de 1.5 signifie que la covariable étire la chronologie de survie de 50 % (survie plus longue) ; en dessous de 1, elle accélère la défaillance (survie plus courte).
La distribution de Weibull est le seul modèle qui soit à la fois AFT et PH, son rapport de temps se convertit donc proprement en hazard ratio. L’exponentielle l’est aussi (c’est un Weibull à risque constant) ; la log-normale et la log-logistique sont AFT uniquement.
Les données et la question
Nous utilisons lung, le jeu de données du North Central Cancer Treatment Group fourni avec le package survival (228 patients atteints d’un cancer du poumon avancé). Le codage est celui standard du package survival : status vaut 1 = censuré / 2 = décédé, sex vaut 1 = homme / 2 = femme, ph.ecog est le score de performance ECOG. Nous modélisons la survie en fonction du sexe, de l’âge et du score ECOG — les mêmes covariables que la leçon Cox, pour que vous puissiez comparer directement les deux cadres.
L’objet Surv(time, status) est la réponse, exactement comme dans le modèle Cox — les modèles paramétriques font simplement une hypothèse différente sur ce qui a généré ces temps.
Ajuster un modèle Weibull AFT avec survreg()
Commençons par le cheval de trait, le modèle de Weibull. survreg() (package survival) ajuste des modèles AFT paramétriques ; choisissez la distribution avec dist. La réponse Surv(time, status) va à gauche, les covariables à droite :
library(survival)fit.wb <-survreg(Surv(time, status) ~ sex + age + ph.ecog, data = lung, dist ="weibull")summary(fit.wb)
Call:
survreg(formula = Surv(time, status) ~ sex + age + ph.ecog, data = lung,
dist = "weibull")
Value Std. Error z p
(Intercept) 6.27344 0.45358 13.83 < 2e-16
sex 0.40109 0.12373 3.24 0.0012
age -0.00748 0.00676 -1.11 0.2690
ph.ecog -0.33964 0.08348 -4.07 4.7e-05
Log(scale) -0.31319 0.06135 -5.11 3.3e-07
Scale= 0.731
Weibull distribution
Loglik(model)= -1132.4 Loglik(intercept only)= -1147.4
Chisq= 29.98 on 3 degrees of freedom, p= 1.4e-06
Number of Newton-Raphson Iterations: 5
n=227 (1 observation effacée parce que manquante)
Lisez la sortie — et attention à la paramétrisation.survreg() travaille sur l’échelle du log-temps, donc ses coefficients sont des coefficients AFT, et non des log-hazard ratios :
sex = 0.401. Un coefficient positif signifie que la covariable allonge le temps de survie. Exponentiez pour obtenir le rapport de temps : exp(0.401) ≈ 1.49. Être une femme (sexe 2 vs 1) multiplie le temps de survie par environ 1.49 — les femmes survivent environ 49 % plus longtemps, à âge et ECOG fixés.
ph.ecog = −0.340. Un coefficient négatifraccourcit la survie. exp(−0.340) ≈ 0.71 : chaque point d’aggravation du score ECOG multiplie le temps de survie par 0.71 (une chronologie 29 % plus courte) — un mauvais facteur pronostique, comme précédemment.
age = −0.0075, p = 0.27. Rapport de temps ≈ 0.99 et non significatif — l’âge disparaît après ajustement, la même histoire que celle racontée par le modèle Cox.
Log(scale) = −0.313 → Scale = 0.731. C’est l’échelle Weibull dans la paramétrisation de survreg ; son inverse est la forme Weibull, 1 / 0.731 ≈ 1.37. Une forme > 1 signifie que le risque augmente au fil du temps (le risque de décès s’élève à mesure que la maladie progresse) ; une forme = 1 serait un risque constant (l’ exponentielle) ; une forme < 1 un risque décroissant.
Le modèle est significatif — le χ²(3) du rapport de vraisemblance = 29.98, p = 1.4×10⁻⁶, battant nettement le modèle nul à intercept seul.
NoteLe piège du signe (les coefficients AFT vont à l’opposé de PH)
Dans un modèle AFT, un coefficient positif est bon (survie plus longue) ; dans un modèle PH/Cox, un coefficient positif est mauvais (risque plus élevé). Même effet protecteur de sex, signe opposé : AFT sex = +0.40 (étire le temps), Cox sex = −0.53 (abaisse le risque). Sachez toujours quel cadre votre logiciel rapporte avant de lire un signe.
Ajuster toute la famille et choisir par AIC
Aucune distribution n’est juste a priori — ajustez-en plusieurs et comparez. Ajustez les modèles exponentiel, Weibull, log-normal et log-logistique, puis classez-les par AIC (plus bas = meilleur ajustement, pénalisé pour le nombre de paramètres) :
library(survival)f <-Surv(time, status) ~ sex + age + ph.ecogfits <-list(exponential =survreg(f, data = lung, dist ="exponential"),weibull =survreg(f, data = lung, dist ="weibull"),lognormal =survreg(f, data = lung, dist ="lognormal"),loglogistic =survreg(f, data = lung, dist ="loglogistic"))aic <-sapply(fits, AIC)tab <-data.frame(distribution =names(aic), AIC =round(aic, 1))tab <- tab[order(tab$AIC), ]tab$delta_AIC <-round(tab$AIC -min(tab$AIC), 1)tab
Lisez-le : le Weibull a l’AIC le plus bas (2274.9), avec la log-logistique en deuxième position (ΔAIC ≈ 10) et l’exponentielle nettement moins bonne (ΔAIC ≈ 20) — son hypothèse de risque constant est trop rigide pour ces données, où le risque augmente au fil du temps (rappelez-vous la forme Weibull ≈ 1.37). Une règle empirique : ΔAIC < 2 = indiscernable, 4–7 = nettement moins bon, > 10 = essentiellement aucun soutien. Ici le choix est le Weibull.
AvertissementL’AIC seul ne suffit pas — regardez toujours la courbe
L’AIC classe les candidats les uns par rapport aux autres, mais il ne peut pas vous dire si le meilleur s’ajuste réellement. Deux distributions d’AIC similaire peuvent extrapoler vers des survies à long terme radicalement différentes. Associez toujours le tableau d’AIC à la superposition ajustée-vs-Kaplan-Meier ci-dessous (la courbe suit-elle les données ?) — et, pour une extrapolation, vérifiez la forme de la queue de distribution à l’aune des connaissances cliniques.
La vérification signature : courbes ajustées superposées à la courbe de Kaplan-Meier
Le diagnostic décisif est visuel : superposez chaque courbe de survie paramétrique ajustée à l’estimation de Kaplan-Meier (la vérité non paramétrique). Une bonne distribution épouse la fonction en escalier KM ; une mauvaise s’en éloigne. Nous construisons les courbes à partir d’ajustements à intercept seul (la survie marginale), puis nous les traçons par-dessus la KM avec la fonction ggsurvplot() de survminer :
library(survival)library(survminer)# Non-parametric Kaplan-Meier (the reference)km <-survfit(Surv(time, status) ~1, data = lung)# A grid of times to evaluate the fitted curves ont <-seq(1, max(lung$time), length.out =200)# Marginal (intercept-only) parametric fits, predicted survival at each tpred <-function(dist) { m <-survreg(Surv(time, status) ~1, data = lung, dist = dist)# survreg gives quantiles; invert to S(t) on the time grid (row 1 = the marginal fit) q <-seq(0.001, 0.999, by =0.001) pt <-predict(m, type ="quantile", p = q)[1, ]approx(pt, 1- q, xout = t, rule =2)$y}curves <-data.frame(time =rep(t, 3),surv =c(pred("weibull"), pred("exponential"), pred("lognormal")),dist =rep(c("Weibull", "Exponential", "Log-normal"), each =length(t)))ggsurvplot(km, data = lung, conf.int =FALSE, censor =FALSE,palette ="black", legend ="none",ggtheme =theme_minimal(),xlab ="Time (days)", ylab ="Survival probability")$plot +geom_line(data = curves, aes(x = time, y = surv, colour = dist), linewidth =0.9) + ggsci::scale_color_jco(name ="Fitted") +labs(subtitle ="Black step = Kaplan-Meier; coloured = fitted parametric")
Lisez-le : le Weibull (sa forme laisse le risque augmenter au fil du temps) suit la courbe KM étroitement du début à la fin — confirmant le verdict de l’AIC visuellement. La log-normale est proche mais passe légèrement au-dessus dans la queue. L’exponentielle échoue nettement : son hypothèse de risque constant force une courbe qui se situe au-dessus des données au début et descend trop lentement — exactement le genre de décalage que l’AIC a signalé. L’image et le tableau d’AIC concordent : faites confiance au Weibull.
flexsurv : des résumés plus propres, le même Weibull
Le package flexsurv ajuste les mêmes modèles avec une interface plus conviviale, une prédiction directe de la survie/du risque, des intervalles de confiance sur chaque quantité et un traçage intégré. Sa fonction flexsurvreg() rapporte le Weibull sur son échelle naturelle (forme et échelle directement) ainsi que les effets des covariables sous forme de rapports de temps dans la colonne exp(est) — pas d’exponentiation manuelle :
library(survival)library(flexsurv)fs.wb <-flexsurvreg(Surv(time, status) ~ sex + age + ph.ecog, data = lung, dist ="weibull")fs.wb
Call:
flexsurvreg(formula = Surv(time, status) ~ sex + age + ph.ecog,
data = lung, dist = "weibull")
Estimates:
data mean est L95% U95% se exp(est)
shape NA 1.37e+00 1.21e+00 1.54e+00 8.39e-02 NA
scale NA 5.30e+02 2.18e+02 1.29e+03 2.41e+02 NA
sex 1.40e+00 4.01e-01 1.59e-01 6.44e-01 1.24e-01 1.49e+00
age 6.25e+01 -7.48e-03 -2.07e-02 5.78e-03 6.76e-03 9.93e-01
ph.ecog 9.52e-01 -3.40e-01 -5.03e-01 -1.76e-01 8.35e-02 7.12e-01
L95% U95%
shape NA NA
scale NA NA
sex 1.17e+00 1.90e+00
age 9.79e-01 1.01e+00
ph.ecog 6.05e-01 8.39e-01
N = 227, Events: 164, Censored: 63
Total time at risk: 69522
Log-likelihood = -1132.439, df = 5
AIC = 2274.877
Lisez-le : flexsurv rapporte une forme ≈ 1.37 et les rapports de temps des covariables directement dans la colonne exp(est) — sex 1.49 (IC à 95 % 1.17–1.90), ph.ecog 0.71 (0.60–0.84), age 0.99 (ns) — identiques à ce que nous avons calculé à la main à partir de survreg() (la log-vraisemblance, −1132.4, et l’AIC, 2274.9, correspondent exactement : c’est le même modèle, un affichage plus soigné). Pour le travail paramétrique courant, flexsurv est le moteur le plus pratique ; survreg() est le cheval de trait de base-survival qu’il vaut la peine de connaître car il est partout.
Convertir l’AFT Weibull en hazard ratio
Parce que le Weibull est à la fois AFT et PH, vous pouvez transformer son rapport de temps en un hazard ratio à la Cox — utile lorsqu’une revue ou un collègue attend des HR. La conversion utilise la forme Weibull p :
Le hazard ratio implicite du Weibull pour le sexe est ≈ 0.58 — être une femme réduit le risque d’environ 42 % — ce qui correspond au HR de 0.58 du modèle Cox de la leçon Cox presque exactement. Deux cadres, deux tailles d’effet (un rapport de temps de 1.49 et un hazard ratio de 0.58), racontant la même histoire à propos du même effet protecteur.
La fonctionnalité phare : extrapoler au-delà du suivi
C’est ce qu’un modèle paramétrique vous offre que Cox ne peut pas. Une fois la distribution fixée, la courbe de survie est définie pour tout le temps — vous pouvez donc lire la survie à des horizons que vos données n’ont jamais atteints, ainsi que des résumés distributionnels complets. Utilisez la fonction summary() de flexsurv avec type = "survival" (avec intervalles de confiance) ou type = "mean" :
library(survival)library(flexsurv)fs.wb <-flexsurvreg(Surv(time, status) ~ sex + age + ph.ecog, data = lung, dist ="weibull")# A typical male vs female patient (mean age, ECOG = 1)nd <-data.frame(sex =c(1, 2), age =mean(lung$age, na.rm =TRUE), ph.ecog =1)# Predicted survival at 1 and 2 years (730 days is past most follow-up)summary(fs.wb, newdata = nd, t =c(365, 730), type ="survival", tidy =TRUE)
time est lcl ucl sex age ph.ecog
1 365 0.35186771 0.28240939 0.4193949 1 62.44737 1
2 730 0.06750298 0.03328163 0.1072413 1 62.44737 1
3 365 0.54691334 0.45575717 0.6306792 2 62.44737 1
4 730 0.21068601 0.12455052 0.3033914 2 62.44737 1
Le modèle prédit une survie à 1 an de 35 % pour un homme type vs 55 % pour une femme, et une survie à 2 ans de 7 % vs 21 % — même si relativement peu de patients ont été suivis deux années complètes. Chaque prédiction est accompagnée d’un intervalle de confiance (lcl/ucl) ; la bande s’élargit à mesure que vous extrapolez loin, un signal honnête d’une incertitude croissante. Vous pouvez aussi lire le temps de survie moyen directement (l’aire sous la courbe, indéfinie pour une courbe KM qui n’atteint jamais zéro) :
library(survival)library(flexsurv)fs.wb <-flexsurvreg(Surv(time, status) ~ sex + age + ph.ecog, data = lung, dist ="weibull")nd <-data.frame(sex =c(1, 2), age =mean(lung$age, na.rm =TRUE), ph.ecog =1)summary(fs.wb, newdata = nd, type ="mean", tidy =TRUE)
est lcl ucl sex age ph.ecog
1 323.4767 280.8630 372.1535 1 62.44737 1
2 483.0970 392.8482 584.0048 2 62.44737 1
Survie moyenne ≈ 323 jours pour un homme vs 483 jours pour une femme — et 483 / 323 ≈ 1.49, le rapport de temps à nouveau. Ce temps de survie moyen, multiplié par un poids d’utilité et actualisé, est exactement l’entrée dont un modèle de coût-efficacité a besoin.
AvertissementL’extrapolation est un privilège, pas un repas gratuit
La courbe de survie au-delà de vos données est entièrement une hypothèse — c’est la forme de la distribution, pas une preuve. Un Weibull et une log-normale qui s’ajustent presque aussi bien aux données observées peuvent prédire des survies à 5 ans très différentes. Toujours (1) comparer les extrapolations à travers les distributions plausibles, (2) élargir l’horizon seulement aussi loin que la forme est cliniquement défendable, et (3) valider à l’aune de données externes (registres, études plus longues) lorsque c’est possible. Rapportez l’incertitude de la queue de distribution, ne la cachez pas.
Lorsqu’une distribution standard est trop rigide : les splines flexibles
Parfois, aucune des distributions nommées ne capture la forme du risque — il peut augmenter, plafonner, puis diminuer. Les modèles paramétriques flexibles (spline) de Royston-Parmar modélisent le log-risque-cumulé comme une spline cubique naturelle en log-temps, de sorte que le risque peut prendre presque n’importe quelle forme lisse tout en conservant la machinerie d’extrapolation et de prédiction. Ajustez-en un avec flexsurvspline(), en choisissant le nombre de nœuds internes k :
library(survival)library(flexsurv)fs.sp <-flexsurvspline(Surv(time, status) ~ sex + age + ph.ecog,data = lung, k =2, scale ="hazard")# Compare the spline's fit to the Weibull by AICfs.wb <-flexsurvreg(Surv(time, status) ~ sex + age + ph.ecog, data = lung, dist ="weibull")c(weibull_AIC =AIC(fs.wb), spline_AIC =AIC(fs.sp))
weibull_AIC spline_AIC
2274.877 2277.403
Ici l’AIC de la spline (≈ 2277) est légèrement supérieur à celui du Weibull (≈ 2275) : la flexibilité supplémentaire n’est pas nécessaire pour les données lung — le risque lisse et monotone croissant du Weibull s’ajuste déjà. C’est le bon résultat à observer : recourez à une spline lorsqu’une distribution nommée échoue visiblement à la superposition KM, pas par défaut. Quand vous en avez besoin, flexsurvspline() vous donne une forme de risque flexible sans renoncer à l’extrapolation — et plot(fs.sp) superpose sa courbe ajustée à la KM pour la même vérification visuelle.
Rapport
La survie a été modélisée avec un modèle à temps de défaillance accéléré (AFT) paramétrique sur les données de cancer du poumon NCCTG (n = 227, 164 décès). Quatre distributions ont été comparées par AIC ; le Weibull s’est le mieux ajusté (AIC = 2274.9, forme = 1.37, indiquant un risque qui augmente au fil du temps) et a suivi étroitement l’estimation de Kaplan-Meier. Le sexe féminin était associé à une survie plus longue (rapport de temps = 1.49, IC à 95 % 1.17–1.90 ; hazard ratio équivalent = 0.58, correspondant au modèle Cox), de même qu’un score de performance ECOG plus faible (rapport de temps = 0.71 par point d’aggravation, IC à 95 % 0.60–0.84) ; l’âge n’était pas significatif. Le modèle ajusté a estimé une survie à 2 ans de 21 % pour une femme type contre 7 % pour un homme (âge moyen, ECOG = 1).
NoteLes maths derrière l’AFT et la dualité du Weibull (optionnel)
Un modèle à temps de défaillance accéléré écrit le log du temps de survie comme une fonction linéaire des covariables plus un terme d’erreur :
\[
\log T = \mu + \gamma_1 x_1 + \dots + \gamma_p x_p + \sigma \, W
\]
où \(W\) est une distribution d’erreur standard (son choix — valeur extrême, normale, logistique — fixe la distribution de survie : Weibull, log-normale, log-logistique). Une covariable décale le log-temps de \(\gamma_j\), donc elle multiplie le temps par \(e^{\gamma_j}\) — le rapport de temps. C’est pourquoi un \(\gamma\) positif allonge la survie.
Le Weibull est la seule distribution qui soit à la fois AFT et à risques proportionnels. Son risque est \(h(t) = p\,\lambda\,t^{\,p-1}\) avec une forme \(p\) et une échelle \(\lambda\). Écrire l’effet de la covariable à travers \(\lambda\) donne un hazard ratio constant ; l’écrire à travers la chronologie donne un rapport de temps. Les deux paramétrisations sont liées par la forme :
Ainsi le coefficient AFT \(\gamma_j\) de survreg() et le coefficient PH de coxph() ne diffèrent que par le facteur \(-p\) — et sur les données lung, les deux donnent HR ≈ 0.58 pour le sexe. L’exponentielle est le cas particulier \(p = 1\) (risque constant) ; la log-normale et la log-logistique sont AFT mais non PH, elles ont donc un rapport de temps mais aucun hazard ratio unique.
Quel modèle quand ?
AstuceCox vs paramétrique — choisissez selon vos besoins
Un hazard ratio sans hypothèse distributionnelle, analyse d’efficacité primaire → Cox à risques proportionnels (semi-paramétrique, le choix par défaut).
Extrapolation au-delà du suivi, survie moyenne, entrées médico-économiques / de coût-efficacité → un modèle paramétrique (cette leçon) — Cox ne peut tout simplement pas extrapoler.
Une interprétation en rapport de temps (« le traitement prolonge la survie de 40 % »), ou PH est violé rendant le seul HR trompeur → un modèle AFT (Weibull / log-normal / log-logistique).
Aucune des formes nommées ne s’ajuste au risque → un modèle spline flexible (flexsurvspline).
Incertain sur la distribution → ajustez-en plusieurs, classez par AIC, et confirmez avec la superposition Kaplan-Meier.
Essayez en direct
Ajustez vous-même la famille paramétrique — changez la distribution, échangez les covariables, ou lisez la survie à un nouvel horizon temporel. Le bac à sable démarre au premier Run.
🟢 Avec un agent IA
Demandez à Prova« ajuste un modèle de survie paramétrique de Weibull sur mes données, donne-moi les rapports de temps et les hazard ratios équivalents, choisis la meilleure distribution par AIC, et extrapole la survie à 5 ans » — elle répond avec du code survival + flexsurv que vous pouvez exécuter sur vos propres données. The runtime is the judge.Demander à Prova →
Problèmes courants
Vous lisez le coefficient AFT comme un hazard ratio.survreg() travaille sur l’échelle du log-temps : un coefficient positif signifie une survie plus longue (un bon effet), et exp(coef) est un rapport de temps, pas un hazard ratio. C’est la convention de signe opposée à celle de coxph(). Si vous avez besoin d’un HR à partir d’un ajustement Weibull, convertissez-le explicitement — HR = exp(-coef * shape) avec shape = 1 / fit$scale — n’exponentiez pas le coefficient AFT et ne l’appelez pas un HR.
Vous avez choisi une distribution par AIC seul et l’extrapolation n’a aucun sens. L’AIC classe les candidats les uns par rapport aux autres sur les données observées ; il ne dit rien sur la queue non observée. Deux distributions avec un AIC quasi identique peuvent prédire des survies à 5 ans très différentes. Superposez toujours la courbe ajustée à la Kaplan-Meier et vérifiez la forme de la queue de distribution à l’aune des connaissances cliniques avant de faire confiance à une extrapolation.
Vous avez extrapolé bien au-delà des données et rapporté une estimation ponctuelle comme si elle était certaine. La courbe de survie au-delà du suivi est l’hypothèse de la distribution, pas une preuve — la bande de confiance s’élargit pour une raison. Comparez les extrapolations à travers les distributions plausibles, rapportez l’intervalle, et validez à l’aune de données externes lorsque c’est possible. Un unique chiffre de survie à 10 ans donné avec assurance à partir de 2 ans de données est un signal d’alerte.
Questions fréquentes
NoteAFT vs Cox / risques proportionnels — lequel utiliser ?
Utilisez Cox lorsque vous voulez un hazard ratio sans hypothèse distributionnelle et que vous n’avez pas besoin de prédire au-delà de vos données — c’est le choix par défaut pour l’analyse d’efficacité primaire. Utilisez un modèle paramétrique / AFT lorsque vous devez extrapoler la survie au-delà du suivi (médico-économie, coût-efficacité sur la durée de vie), voulez le temps de survie moyen ou n’importe quel quantile, préférez une interprétation en rapport de temps, ou que l’hypothèse de risques proportionnels est violée. De nombreuses analyses utilisent Cox pour l’estimation primaire et un modèle paramétrique pour l’extrapolation.
NoteComment obtenir un hazard ratio à partir d’un modèle Weibull ?
Le Weibull est à la fois AFT et à risques proportionnels, son coefficient AFT se convertit donc en hazard ratio avec le paramètre de formep : HR = exp(-coef * p), où coef est le coefficient survreg() et p = 1 / fit$scale. De façon équivalente HR = (time ratio)^(-p). Sur les données lung, cela donne HR ≈ 0.58 pour le sexe, correspondant au modèle Cox. Cette conversion ne fonctionne que pour le Weibull et l’exponentielle — la log-normale et la log-logistique sont AFT mais non PH, elles ont donc un rapport de temps mais aucun hazard ratio unique.
NoteQue signifie le rapport de temps dans un modèle AFT ?
Un rapport de temps est le facteur par lequel une covariable multiplie le temps de survie. Un rapport de temps de 1.49 pour le sexe féminin signifie que la chronologie de survie des femmes est étirée d’environ 49 % (survie plus longue) ; un rapport de temps inférieur à 1 signifie que la covariable accélère la défaillance (survie plus courte). C’est l’analogue AFT du hazard ratio : le hazard ratio multiplie le risque, le rapport de temps multiplie le temps.
NoteComment choisir entre Weibull, exponentielle, log-normale et log-logistique ?
Ajustez tous les candidats et classez-les par AIC (plus bas est meilleur) — puis confirmez le vainqueur en superposant sa courbe de survie ajustée à la courbe de Kaplan-Meier. L’exponentielle suppose un risque constant, elle perd donc généralement lorsque le risque change au fil du temps ; le Weibull (un risque croissant ou décroissant) est le choix par défaut courant. Un ΔAIC inférieur à 2 signifie que deux modèles sont indiscernables ; au-dessus de 10 signifie essentiellement aucun soutien. Ne faites jamais confiance à l’AIC seul pour une extrapolation — vérifiez la courbe et la plausibilité clinique de la queue de distribution.
NoteQu’est-ce que survreg vs flexsurv — quel package utiliser ?
survreg() (package survival) est le cheval de trait de base-R : il ajuste des modèles AFT sur l’échelle du log-temps et est partout, mais vous exponentiez les coefficients vous-même et il couvre moins de distributions. flexsurvreg() (package flexsurv) rapporte les paramètres sur leur échelle naturelle, donne directement les rapports de temps avec des intervalles de confiance, prédit la survie/le risque/la moyenne à n’importe quel temps, et ajoute des distributions plus flexsurvspline() pour des formes flexibles. Utilisez survreg() pour un ajustement rapide en base-survival ; utilisez flexsurv pour le travail paramétrique sérieux, la prédiction et l’extrapolation.
Testez vos connaissances
ImportantPratique
Exécutez-le. Dans la cellule live ci-dessous, ajustez un modèle paramétrique avec la distribution log-logistique au lieu du Weibull (remplissez le blanc), puis comparez son AIC à celui du Weibull. Quelle distribution l’AIC préfère-t-il sur ces données ?
Interprétez. Un modèle AFT rapporte un coefficient de traitement de 0.30 (survreg, Weibull, forme = 1.2). En clair, quel est le rapport de temps et — en convertissant — le hazard ratio équivalent ?
NoteIndice
Remplissez le blanc avec "loglogistic". Comparez les deux valeurs d’AIC — la plus basse est le meilleur ajustement. Rappelez-vous du tableau d’AIC que le Weibull avait l’AIC le plus bas des quatre candidats, avec la log-logistique quelques points derrière.
NoteSolution
fit.ll <-survreg(Surv(time, status) ~ sex + age + ph.ecog, data = lung, dist ="loglogistic")fit.wb <-survreg(Surv(time, status) ~ sex + age + ph.ecog, data = lung, dist ="weibull")c(loglogistic_AIC =AIC(fit.ll), weibull_AIC =AIC(fit.wb))#> loglogistic_AIC ~ 2285, weibull_AIC ~ 2275 — the WEIBULL is preferred (lower AIC, ΔAIC ~ 10).
Pour la question 2 : le rapport de temps est exp(0.30) ≈ 1.35 — le traitement multiplie le temps de survie par environ 1.35 (35 % de survie en plus). En convertissant en hazard ratio avec la forme : HR = exp(-0.30 * 1.2) ≈ 0.70 — un risque de l’événement 30 % plus faible. Les deux décrivent le même effet bénéfique du traitement, l’un comme un temps plus long, l’autre comme un risque plus faible.
AstuceVérification rapide
Un modèle de survie paramétrique rapporte un rapport de temps de 0.65 pour une covariable. Qu’est-ce que cela signifie pour la survie ?
NoteAfficher la réponse
Survie plus courte — une covariable néfaste. Un rapport de temps inférieur à 1 signifie que la covariable multiplie le temps de survie par moins de 1 (ici par 0.65), donc elle comprime la chronologie de survie — elle accélère la défaillance. Le hazard ratio équivalent serait supérieur à 1 (risque plus élevé). Un rapport de temps supérieur à 1 signifierait une survie plus longue (un facteur protecteur).
Conclusion
Vous savez désormais ajuster et interpréter les modèles de survie paramétriques en R. Ajustez la famille AFT avec survreg() ou flexsurv::flexsurvreg(), lisez l’effet de la covariable comme un rapport de temps (attention à la convention de signe du log-temps), choisissez une distribution par AIC et la superposition Kaplan-Meier, et — parce que le Weibull est à la fois AFT et PH — convertissez son rapport de temps en hazard ratio qui correspond au modèle Cox. La récompense que Cox ne peut pas offrir est l’extrapolation : des courbes de survie lisses, la survie moyenne et la survie à n’importe quel horizon, les entrées dont un modèle médico-économique vit. Lorsqu’aucune distribution nommée ne s’ajuste à la forme du risque, un modèle flexible flexsurvspline() s’en charge. La seule discipline à conserver : une extrapolation est une hypothèse, donc vérifiez toujours l’ajustement, comparez les distributions, et rapportez l’incertitude dans la queue de distribution.
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 = {Modèles de survie paramétriques en R : Weibull, AFT et
extrapolation},
date = {2026-06-26},
url = {https://www.datanovia.com/learn/biostatistics/survival-analysis/parametric-survival-models},
langid = {fr}
}