Tests log-rank pondérés en R : Fleming-Harrington

Quand les courbes de survie se croisent ou que l’effet du traitement est retardé, le test log-rank standard perd en puissance — pondérez les événements précoces ou tardifs avec survdiff(rho=) et survMisc::comp()

Exécutez des tests log-rank pondérés en R lorsque les risques proportionnels font défaut. Utilisez survdiff(rho = 1) pour le test de Peto-Peto à emphase précoce et survMisc::comp() pour la famille Fleming-Harrington FH(p, q), comparez les p-values au test log-rank standard sur les données pulmonaires NCCTG, et apprenez quel poids préspécifier pour les effets retardés, précoces ou qui se croisent — sans pêcher.

Date de publication

25 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Le test log-rank standard pondère tous les temps d’événement de façon égale et est le plus puissant sous risques proportionnels. Quand l’effet du traitement est retardé, précoce puis s’estompe, ou que les courbes se croisent, cette pondération égale dilue le signal — un test log-rank pondéré est plus puissant.
  • Un test pondéré multiplie la contribution observés-moins-attendus de chaque temps par un poids. Poussez le poids vers les temps d’événement précoces ou tardifs, selon l’endroit où vit la différence.
  • La voie rapide est le survdiff(..., rho = 1) de base — le test de Peto-Peto, qui met l’accent sur les différences précoces ; rho = 0 est le test standard. La famille complète est Fleming-Harrington FH(p, q) via survMisc::comp()FH(1, 0) précoce, FH(0, 1) tardif.
  • Sur les données pulmonaires, la différence selon le sexe est concentrée tôt : standard χ² = 10.3, p = 0.0013 ; à emphase précoce FH(1, 0) χ² = 12.7, p = 0.0004 (plus fort) ; à emphase tardive FH(0, 1) χ² = 3.5, p = 0.063 (la manque de peu).
  • Préspécifiez le poids à partir de la biologie — ne pêchez jamais. Essayer tous les poids et rapporter le plus petit p gonfle l’erreur de type I. Choisissez un test avant de regarder les données ; les autres sont des analyses de sensibilité. Lisez toujours d’abord la vérification des risques proportionnels.

Introduction

Le test log-rank est l’outil par défaut pour comparer la survie entre groupes, et pour une bonne raison — mais il a un angle mort. Il donne un poids égal à tous les temps d’événement, ce qui en fait le test le plus puissant uniquement quand le hazard ratio est à peu près constant sur le suivi (risques proportionnels). Les essais modernes brisent régulièrement cette hypothèse :

  • Effet retardé — l’immunothérapie et les vaccins anticancéreux ne montrent souvent aucune séparation pendant des mois, puis un bénéfice croissant. La non-différence précoce tire le test standard vers « aucun effet ».
  • Effet précoce qui s’estompe — un médicament cytotoxique sépare vite les courbes, puis la résistance érode l’écart.
  • Courbes qui se croisent — une thérapie agressive avec une toxicité précoce mais un bénéfice à long terme : les différences précoces et tardives pointent dans des directions opposées et s’annulent dans le test standard.

Dans ces trois cas, le test log-rank standard perd en puissance et peut manquer une différence réelle. Un test log-rank pondéré corrige cela en mettant l’accent sur la partie du suivi où vit réellement la différence. Cette leçon les exécute en R — le test rapide de Peto-Peto avec le survdiff(..., rho = ) de base, puis la famille complète Fleming-Harrington FH(p, q) avec survMisc — sur les données du cancer du poumon NCCTG, en comparant chaque résultat au test standard.

ImportantC’est le remède aux risques non proportionnels — vérifiez d’abord

Un test log-rank pondéré est la réponse à un problème spécifique : les risques non proportionnels. Avant d’y recourir, confirmez que le problème existe — inspectez les courbes de Kaplan-Meier et exécutez la vérification formelle dans Tester l’hypothèse des risques proportionnels (cox.zph()). Si les risques sont proportionnels, le test log-rank standard est le choix le plus puissant et un test pondéré ne fait que vous coûter de la puissance.

