1. Données censurées

Lorsque l’on a une connaissance partielle de la variable (par exemple, sur un suivi de 12 mois l’évènement n’est pas survenu, mais il peut survenir ensuite), on dit qu’elle est censurée.

Que vaut-il mieux mesurer?
- la durée jusqu’à la survenue de l’évènement ?
- le pourcentage de survenue de l’évènement ? mais ce dernier va être pénalisé par les perdus de vue.

En pratique, il va y avoir dans la cohorte deux types de censures selon que les patients sont des exclus vivants (au delà de la période, l’évènement n’est pas survenu) ou des perdus de vue qui n’ont pas été suivi sur toute la période. La fonction de survie \(S(t)\), c’est le pourcentage de “survivants” au cours du temps.
Le risque instantané de décès \(h(t)\), c’est l’évolution de la probabilité de décéder à un instant donné.

Nous allons travailler sur une cohorte de 125 patient·es alcooliques suivis :

str(alc)
## 'data.frame':    125 obs. of  5 variables:
##  $ t     : int  121 121 40 39 66 64 5 30 34 5 ...
##  $ SEVRE : int  0 0 0 0 0 0 1 0 0 0 ...
##  $ AGE   : int  53 52 45 48 45 42 35 35 41 37 ...
##  $ SEXE  : int  1 2 2 1 1 1 1 1 1 1 ...
##  $ EDVNEG: int  0 0 0 1 0 0 0 0 0 0 ...

On va étudier la variable censurée “délai jusqu’à rechute de la maladie alcoolique”.

probabilités de survie

Temps Patients survivants Décès Censure Prob de décès Prob de survie Prob de survie cumulée
1 10 0 0 0 1 1
5 10 1 0 \(\frac{1}{10} = 0,1\) 0,9 \(1*0,9 = 0,9\)
14 9 1 0 \(\frac{1}{9} = 0,11\) 0,89 \(0,9*0,89 = 0,8\)
20 8 1 0 \(\frac{1}{8} = 0,125\) 0,875 \(0,8*0875 = 0,7\)
40 7 1 0 \(\frac{1}{7} = 0,14\) 0,857 \(0,7*0,857 = 0,6\)
55 6 1 0 \(\frac{1}{6} = 0,16\) 0,84 \(0,6*0,84 = 0,5\)
60 5 0 1 - - \(0,5\)
75 4 1 0 \(\frac{1}{(5-1)} = 0,25\) 0,75 \(0,5*0,75 = 0,38\)
90 3 0 0 \(\frac{1}{3}=0\) 1 \(1*0,38 = 0,38\)

La probabilité de survie cumulée prend en compte la censure. La courbe de survie prend en compte les perdus de vue au cours du temps.

library(survival)
plot(survfit(Surv(alc$t,alc$SEVRE) ~ 1), main = 'Courbe de maintien dans l\'abstinence', mark.time = TRUE) # le mark.time correspond à chacune des observations censurées

# en modifiant l'affichage on peut afficher plusieurs courbes de survie correspondant à plusieurs groupes de sujets
plot(survfit(Surv(t, SEVRE) ~ SEXE, data = alc), col = c('black', 'red'), main = 'Courbe de maintien dans l\'abstinence', mark.time = TRUE)
legend(x = 'topright', lty = c(1,1), legend = c('Hommes', 'Femmes'), col = c('black', 'red'))

survfit(Surv(alc$t,alc$SEVRE) ~ 1) # la médiane de survie est NA car plus de la moitié des sujets sont toujours sevrés à la fin de l'observation, on ne peut donc pas estimer la médiane de survie
## Call: survfit(formula = Surv(alc$t, alc$SEVRE) ~ 1)
## 
##        n events median 0.95LCL 0.95UCL
## [1,] 125     27     NA     160      NA

2. tests statistiques

a. tester la survie avec une variable qualitative

On aimerait savoir s’il existe une différence de survie entre les hommes et les femmes, il faut alors utiliser un test du log-rank
Attention aux conditions de validité, il faut soit de nombreux temps de décès ou alors de nombreux morts à chaque temps de décès.

library(survival)
# 
plot(survfit(Surv(t, SEVRE) ~ SEXE, data = alc), col = c('black', 'red'), main = 'Courbe de maintien dans l\'abstinence', mark.time = TRUE)
legend(x = 'topright', lty = c(1,1), legend = c('Hommes', 'Femmes'), col = c('black', 'red'))

