Bases de l’analyse de survie – Guides faciles – Wiki

Installer et charger le package R requis

Nous utiliserons deux packages R:

install.packages(c("survival", "survminer"))
library("survival")
library("survminer")

Exemples d’ensembles de données

Nous utiliserons les données sur le cancer du poumon disponibles dans le kit de survie.

data("lung")
head(lung)
  inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
1    3  306      2  74   1       1       90       100     1175      NA
2    3  455      2  68   1       0       90        90     1225      15
3    3 1010      1  56   1       0       90        90       NA      15
4    5  210      2  57   1       1       90        60     1150      11
5    1  883      2  60   1       0      100        90       NA       0
6   12 1022      1  74   1       1       50        80      513       0
  • inst: code de l’établissement
  • time: temps de survie en jours
  • état: état de censure 1 = censuré, 2 = mort
  • âge: âge en années
  • sexe: Homme = 1 Femme = 2
  • ph.ecog: score de performance ECOG (0 = bon 5 = mort)
  • ph.karno: score de performance de Karnofsky (mauvais = 0-bon = 100) évalué par le médecin
  • pat.karno: score de performance de Karnofsky tel qu’évalué par le patient
  • repas.cal: Calories consommées aux repas
  • wt.loss: Perte de poids au cours des six derniers mois

Calculer les courbes de survie: survfit ()

Nous voulons calculer la probabilité de survie par sexe.