L’idée du poids : emphase précoce contre tardive

La statistique du log-rank accumule, sur chaque temps d’événement \(t_i\), l’écart entre les événements observés dans un groupe et les événements attendus sous H₀. Un test pondéré multiplie chaque écart par un poids \(w(t_i)\) avant la somme :

  • Tous les poids égaux (\(w = 1\)) → le test log-rank standard. Chaque temps d’événement compte autant.
  • Poids élevés tôt, faibles tard → un test à emphase précoce. Une différence dans les premiers mois domine ; une différence tardive s’enregistre à peine.
  • Poids faibles tôt, élevés tard → un test à emphase tardive. Le bon choix pour un effet retardé (immunothérapie), où les courbes ne se séparent qu’après la période précoce.

La famille Fleming-Harrington paramètre le poids avec deux nombres, p et q, appliqués à l’estimation de survie de Kaplan-Meier groupée \(\hat S(t)\) :

\[ w(t_i) = \hat S(t_i)^{\,p} \cdot \left[1 - \hat S(t_i)\right]^{\,q} \]

Tôt dans le suivi, \(\hat S(t)\) est proche de 1, donc \(\hat S(t)^p\) est grand et \([1-\hat S(t)]^q\) est petit ; tard dans le suivi, l’inverse tient. Cela donne un cadran net :

  • FH(0, 0)\(w = 1\) : le test log-rank standard.
  • FH(1, 0)\(w = \hat S(t)\) : emphase précoce (poids élevé tant que la survie est élevée).
  • FH(0, 1)\(w = 1 - \hat S(t)\) : emphase tardive (le poids croît à mesure que les patients meurent — pour les effets retardés).
  • FH(1, 1) → poids maximal au milieu du suivi.
NoteUn piège de nommage qui mérite d’être connu

La fonction survdiff() de base prend un paramètre unique, rho, qui n’est pas le p de Fleming-Harrington. survdiff(rho = 0) est le test standard ; survdiff(rho = 1) est le test de Peto-Peto, qui pondère par \(\hat S(t)\) — emphase précoce (équivalent au Fleming-Harrington FH(1, 0)). Pour la famille complète à deux paramètres — y compris l’emphase tardive — utilisez survMisc::comp(), qui prend p et q directement.

Les données : l’étude sur le cancer du poumon NCCTG

Nous utilisons lung, le jeu de données du North Central Cancer Treatment Group du package survival : la survie de 228 patients atteints d’un cancer du poumon avancé. Avec survival attaché, lung est disponible directement — aucun appel à data() n’est nécessaire. Nous comparons la survie selon le sex (1 = homme, 2 = femme) :

library(survival)

head(lung[, c("time", "status", "sex")])
  time status sex
1  306      2   1
2  455      2   1
3 1010      1   1
4  210      2   1
5  883      2   1
6 1022      1   1
  • time — temps de survie en jours.
  • status — 1 = censuré, 2 = décédé (l’événement).
  • sex — 1 = homme, 2 = femme (la variable de groupe).

Regardez les courbes avant de tester quoi que ce soit. Le graphique principal ci-dessous marque la portion précoce du suivi — la période qu’un test à emphase précoce met en valeur :

library(survival)
library(survminer)

fit <- survfit(Surv(time, status) ~ sex, data = lung)

ggsurvplot(
  fit,
  data = lung,
  conf.int = TRUE,
  palette = "jco",                       # colourblind-safe journal palette
  legend.labs = c("Male", "Female"),
  legend.title = "Sex",
  xlab = "Time (days)",
  ylab = "Survival probability",
  ggtheme = theme_minimal()
)$plot +
  ggplot2::annotate(
    "rect", xmin = 0, xmax = 300, ymin = 0, ymax = 1,
    alpha = 0.08, fill = "#3a86d4"
  ) +
  ggplot2::annotate(
    "text", x = 150, y = 0.05, label = "early emphasis",
    size = 3, colour = "#3a86d4"
  )

A Kaplan-Meier plot comparing survival of male and female lung-cancer patients. The female curve separates from the male curve early — within the first roughly 300 days — and stays above it. A shaded band marks that early period, where an early-weighted Fleming-Harrington test concentrates its weight.

