DUREE DE SURVIE : Tentative de correction des exercices 1 et 2 page 29-30 du support de cours
Exercice 1
On s’intéresse au temps de survie de patients atteints de leucemie myélode aigue. Pour faire cette étude, on utilisera le jeu de donnée aml contenu dans le package Survival. le package Survival est le package de reference sur R pour faire une analyse sur des données de survie car il contient l’implémentation des methodes principales ( estimateur de Kaplan-Meier, courbes de survie,…).
le jeu de donnée aml contient les informations suivantes:
| variables | Descriptions |
|---|---|
| time | Temps de survie |
| status | 0 pour une observation censuré et 1 sinon |
| x | Maintien d’un traitement par chimiothérapie |
En vue de commnencer a repondre qaux differentes question de l’exercice, chargeons tous les packages que nous allons utilisés
1. Apercu du jeu de données
Nous recuperons le jeu de données aml du package Survival ensuite nous l’attachons à l’aide de la fonction attach . il est imporant de noter que La fonction attach permet de ne pas à avoir à préciser à chaque fois le jeu de donnée sur lequel on travaille pour acceder a une de ses colonnes
| time | status | x |
|---|---|---|
| 9 | 1 | Maintained |
| 13 | 1 | Maintained |
| 13 | 0 | Maintained |
| 18 | 1 | Maintained |
| 23 | 1 | Maintained |
| 28 | 0 | Maintained |
| 31 | 1 | Maintained |
| 34 | 1 | Maintained |
| 45 | 0 | Maintained |
| 48 | 1 | Maintained |
| 161 | 0 | Maintained |
| 5 | 1 | Nonmaintained |
| 5 | 1 | Nonmaintained |
| 8 | 1 | Nonmaintained |
| 8 | 1 | Nonmaintained |
| 12 | 1 | Nonmaintained |
| 16 | 0 | Nonmaintained |
| 23 | 1 | Nonmaintained |
| 27 | 1 | Nonmaintained |
| 30 | 1 | Nonmaintained |
| 33 | 1 | Nonmaintained |
| 43 | 1 | Nonmaintained |
| 45 | 1 | Nonmaintained |
Il est important de faire un peu de statistque descriptive sur les données
| time | status | x | |
|---|---|---|---|
| Min. : 5.00 | Min. :0.0000 | Maintained :11 | |
| 1st Qu.: 12.50 | 1st Qu.:1.0000 | Nonmaintained:12 | |
| Median : 23.00 | Median :1.0000 | NA | |
| Mean : 29.48 | Mean :0.7826 | NA | |
| 3rd Qu.: 33.50 | 3rd Qu.:1.0000 | NA | |
| Max. :161.00 | Max. :1.0000 | NA |
n=nrow(data)
nb_cens=sum(status==0) #nombre d'observations censurées
nb_noncens=n-nb_cens#nombre d'observations non censurées
Nb_main=sum(x=='Maintained') #maintained
Nb_nonmain=sum(x=='Nonmaintained')# nonmaintainedL’etude porte dur 23 patients. Nous remarquons que le maximum des temps de survie est de 161 et le minimum est de 5, nous avons aussi 5observations censurées et 18 observations non censurées.De plus il ya 11 patient dont le traitement par chimiothérapie est maintenu , pour les 12 , le traitement n’est pas maintenu.
2. Création d’un objet de type survie
Nous allons crées un objet de type survie: ce objet nous permettra d’utiliser les fonctions du package survival. Pour cela , on utilise la fonction Surv.
## [1] 9 13 13+ 18 23 28+ 31 34 45+ 48 161+ 5 5 8 8
## [16] 12 16+ 23 27 30 33 43 45
Les données censurés sont marqués par un +. on a comme remarqué dans la question précédente, 5 observations censurées.
3. Estimateur de Kapla-Meier
Nous allons calculé l’estimateur de kapla-Meir de la survie globale c’est a dire utilisant le jeu de données en entie, puis calculer l’estimateur pour les 2 groupes formés à partir de la variable x (Maintained et Nonmaintained).
rappelons la formule de l’estimateur de kapla-Meier: \(\widehat{S}(t)=\prod_j^{ t^{*}_j < t }\left(1-\frac{d_j}{Y^{*}_j}\right)\)
avec \(t^{*}_j\) les temps de survie de l’évenement étudié, d_j le nombre de mort en \(t^{*}_j\) et \(Y^{*}_j\) le nombre d’individus à risque.
Pour calculer cet estimateur, on utilise la fonction survit du package survival R.
Fonction de survie globale
## Call: survfit(formula = base ~ 1)
##
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 5 23 2 0.9130 0.0588 0.8049 1.000
## 8 21 2 0.8261 0.0790 0.6848 0.996
## 9 19 1 0.7826 0.0860 0.6310 0.971
## 12 18 1 0.7391 0.0916 0.5798 0.942
## 13 17 1 0.6957 0.0959 0.5309 0.912
## 18 14 1 0.6460 0.1011 0.4753 0.878
## 23 13 2 0.5466 0.1073 0.3721 0.803
## 27 11 1 0.4969 0.1084 0.3240 0.762
## 30 9 1 0.4417 0.1095 0.2717 0.718
## 31 8 1 0.3865 0.1089 0.2225 0.671
## 33 7 1 0.3313 0.1064 0.1765 0.622
## 34 6 1 0.2761 0.1020 0.1338 0.569
## 43 5 1 0.2208 0.0954 0.0947 0.515
## 45 4 1 0.1656 0.0860 0.0598 0.458
## 48 2 1 0.0828 0.0727 0.0148 0.462
Fonction de survie groupe 1 (chimiothérapie maintenue)
kpm1=survfit(base~x,data=data,subset=x=="Maintained")
summary(kpm1,main =' Courbe de survie (maintenue)')## Call: survfit(formula = base ~ x, data = data, subset = x == "Maintained")
##
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 9 11 1 0.909 0.0867 0.7541 1.000
## 13 10 1 0.818 0.1163 0.6192 1.000
## 18 8 1 0.716 0.1397 0.4884 1.000
## 23 7 1 0.614 0.1526 0.3769 0.999
## 31 5 1 0.491 0.1642 0.2549 0.946
## 34 4 1 0.368 0.1627 0.1549 0.875
## 48 2 1 0.184 0.1535 0.0359 0.944
Fonction de survie groupe 2 (chimiothérapie non maintenue)
## Call: survfit(formula = base ~ x, data = data, subset = x == "Nonmaintained")
##
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 5 12 2 0.8333 0.1076 0.6470 1.000
## 8 10 2 0.6667 0.1361 0.4468 0.995
## 12 8 1 0.5833 0.1423 0.3616 0.941
## 23 6 1 0.4861 0.1481 0.2675 0.883
## 27 5 1 0.3889 0.1470 0.1854 0.816
## 30 4 1 0.2917 0.1387 0.1148 0.741
## 33 3 1 0.1944 0.1219 0.0569 0.664
## 43 2 1 0.0972 0.0919 0.0153 0.620
## 45 1 1 0.0000 NaN NA NA
4.Courbes de survie des deux groupes sur un meme grpahique
kpm3=survfit(Surv(time,status)~ x,data=data)
plot(kpm3,col=c('red','black'),mark=4,cex=2, main =' Courbes de survie des deux groupes')
legend("topright", legend=c("Maintained", "Nonmaintained"),
col=c("red", "blue"), lty=c(1,1))5. Moyenne, médiane, quartiles de survie
Nous allons calculé la moyenne, médiane, quartiles de survie dans les deux groupes et dans la pouplation globale
# moyenne, mediane et quantile de survie ( 2 groupe)
model<- survfit(Surv(time,status) ~ x)
a=quantile(model)
#moyenne groupe 1
moy_main=mean(mean(data[which(x=='Maintained'),1]))
#moyenne groupe 2
moy_nonmain=mean(mean(data[which(x=='Nonmaintained'),1]))
#moyenne, mediane et quantile de survie ( global)
model1<- survfit(Surv(time,status) ~ 1, data = data)
#moyenne de survi
moy_glob=mean(model1$time)
#quantile
b=quantile(model1)
#tableau recapitulatif
tab=data.frame(moyenne=c(moy_main,moy_nonmain,moy_glob),mediane=c(a$quantile[,2],b$quantile[2]),fisrt_quant=c(a$quantile[,1],b$quantile[1]),third_quant=c(a$quantile[,3],b$quantile[3]))
rownames(tab)=c('maintenue','non-maintenue','globale')
kable(tab)| moyenne | mediane | fisrt_quant | third_quant | |
|---|---|---|---|---|
| maintenue | 38.45455 | 31 | 18 | 48 |
| non-maintenue | 21.25000 | 23 | 8 | 33 |
| globale | 32.44444 | 27 | 12 | 43 |
Comparaison des parametres
6. Comparaison des deux courbes de survie
Si l’on compare les deux courbes de survie, constate que les patients du groupe dont le traitement de chimiothérapie a été maintenu présentent une probabilité de survie plus grande que ceux du groupe dont le traitement de chimiothérapie n’a pas été maintenu car la courbe des patients “Maintained” se situe toujours en-dessous de celle des patients “Nonmaintained”. ce graphique recèle quelques hypothèses potentiellement difficiles à prouver. par exemple on est pas sur que la date de survenu de l’evenement soit effectivment la bonne . En effetSi l’événement étudié etait par exemple «la mort», il n’y aurait pas de doute mais dans notre cas l’événement considéré est «l’apparition d’une récidive» dans une étude sur le cancer (leucémie mylione), si on suppose la recidive a été observé lors d’un examen de routine, alors on neconnaît pas le moment précis de la récidive, mais seulement l’intervalle de temps pendant lequel elle a eu lieu. nous nous trouvons donc face à un biais, notamment une surestimation du délai effectif de survenue de la récidive et par conséquent de la probabilité de survie sans récidive.
Dans la question suivante on utilisera un test statisque approprié ( test de log- Rank) pour comparer les deux courbes de survie.
7. Mise en place un test de comparaison des deux courbes de survie.
Test de log-Rank
Dans les fonctions de survie, le test convenant le mieux est le test du log-rank, qui fonctionne comme un test d’adéquation et compare le nombre de décès observés et le nombre de décès attendus dans chaque tranche temporelle, sous l’hypothèse nulle qu’il n’y ait pas de différence entre les deux courbes. De plus c’est le plus performant des tests quand les deux courbes de survies ne se croise pas ce qui est le cas dans cette étude.
( Ajouter la statistique de test , sa loi sous ho ,…)
Pour implementer le test de log-rank sur R , on utilise la fonction _survdiff du package survival.
## Call:
## survdiff(formula = Surv(time, status) ~ x)
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## x=Maintained 11 7 10.69 1.27 3.4
## x=Nonmaintained 12 11 7.31 1.86 3.4
##
## Chisq= 3.4 on 1 degrees of freedom, p= 0.07
La valeur p du test de log-rank est égale à 0,07 qui est superieur à 0,05, ce qui signifie que l’on a prouvé qu’il existe une différence statistiquement significative entre les probabilités de survie des deux groupes.