La fonction survivre()[dans[in[dans[insurvie paquet]peut être utilisé pour calculer l’estimation de survie de kaplan-Meier. Ses principaux arguments sont:

  • un objet de survie créé à l’aide de la fonction Surv()
  • et l’ensemble de données contenant les variables.

Pour calculer les courbes de survie, tapez ceci:

fit 
Call: survfit(formula = Surv(time, status) ~ sex, data = lung)
        n events median 0.95LCL 0.95UCL
sex=1 138    112    270     212     310
sex=2  90     53    426     348     550

Par défaut, la fonction print () affiche un bref résumé des courbes de survie. Il imprime le nombre d’observations, le nombre d’événements, la survie médiane et les limites de confiance pour la médiane.

Si vous souhaitez afficher un résumé plus complet des courbes de survie, tapez ceci:

# Summary of survival curves
summary(fit)
# Access to the sort summary table
summary(fit)$table

Accès à la valeur retournée par survfit ()

La fonction survivre() renvoie une liste de variables, y compris les composants suivants:

  • n: nombre total de sujets dans chaque courbe.
  • time: les points temporels sur la courbe.
  • n. risque: le nombre de sujets à risque au temps t
  • n.event: le nombre d’événements survenus au temps t.
  • n.censor: le nombre de sujets censurés, qui sortent de l’ensemble de risques, sans événement, au temps t.
  • inférieure, supérieure: limites de confiance inférieure et supérieure de la courbe, respectivement.
  • strates: indique la stratification de l’estimation de la courbe. Si strata n’est pas NULL, il y a plusieurs courbes dans le résultat. Les niveaux de strates (un facteur) sont les étiquettes des courbes.

Les composants sont accessibles comme suit:

d 
  time n.risk n.event n.censor      surv     upper     lower
1   11    138       3        0 0.9782609 1.0000000 0.9542301
2   12    135       1        0 0.9710145 0.9994124 0.9434235
3   13    134       2        0 0.9565217 0.9911586 0.9230952
4   15    132       1        0 0.9492754 0.9866017 0.9133612
5   26    131       1        0 0.9420290 0.9818365 0.9038355
6   30    130       1        0 0.9347826 0.9768989 0.8944820

Visualisez les courbes de survie

Nous utiliserons la fonction ggsurvplot()[dans[in[dans[inSurvminer Paquet R]pour produire les courbes de survie pour les deux groupes de sujets.

Il est également possible d’afficher:

  • les 95% limites de confiance de la fonction survivante en utilisant l’argument conf.int = VRAI.
  • le nombre et / ou le pourcentage de personnes à risque par heure en utilisant l’option risque.table. Valeurs autorisées pour risque.table comprendre:
    • TRUE ou FALSE spécifiant s’il faut afficher ou non la table des risques. La valeur par défaut est FALSE.
    • «Absolu» ou «pourcentage»: pour afficher le nombre absolu et le pourcentage des sujets à risque en fonction du temps, respectivement. Utilisez «abs_pct» pour afficher à la fois le nombre absolu et le pourcentage.
  • les valeur p du test Log-Rank comparant les groupes en utilisant pval = VRAI.
  • ligne horizontale / verticale à survie médiane en utilisant l’argument surv.median.line. Les valeurs autorisées incluent l’une des valeurs c («aucun», «hv», «h», «v»). v: vertical, h: horizontal.
# Change color, linetype by strata, risk.table color by strata
ggsurvplot(fit,
          pval = TRUE, conf.int = TRUE,
          risk.table = TRUE, # Add risk table
          risk.table.col = "strata", # Change risk table color by groups
          linetype = "strata", # Change line type by groups
          surv.median.line = "hv", # Specify median survival
          ggtheme = theme_bw(), # Change ggplot2 theme
          palette = c("#E7B800", "#2E9FDF"))
Analyse de survie

Analyse de survie

Le tracé peut être personnalisé davantage à l’aide des arguments suivants:

  • conf.int.style = « étape » pour changer le style des bandes d’intervalle de confiance.
  • xlab pour changer l’étiquette de l’axe x.
  • break.time.by = 200 casser l’axe des x dans les intervalles de temps de 200.
  • risk.table = « abs_pct »pour montrer à la fois le nombre absolu et le pourcentage d’individus à risque.
  • risk.table.y.text.col = VRAI et risk.table.y.text = FAUX pour fournir des barres au lieu de noms dans les annotations de texte de la légende du tableau des risques.
  • ncensor.plot = VRAI pour tracer le nombre de sujets censurés au temps t. Comme suggéré par Marcin Kosinski, c’est un bon retour d’information supplémentaire aux courbes de survie, afin que l’on puisse se rendre compte: à quoi ressemblent les courbes de survie, quel est le nombre d’ensemble de risques ET quelle est la cause de la diminution de l’ensemble de risques: est-ce causée par des événements ou par des événements censurés?
  • legend.labs pour changer les étiquettes de légende.
ggsurvplot(
   fit,                     # survfit object with calculated statistics.
   pval = TRUE,             # show p-value of log-rank test.
   conf.int = TRUE,         # show confidence intervals for 
                            # point estimaes of survival curves.
   conf.int.style = "step",  # customize style of confidence intervals
   xlab = "Time in days",   # customize X axis label.
   break.time.by = 200,     # break X axis in time intervals by 200.
   ggtheme = theme_light(), # customize plot and risk table with a theme.
   risk.table = "abs_pct",  # absolute number and percentage at risk.
  risk.table.y.text.col = T,# colour risk table text annotations.
  risk.table.y.text = FALSE,# show bars instead of names in text annotations
                            # in legend of risk table.
  ncensor.plot = TRUE,      # plot the number of censored subjects at time t
  surv.median.line = "hv",  # add the median survival pointer.
  legend.labs = 
    c("Male", "Female"),    # change legend labels.
  palette = 
    c("#E7B800", "#2E9FDF") # custom color palettes.
)
Analyse de survie

Analyse de survie

Le graphique de Kaplan-Meier peut être interprété comme suit:

L’axe horizontal (axe des x) représente le temps en jours et l’axe vertical (axe des y) montre la probabilité de survivre ou la proportion de personnes survivant. Les lignes représentent les courbes de survie des deux groupes. Une chute verticale des courbes indique un événement. La graduation verticale sur les courbes signifie qu’un patient a été censuré à ce moment.

  • Au temps zéro, la probabilité de survie est de 1,0 (ou 100% des participants sont vivants).
  • Au temps 250, la probabilité de survie est d’environ 0,55 (ou 55%) pour le sexe = 1 et de 0,75 (ou 75%) pour le sexe = 2.
  • La survie médiane est d’environ 270 jours pour le sexe = 1 et 426 jours pour le sexe = 2, ce qui suggère une bonne survie pour le sexe = 2 par rapport au sexe = 1

Les temps de survie médians pour chaque groupe peuvent être obtenus à l’aide du code ci-dessous:

summary(fit)$table
      records n.max n.start events   *rmean *se(rmean) median 0.95LCL 0.95UCL
sex=1     138   138     138    112 325.0663   22.59845    270     212     310
sex=2      90    90      90     53 458.2757   33.78530    426     348     550

Les temps de survie médians pour chaque groupe représentent le moment auquel la probabilité de survie, S

La durée médiane de survie pour le sexe = 1 (groupe masculin) est de 270 jours, contre 426 jours pour le sexe = 2 (femme). Il semble y avoir un avantage de survie pour les femmes atteintes d’un cancer du poumon par rapport aux hommes. Cependant, pour évaluer si cette différence est statistiquement significative, il faut un test statistique formel, un sujet qui est abordé dans les sections suivantes.

Notez que les limites de confiance sont larges à la queue des courbes, ce qui rend les interprétations significatives difficiles. Cela peut s’expliquer par le fait que, dans la pratique, il y a généralement des patients perdus de vue ou en vie à la fin du suivi. Ainsi, il peut être judicieux de raccourcir les graphiques avant la fin du suivi sur l’axe des abscisses (Pocock et al, 2002).

Les courbes de survie peuvent être raccourcies en utilisant l’argument xlim comme suit:

ggsurvplot(fit,
          conf.int = TRUE,
          risk.table.col = "strata", # Change risk table color by groups
          ggtheme = theme_bw(), # Change ggplot2 theme
          palette = c("#E7B800", "#2E9FDF"),
          xlim = c(0, 600))
Analyse de survie

Analyse de survie

Notez que trois transformations souvent utilisées peuvent être spécifiées à l’aide de l’argument amusement:

  • «Log»: transformation log de la fonction survivant,
  • «Événement»: trace les événements cumulés (f (y) = 1-y). Elle est également connue sous le nom d’incidence cumulative,
  • «Cumhaz» trace la fonction de risque cumulée (f (y) = -log (y))

Par exemple, pour tracer des événements cumulatifs, tapez ceci:

ggsurvplot(fit,
          conf.int = TRUE,
          risk.table.col = "strata", # Change risk table color by groups
          ggtheme = theme_bw(), # Change ggplot2 theme
          palette = c("#E7B800", "#2E9FDF"),
          fun = "event")
Analyse de survie

Analyse de survie

le danger cumulatif est couramment utilisé pour estimer la probabilité de danger. Il est défini comme (H

Pour tracer le danger cumulatif, tapez ceci:

ggsurvplot(fit,
          conf.int = TRUE,
          risk.table.col = "strata", # Change risk table color by groups
          ggtheme = theme_bw(), # Change ggplot2 theme
          palette = c("#E7B800", "#2E9FDF"),
          fun = "cumhaz")
Analyse de survie

Analyse de survie

Table de mortalité de Kaplan-Meier: résumé des courbes de survie

Comme mentionné ci-dessus, vous pouvez utiliser la fonction résumé() pour avoir un résumé complet des courbes de survie:

summary(fit)

Il est également possible d’utiliser la fonction surv_summary()[dans[in[dans[insurvivant paquet]pour obtenir un résumé des courbes de survie. Par rapport à la fonction summary () par défaut, surv_summary () crée un bloc de données contenant un joli résumé des résultats de survfit.

res.sum 
  time n.risk n.event n.censor      surv    std.err     upper     lower strata sex
1   11    138       3        0 0.9782609 0.01268978 1.0000000 0.9542301  sex=1   1
2   12    135       1        0 0.9710145 0.01470747 0.9994124 0.9434235  sex=1   1
3   13    134       2        0 0.9565217 0.01814885 0.9911586 0.9230952  sex=1   1
4   15    132       1        0 0.9492754 0.01967768 0.9866017 0.9133612  sex=1   1
5   26    131       1        0 0.9420290 0.02111708 0.9818365 0.9038355  sex=1   1
6   30    130       1        0 0.9347826 0.02248469 0.9768989 0.8944820  sex=1   1

La fonction surv_summary() renvoie un bloc de données avec les colonnes suivantes:

  • time: les points temporels auxquels la courbe a un pas.
  • n.risk: le nombre de sujets à risque à t.
  • n.event: le nombre d’événements qui se produisent au temps t.
  • n.censor: nombre d’événements censurés.
  • surv: estimation de la probabilité de survie.
  • std.err: erreur standard de survie.
  • supérieur: extrémité supérieure de l’intervalle de confiance
  • inférieur: extrémité inférieure de l’intervalle de confiance
  • strates: indique la stratification de l’estimation de la courbe. Les niveaux de strates (un facteur) sont les étiquettes des courbes.

Dans une situation où les courbes de survie ont été ajustées avec une ou plusieurs variables, l’objet surv_summary contient des colonnes supplémentaires représentant les variables. Cela permet de facettiser la sortie de ggsurvplot par strates ou par certaines combinaisons de facteurs.

surv_summary objet a également un attribut nommé «table» contenant des informations sur les courbes de survie, y compris les médianes de survie avec intervalles de confiance, ainsi que le nombre total de sujets et le nombre d’événements dans chaque courbe. Pour accéder à l’attribut «table», saisissez ceci:

attr(res.sum, "table")

Test Log-Rank comparant les courbes de survie: survdiff ()

le test de log-rank est la méthode la plus utilisée pour comparer deux ou plusieurs courbes de survie. L’hypothèse nulle est qu’il n’y a pas de différence de survie entre les deux groupes. Le test du log rank est un test non paramétrique, qui ne fait aucune hypothèse sur les distributions de survie. Essentiellement, le test du log rank compare le nombre d’événements observés dans chaque groupe à ce qui serait attendu si l’hypothèse nulle était vraie (c’est-à-dire si les courbes de survie étaient identiques). La statistique du log rank est approximativement distribuée sous forme de statistique de test du chi carré.

La fonction survivre()[dans[in[dans[insurvie paquet]peut être utilisé pour calculer test de log-rank comparer deux ou plusieurs courbes de survie.

survivre() peut être utilisé comme suit:

surv_diff 
Call:
survdiff(formula = Surv(time, status) ~ sex, data = lung)
        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.00131 

La fonction renvoie une liste de composants, notamment:

  • n: le nombre de sujets dans chaque groupe.
  • obs: le nombre d’événements pondérés observés dans chaque groupe.
  • exp: le nombre attendu d’événements pondérés dans chaque groupe.
  • chisq: la statistique chisquare pour un test d’égalité.
  • strates: éventuellement, le nombre de sujets contenus dans chaque strate.

Le test du log rank pour la différence de survie donne une valeur p de p = 0,0013, indiquant que les groupes de sexe diffèrent de manière significative en termes de survie.


Source de l’article

A découvrir