Les courbes se séparent tôt — la courbe féminine passe au-dessus de la courbe masculine dès les premières centaines de jours — et l’écart est le plus large tant que la plupart des patients sont encore à risque. Cette forme prédit ce que nous sommes sur le point de voir : un test à emphase précoce sera le plus puissant ici, et un test à emphase tardive sera le plus faible.

La voie rapide : survdiff(rho = ) (Peto-Peto)

Le survdiff() de base vous donne gratuitement un test pondéré à un paramètre. rho = 0 est le test log-rank standard ; rho = 1 est le test de Peto-Peto, qui pondère par \(\hat S(t)\) — emphase précoce. Exécutez les deux et comparez :

library(survival)

# rho = 0: the standard log-rank test (equal weights)
survdiff(Surv(time, status) ~ sex, data = lung, rho = 0)
Call:
survdiff(formula = Surv(time, status) ~ sex, data = lung, rho = 0)

        N Observed Expected (O-E)^2/E (O-E)^2/V
sex=1 138      112     91.6      4.55      10.3
sex=2  90       53     73.4      5.68      10.3

 Chisq= 10.3  on 1 degrees of freedom, p= 0.001 
library(survival)

# rho = 1: the Peto-Peto test — early-weighted
survdiff(Surv(time, status) ~ sex, data = lung, rho = 1)
Call:
survdiff(formula = Surv(time, status) ~ sex, data = lung, rho = 1)

        N Observed Expected (O-E)^2/E (O-E)^2/V
sex=1 138     70.4     55.6      3.95      12.7
sex=2  90     28.7     43.5      5.04      12.7

 Chisq= 12.7  on 1 degrees of freedom, p= 4e-04 

Lisez les deux côte à côte :

  • Standard (rho = 0) : χ² = 10.3 sur 1 df, p = 0.0013. La survie diffère significativement entre les sexes — le résultat que vous rapporteriez sous risques proportionnels.
  • Peto-Peto (rho = 1) : χ² = 12.7 sur 1 df, p = 0.0004. Le test à emphase précoce est plus significatif (un χ² plus grand, un p plus petit). C’est la signature d’une différence précoce : mettre plus de poids sur les premiers temps d’événement — où les courbes sont les plus éloignées et où le plus de patients sont à risque — aiguise le signal.

Remarquez que les comptages Observed et Expected dans le tableau rho = 1 sont fractionnaires et plus petits que dans le tableau standard : ce sont des comptages d’événements pondérés, pas des décès bruts. C’est attendu — seuls le χ² et la p-value sont comparables entre les deux tests.

La famille complète : Fleming-Harrington FH(p, q) avec survMisc

survdiff() ne règle que l’emphase précoce. Pour la famille complète à deux paramètres — y compris l’emphase tardive pour les effets retardés — utilisez survMisc::comp(). Elle prend un objet ten (construit à partir d’un ajustement survfit()) et des vecteurs de valeurs p et q, puis exécute d’un coup chaque poids Fleming-Harrington :

library(survival)
library(survMisc)

fit <- survfit(Surv(time, status) ~ sex, data = lung)

# FH(1,0) early-weighted and FH(0,1) late-weighted, alongside the standard FH(0,0)
fh <- comp(ten(fit), p = c(1, 0), q = c(0, 1))
                     Q         Var       Z pNorm
1             -20.4183     40.4280 -3.2113     6
n           -3148.0000 795286.3234 -3.5300     4
sqrtN        -248.2336   4952.6740 -3.5273     5
S1            -14.6872     16.9922 -3.5630     3
S2            -14.5848     16.7542 -3.5632     2
FH_p=1_q=0    -14.8065     17.2608 -3.5639     1
FH_p=0_q=1     -5.6118      9.1175 -1.8585     7
              maxAbsZ        Var      Q pSupBr