survdiff(Surv(t, SEVRE) ~ SEXE, data = alc)
## Call:
## survdiff(formula = Surv(t, SEVRE) ~ SEXE, data = alc)
## 
##          N Observed Expected (O-E)^2/E (O-E)^2/V
## SEXE=1 107       24    23.74   0.00281    0.0235
## SEXE=2  18        3     3.26   0.02046    0.0235
## 
##  Chisq= 0  on 1 degrees of freedom, p= 0.9

Le \(p = 0,9\), il n’y a pas de différence entre les deux sexes.

b. tester la survie avec une variable quantitative

On pourrait tester l’association entre la rechute et l’âge, nous allons utiliser le modèle de Cox.

coxph(Surv(t, SEVRE) ~ AGE, data = alc)
## Call:
## coxph(formula = Surv(t, SEVRE) ~ AGE, data = alc)
## 
##         coef exp(coef) se(coef)      z      p
## AGE -0.04671   0.95436  0.02349 -1.989 0.0467
## 
## Likelihood ratio test=4.09  on 1 df, p=0.04312
## n= 125, number of events= 27

\(p = 0.0467\), au risque de 5% on peut dire qu’il y a une association significative entre le risque de rechute et l’âge. Le coefficient étant négatif (- 0.04671) signifie que la survenue de la rechute sera plus tardive pour les gens plus âgés (l’âge a tendance à protéger de la rechute).

c. tester l’association de la survie avec une liste de variables explicatives

Par exemple, on peut tester la rechute de la maladie alcoolique en fonction de l’âge, du sexe, de la survenue d’évènements de vie. C’est encore le modèle de Cox.

mod <- coxph(Surv(t, SEVRE) ~ AGE + SEXE + EDVNEG, data = alc)
summary(mod)
## Call:
## coxph(formula = Surv(t, SEVRE) ~ AGE + SEXE + EDVNEG, data = alc)
## 
##   n= 125, number of events= 27 
## 
##            coef exp(coef) se(coef)      z Pr(>|z|)  
## AGE    -0.04733   0.95378  0.02367 -1.999   0.0456 *
## SEXE   -0.01511   0.98500  0.62057 -0.024   0.9806  
## EDVNEG -0.44278   0.64225  1.02405 -0.432   0.6655  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##        exp(coef) exp(-coef) lower .95 upper .95
## AGE       0.9538      1.048    0.9105    0.9991
## SEXE      0.9850      1.015    0.2919    3.3240
## EDVNEG    0.6422      1.557    0.0863    4.7794
## 
## Concordance= 0.628  (se = 0.058 )
## Likelihood ratio test= 4.31  on 3 df,   p=0.2
## Wald test            = 4.15  on 3 df,   p=0.2
## Score (logrank) test = 4.23  on 3 df,   p=0.2

On observe que seulement l’âge est associé au risque de survenue de la rechute \(p = 0.0456\).
Les coefficients sont négatifs (donc avec un rôle plutôt protecteur) mais leur valeur n’est pas facile à interpréter. Encore une fois, l’exponentielle de leur valeur peut être intéressante (surtout quand la variable est binaire).

Pour les évènements de vie négatifs, nous avons 36% (1 - 0.6422) de chances de moins de présenter un risque de rechute à un instant donné. Ceci correspond à un hazard ratio (ou rapport des risques instantannés de décès), la présence d’un évènement de vie diminuerait de 36% le risque de rechute ininterprétable dans ce cas car seulement 5 évènements de vie dans la cohorte et NS.

conditions de validité d’un modèle de Cox

  • il faut nombre “suffisant” d’évènements (soit 5 à 10 par variable explicative, cf. F-Régression logistique).
  • il faut vérifier l’hypothèse des risques instantanés proportionnels. plot(cox.zph(mod))
par(mfrow= c(2,2)) # sert à fractionner en quatre cadrans la fenêtre du plot
plot(cox.zph(mod))

Il faut vérifier que les trois courbes sont le plus horizontal possible (ce qui est globalement le cas ici). Donc, l’hypothèse des risques instantanés proportionnels est vérifiée ici.

autre

Ce qui ne change pas ou peu par rapport à la régression linéaire, c’est l’utilisation de variables catégorielles à plus de deux classes (qui seront re-codées en variables binaires) comme la profession et la recherche d’intéraction entre des variables explicatives (avec le signe *).

Lire la suite

A-Introduction et représentations graphiques
B-Dispersion et intervalles de confiance
C-Coefficient de corrélation
D-Tests statistiques
E-Régression linéaire
F-Régression logistique
G-Données de survie
H-Statistique exploratoire multidimensionnelle
I-Multiplicité des tests