1          2.2095e+01 4.0428e+01 3.4750      6
n          3.1750e+03 7.9529e+05 3.5603      5
sqrtN      2.5507e+02 4.9527e+03 3.6244      1
S1         1.4917e+01 1.6992e+01 3.6188      3
S2         1.4802e+01 1.6754e+01 3.6163      4
FH_p=1_q=0 1.5039e+01 1.7261e+01 3.6198      2
FH_p=0_q=1 7.0563e+00 9.1175e+00 2.3369      7

comp() imprime un tableau compact de plusieurs familles de poids ; la colonne pNorm de l’impression est un rang (1 = le plus significatif), pas la p-value — les statistiques réelles vivent dans l’objet ajusté. Extrayez les trois qui nous intéressent dans un résumé propre :

library(survival)
library(survMisc)

fit <- survfit(Surv(time, status) ~ sex, data = lung)

t1 <- ten(fit)
invisible(comp(t1, p = c(1, 0), q = c(0, 1)))   # run the tests, suppress the table
                     Q         Var       Z pNorm
1             -20.4183     40.4280 -3.2113     6
n           -3148.0000 795286.3234 -3.5300     4
sqrtN        -248.2336   4952.6740 -3.5273     5
S1            -14.6872     16.9922 -3.5630     3
S2            -14.5848     16.7542 -3.5632     2
FH_p=1_q=0    -14.8065     17.2608 -3.5639     1
FH_p=0_q=1     -5.6118      9.1175 -1.8585     7
              maxAbsZ        Var      Q pSupBr
1          2.2095e+01 4.0428e+01 3.4750      6
n          3.1750e+03 7.9529e+05 3.5603      5
sqrtN      2.5507e+02 4.9527e+03 3.6244      1
S1         1.4917e+01 1.6992e+01 3.6188      3
S2         1.4802e+01 1.6754e+01 3.6163      4
FH_p=1_q=0 1.5039e+01 1.7261e+01 3.6198      2
FH_p=0_q=1 7.0563e+00 9.1175e+00 2.3369      7
lrt <- attr(t1, "lrt")                          # the log-rank-test results table
idx <- match(c("1", "FH_p=1_q=0", "FH_p=0_q=1"), as.character(lrt$W))

data.frame(
  Test    = c("FH(0,0) standard", "FH(1,0) early emphasis", "FH(0,1) late emphasis"),
  ChiSq   = round(lrt$chiSq[idx], 2),
  p_value = signif(lrt$pChisq[idx], 3)
)
                    Test ChiSq  p_value
1       FH(0,0) standard 10.31 0.001320
2 FH(1,0) early emphasis 12.70 0.000365
3  FH(0,1) late emphasis  3.45 0.063100

Lisez la famille en langage clair :

  • FH(0, 0) standard — χ² = 10.3, p = 0.0013. La référence à poids égal (elle correspond à survdiff(rho = 0)).
  • FH(1, 0) emphase précoce — χ² = 12.7, p = 0.0004. Le test le plus puissant ici, correspondant au résultat de Peto-Peto — parce que la différence selon le sexe est précoce.
  • FH(0, 1) emphase tardive — χ² = 3.5, p = 0.063. Le test le plus faible : il pondère les temps d’événement tardifs, où les courbes ont presque convergé et où peu de patients restent — il manque donc presque une différence qui est réellement présente.

Cette dernière ligne, c’est toute la leçon en un seul nombre. Un test à emphase tardive appliqué à un effet précoce (ou vice versa) peut transformer un résultat clairement significatif en un résultat non significatif. Le poids doit correspondre à l’endroit où se trouve la différence — et vous devez décider quel poids avant de voir les données.

Quand utiliser quel poids

AstuceFaites correspondre le poids à l’effet attendu — préspécifié
  • Risques proportionnels (les courbes restent à peu près parallèles, ne se croisent pas) → le test log-rank standard, FH(0, 0) / survdiff(rho = 0). Un test pondéré ne fait que coûter de la puissance ici.
  • Effet retardé (pas de séparation précoce, puis un bénéfice croissant — immunothérapie, vaccins) → emphase tardive, FH(0, 1) via comp(..., p = 0, q = 1).
  • Effet précoce qui s’estompe (séparation rapide, puis convergence) → emphase précoce, FH(1, 0) / survdiff(rho = 1) (Peto-Peto).
  • Courbes qui se croisent → un test pondéré dans l’une ou l’autre direction bat le test standard (qui annule les différences opposées), mais énoncez d’abord la question clinique ; envisagez la durée de survie moyenne restreinte comme résumé complémentaire qui ne dépend pas d’un choix de poids.
ImportantNe pêchez pas à travers les poids — préspécifiez

Chaque poids que vous essayez est un test de plus. Exécuter FH(0,0), FH(1,0), FH(0,1), FH(1,1), … et rapporter la plus petite p-value gonfle le taux d’erreur de type I bien au-dessus de 5 % — vous « trouverez » des effets significatifs dans du bruit pur. La correction est procédurale, pas statistique :

  • Choisissez un poids avant la levée de l’aveugle, justifié par la biologie (le timing attendu du mécanisme) ou par des données antérieures — et rapportez ce test comme primaire.
  • Traitez les autres poids comme des analyses de sensibilité préspécifiées, pas comme des résultats primaires concurrents.
  • Si vous ne pouvez vraiment pas prédire le motif, un test de combinaison (par exemple MaxCombo, qui prend le maximum sur un petit ensemble préspécifié de poids avec un ajustement de multiplicité approprié) contrôle l’erreur — c’est un choix de conception délibéré, pas une recherche de poids post-hoc.

La seule chose que vous ne devez jamais faire est de balayer tous les poids et rapporter le meilleur.

Rapport

La survie a été comparée entre les patients hommes et femmes sur les données du cancer du poumon NCCTG (n = 228, 165 décès). Parce que les courbes de Kaplan-Meier se séparaient tôt dans le suivi, un test Fleming-Harrington à emphase précoce préspécifié, FH(1, 0) (Peto-Peto, survdiff rho = 1), a été la comparaison primaire : la survie différait significativement entre les sexes (χ²(1) = 12.7, p = 0.0004). Le test log-rank standard concordait (χ²(1) = 10.3, p = 0.0013) ; un test à emphase tardive FH(0, 1) était plus faible (χ²(1) = 3.5, p = 0.063), cohérent avec une différence précoce. Les femmes ont survécu plus longtemps (médiane 426 contre 270 jours).

À chaque temps d’événement distinct \(t_i\), avec \(d_i\) événements parmi \(n_i\) patients à risque, soit \(O_{1i}\) et \(E_{1i}\) les événements observés et attendus dans le groupe 1, et \(V_i\) la variance — exactement les ingrédients du log-rank. La statistique pondérée attache un poids \(w_i\) à chaque terme :

\[ Z_w = \frac{\sum_i w_i \,(O_{1i} - E_{1i})}{\sqrt{\sum_i w_i^2 \, V_i}} \]

et \(Z_w^2\) suit une distribution de khi-deux à 1 degré de liberté. Mettre tous les \(w_i = 1\) retrouve le test log-rank standard. Le poids de Fleming-Harrington est \(w_i = \hat S(t_i)^{\,p}\,[1 - \hat S(t_i)]^{\,q}\), où \(\hat S\) est l’estimation de Kaplan-Meier groupée juste avant \(t_i\) : avec \(p > 0\) le poids est grand tant que la survie est élevée (précoce), et avec \(q > 0\) il croît à mesure que la survie baisse (tardif). Parce que le poids est fixé par \((p, q)\) avant de voir l’appartenance au groupe, un choix préspécifié est un test valide ; choisir \((p, q)\) pour minimiser la \(p\)-value observée ne l’est pas.

Essayez en direct

Exécutez vous-même les tests pondérés — changez la variable de groupe, ou réglez les poids FH(p, q). Le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova « mes courbes de survie se séparent tard — choisissez et exécutez en R un test log-rank pondéré qui met l’accent sur les différences tardives, comparez-le au test log-rank standard, et dites-moi lequel préspécifier » — elle répond avec du code survival + survMisc que vous pouvez exécuter sur vos propres données. The runtime is the judge. Demandez à Prova →

Problèmes courants

Vous avez exécuté tous les poids et rapporté la plus petite p-value. Cela gonfle le taux d’erreur de type I bien au-dessus de 5 % — le mauvais usage le plus courant des tests pondérés. Préspécifiez un poids à partir de la biologie avant la levée de l’aveugle et traitez les autres comme des analyses de sensibilité ; si le motif est vraiment inconnu, utilisez un test de combinaison à multiplicité contrôlée (MaxCombo), pas une recherche de poids.

Vos courbes se croisent et même le test pondéré semble faible. Un poids unique met l’accent sur une direction de différence ; quand les courbes se croisent, les différences précoces et tardives s’opposent et tout test à poids unique peut encore peiner. Énoncez la question clinique (est-ce la survie précoce ou tardive qui importe ?) et envisagez la durée de survie moyenne restreinte comme résumé complémentaire sans poids.

Les comptages Observed/Expected dans survdiff(rho = 1) semblent faux (fractionnaires, trop petits). Ce sont des comptages d’événements pondérés, pas des décès bruts — seuls la statistique χ² et la p-value sont comparables au test standard. N’essayez pas de réconcilier les comptages pondérés avec le nombre réel de décès.

Questions fréquentes

Utilisez un test log-rank pondéré quand l’hypothèse des risques proportionnels échoue — les courbes de survie se croisent, l’effet du traitement est retardé (immunothérapie), ou il est précoce puis s’estompe. Dans ces cas, le test log-rank standard donne un poids égal à chaque temps et perd en puissance. Si les risques sont proportionnels (les courbes restent à peu près parallèles et ne se croisent pas), le test log-rank standard est le choix le plus puissant et un test pondéré ne fait que vous coûter de la puissance — alors vérifiez les courbes et exécutez cox.zph() d’abord.

survdiff() expose un paramètre unique, rho. rho = 0 est le test log-rank standard ; rho = 1 est le test de Peto-Peto, qui pondère par l’estimation de survie \(\hat S(t)\) — emphase précoce (équivalent au Fleming-Harrington FH(1, 0)). La famille Fleming-Harrington a deux paramètres, p et q, avec le poids \(\hat S(t)^p [1 - \hat S(t)]^q\)p pilote l’emphase précoce, q pilote l’emphase tardive. Pour l’emphase tardive (un effet retardé) il vous faut survMisc::comp(..., p = 0, q = 1) ; survdiff() seul ne peut pas le faire.

Un poids à emphase tardive — Fleming-Harrington FH(0, 1) (comp(ten(fit), p = 0, q = 1)). Les effets retardés ne montrent aucune séparation précoce, puis un bénéfice croissant, donc la différence vit dans les temps d’événement plus tardifs ; les pondérer à la hausse retrouve la puissance que le test standard perd. Préspécifiez ce poids à partir du mécanisme avant la levée de l’aveugle, et rapportez le test log-rank standard comme analyse de sensibilité.

Non. Chaque poids est un test distinct, donc balayer plusieurs et rapporter la plus petite p-value gonfle le taux d’erreur de type I — vous trouverez des effets « significatifs » dans le bruit. Préspécifiez un poids (à partir de la biologie ou de données antérieures) comme primaire et traitez les autres comme des analyses de sensibilité. Si vous ne pouvez vraiment pas prédire le timing de l’effet, utilisez un test de combinaison MaxCombo, qui prend le maximum sur un petit ensemble préspécifié de poids avec un ajustement de multiplicité approprié.

Le test log-rank standard correspond à un modèle de Cox avec un hazard ratio constant. Quand les risques sont non proportionnels, ni un hazard ratio unique ni le test log-rank standard ne résument bien l’effet. Un test log-rank pondéré donne une p-value plus puissante pour « les courbes diffèrent-elles ? », mais toujours aucune taille d’effet. Pour décrire un effet variant dans le temps, ajustez un modèle de Cox avec des coefficients variant dans le temps ou rapportez la durée de survie moyenne restreinte ; voir Tester l’hypothèse des risques proportionnels pour diagnostiquer la violation en premier lieu.

Testez vos connaissances

  1. Exécutez-le. Dans la cellule live ci-dessous, les courbes sont comparées par score de performance ECOG (ph.ecog). Remplissez le blanc pour exécuter un test de Peto-Peto à emphase précoce, et comparez sa p-value au test log-rank standard. La pondération précoce renforce-t-elle ou affaiblit-elle les preuves ?
  2. Choisissez un poids. Un essai d’immunothérapie de phase III montre une survie identique pendant les 6 premiers mois, puis la courbe du traitement passe clairement au-dessus du contrôle. Quel poids Fleming-Harrington devrait être le test primaire préspécifié, et pourquoi ?

Pour un test à emphase précoce (Peto-Peto), réglez rho = 1rho = 0 est le test standard. Comparez les lignes Chisq et p des deux appels survdiff(). Pour la question 2, un effet retardé vit dans les temps d’événement tardifs, donc il vous faut une emphase tardive.

survdiff(Surv(time, status) ~ ph.ecog, data = lung, rho = 1)
#> An early-weighted (Peto-Peto) test of survival across ECOG groups.
#> Compare its Chisq / p to the rho = 0 standard test: because worse
#> performance scores separate early, the early weighting strengthens
#> the evidence (a larger Chisq, a smaller p) here.

Pour la question 2 : l’effet est retardé — aucune différence précoce, puis un bénéfice tardif — donc la différence vit dans les temps d’événement tardifs. Préspécifiez un test à emphase tardive, Fleming-Harrington FH(0, 1) (comp(ten(fit), p = 0, q = 1)), justifié par le mécanisme de l’immunothérapie. Un test log-rank standard serait dilué par la non-différence précoce, et un test à emphase précoce pointerait exactement dans le mauvais sens.

AstuceVérification rapide

Vous attendez un bénéfice de traitement retardé (les courbes ne se séparent qu’après plusieurs mois). Vous exécutez survdiff(Surv(time, status) ~ arm, data = trial, rho = 1) comme test primaire. Est-ce le bon choix ?

Non. rho = 1 est le test de Peto-Peto / à emphase précoce — il pondère les temps d’événement précoces, exactement là où un effet retardé ne montre aucune différence, donc il perdrait de la puissance. Pour un effet retardé il vous faut un test à emphase tardive, Fleming-Harrington FH(0, 1) via survMisc::comp(ten(fit), p = 0, q = 1). La direction de rho est l’opposé de ce que le nom pourrait suggérer — rho = 1 met l’accent sur le précoce, pas le tardif.

Conclusion

Quand les risques proportionnels font défaut — effets retardés, effets précoces puis s’estompant, courbes qui se croisent — le test log-rank standard perd en puissance parce qu’il pondère chaque temps d’événement de façon égale. Un test log-rank pondéré restaure cette puissance en mettant l’accent sur la partie du suivi où vit la différence : survdiff(..., rho = 1) pour un test rapide à emphase précoce (Peto-Peto), et survMisc::comp() pour la famille complète Fleming-Harrington FH(p, q)FH(1, 0) précoce, FH(0, 1) tardif. Sur les données pulmonaires, la différence selon le sexe était précoce, donc le test à emphase précoce était le plus fort (χ² = 12.7, p = 0.0004) et le test à emphase tardive l’a presque manqué (p = 0.063) — un rappel que le poids doit correspondre à l’effet, et que vous devez le préspécifier plutôt que de pêcher à travers les poids. Diagnostiquez d’abord la non-proportionnalité avec la vérification des risques proportionnels ; choisissez un poids à partir de la biologie ; rapportez les autres comme analyses de sensibilité.

Leçons connexes

Cette page vous a-t-elle été utile ?

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.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN
Note

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.

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Tests log-rank pondérés en R : Fleming-Harrington},
  date = {2026-06-25},
  url = {https://www.datanovia.com/learn/biostatistics/survival-analysis/weighted-log-rank},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Tests log-rank pondérés en R : Fleming-Harrington.” 2026. June 25. https://www.datanovia.com/learn/biostatistics/survival-analysis/weighted-log-rank.