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

Chargement des packages utilisés

library(knitr) #pour le rapport Rmarkdown
library(survival)

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

data=aml
attach(data)
kable(aml)
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

kable(summary(data))
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')# nonmaintained

L’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.

base=Surv(time,status)
base #données censurées marquées par un +
##  [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

kpm=survfit(base~1,)
summary(kpm)
## 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
plot(kpm,main ='Courbe de survie globale',xlab='time',ylab="SKM")

Fonction de survie groupe 1 (chimiothérapie maintenue)

kpm1=survfit(base~x,data=data,subset=x=="Maintained")
summary(kpm1)
## 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
plot(kpm1,,main =' Courbe de survie (maintenue)')

Fonction de survie groupe 2 (chimiothérapie non maintenue)

kpm2=survfit(base~x,data=data,subset=x=="Nonmaintained")
summary(kpm2)
## 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
plot(kpm2,main =' Courbe de survie (non maintenue)')

4.Courbes de survie des deux groupes sur un meme graphique

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 Rappelons la formule de la moyenne et de la fonction quantile:

\(E(T)=\int_{0}^{\infty} S(T) \, \mathrm{d}t\) , on estime donc l’esperance en remplacant \(S(T)\) par l’estimateur de Kapkan-meier \(\widehat{S}(t)\) , ce qui est simple pusique \(\widehat{S}(t)\) est une fonction en escalier, il suffit donc d’additionner des aires de rectangles.

Mais il est impératif de noter qu’on a un problème si la dernière observation est censurée ! Le dernier rectangle a une aire infinie. Selon où on “coupe”, on obtient une moyenne différente. on chosit la zone de coupure avec le parametre ( rmean )

\(Q(p)=\inf(t: S(t)\leq p)\) , on estime donc la fonction quantile en remplacant \(S(T)\) par l’estimateur de Kapkan-meier \(\widehat{S}(t)\).

on choisit \(t=50\) pour la zone de coupe.

# moyenne, mediane et quantile de survie ( 2 groupe)
model<- survfit(Surv(time,status) ~ x)
a=quantile(model)
#moyenne groupe 1
print(model, print.rmean=TRUE,rmean=50)
## Call: survfit(formula = Surv(time, status) ~ x)
## 
##                  n events *rmean *se(rmean) median 0.95LCL 0.95UCL
## x=Maintained    11      7   32.2       4.68     31      18      NA
## x=Nonmaintained 12     11   22.7       4.18     23       8      NA
##     * restricted mean with upper limit =  50
#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
print(model1, print.rmean=TRUE,rmean=50)
## Call: survfit(formula = Surv(time, status) ~ 1, data = data)
## 
##          n     events     *rmean *se(rmean)     median    0.95LCL    0.95UCL 
##      23.00      18.00      27.17       3.26      27.00      18.00      45.00 
##     * restricted mean with upper limit =  50
#quantile
b=quantile(model1)

#tableau recapitulatif
tab=data.frame(moyenne=c(32.2,22.7,27.17),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 32.20 31 18 48
non-maintenue 22.70 23 8 33
globale 27.17 27 12 43

Comparaison des parametres de chaque groupe avec ceux de la pouplation globale

rappelons l’interpretation des differents parametres

Parametres Descriptions
Mediane de survie c’est le temps auquel pour 50% des observations l’évenement étudié est survenue et pour les autres 50% des observations, l’évenement étudié n’est pas survenue
Moyenne de survie c’est le temps moyen de survie pour un individu
1ier quartile de survie c’est le temps auquel pour 75% des observations l’évenement étudié est survenue et pour les autres 25% des observations, l’évenement étudié n’est pas survenue
3ieme quartile de survie c’est le temps auquel pour 25% des observations l’évenement étudié est survenue et pour les autres 75% des observations, l’évenement étudié n’est pas survenue

Dans notre cas, on remarque la médiane, le 1er quartile et le 3ieme quartile du groupe des patients dont la chimiotherapie a été maintenu sont supérieur à ceux de la population globale , ceux qui veut dire que la chimiotherapie permet d’augmenter la durée de recidive de certains patients.

la moyenne du groupe des patients dont la chimiotherapie a été maintenu est aussi supérieur à celle de la population globale, ce qui traduit le fait que les patients qui suivent une chimiotherapie ont une plus grande chance de ne pas recidiver c’est à dire que le cancer ne revienne pas à nouveau.

En définitive, on peut retenir que le traitement de chimiothérapie augmente la durée de vie de chaque patient.

6. Comparaison des deux courbes de survie

Si l’on compare les deux courbes de survie, on 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 qui peut entacher d’erreur l’interpretation précédente. par exemple on est pas sur que la date de survenu de l’evenement soit effectivement la bonne . En effet Si 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 ne connaî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.

la statistique de test est \(T_n=\frac{U^{2}}{V}\)

avec $U= {k=0}^{n}w_i (d{B,i}-e_{B,i}) $ et $V=_{k=0}^{n} $

*wi une pondération dependant du choix du test

  • \(d_{A,i}\) , \(d_{B,i}\) le nombre d’évenements observés au temps \(t_i^{*}\) dans les groupes A et B. ( \(d_i=d_{A,i} +d_{B,i}\))

  • \(e_{A,i}\),\(e_{B,i}\) le nombre d’évenements attendus au temps \(t_i^{*}\) dans les groupes A et B sous H0

  • \(R_{A,i}\) , \(R_{B,i}\) le nombre d’individus a risque juste avant \(t_i^{*}\) dans les groupes A et B avec \(R_i=R_{A,i}+R_{B,i}\)

sous (H0), \(T_n \hookrightarrow \chi^2 (1)\)

et la region critique du test est telle que \(R_{\alpha} =\{T_n ≥ c\alpha\}\)\(c\alpha\) est le quantile d’ordre \(1 − \alpha\) de la loi de \(\chi^2 (1)\).

Pour implementer le test de log-rank sur R , on utilise la fonction _survdiff du package survival.

survdiff(Surv(time,status)~x)
## 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 n’ existe une différence statistiquement significative entre les probabilités de survie des deux groupes.Mais ce test peut etre ilusoire pour tirer des conclusions car nous avons un faible effectif de chaque groupe.

8. Deux estimateurs du risque cumulé pour la population globale.

Pour commencer, rappelons la formule du risque cumulé \(H(t)=\int_{0}^{t} h(u) \, \mathrm{d}u\) C’est une version cumulée du risque instantané.

pour son estimation nous allons utilisé l’estimateur de Nelson-Alen puis l’estimateur de Breslow

Estimateur de Nelson-Alen

Nelson-Alen estime le risque cumulé par une fonction en escalier:

\(\widehat{S}(t)= \sum_{t^{*}_j < t}\frac{d_j}{Y^{*}_j}\)

library(survival)
fit=survfit(base~1)
a=summary(fit)
p=cumsum(a$n.event/a$n.risk)
plot(a$time,p, type="s", main= "Estimateur de Nelson-Alen du risque cumulé") 

Estimateur de Breslow

on sait que la formule (1) peut se réecrire de la maniere suivante :

\(H(u)=-ln(S(u))\)

Breslow estime donc la fonction de risque cumulé par :

\(H(u)=-ln(\widehat{S}(u))\)

fit=summary(survfit(Surv(time,status)~1,type="fh"))
fit
## Call: survfit(formula = Surv(time, status) ~ 1, type = "fh")
## 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##     5     23       2    0.915  0.0575       0.8088        1.000
##     8     21       2    0.830  0.0775       0.6910        0.997
##     9     19       1    0.787  0.0844       0.6381        0.971
##    12     18       1    0.745  0.0899       0.5878        0.944
##    13     17       1    0.702  0.0943       0.5397        0.914
##    18     14       1    0.654  0.0995       0.4852        0.881
##    23     13       2    0.557  0.1057       0.3840        0.808
##    27     11       1    0.509  0.1070       0.3367        0.768
##    30      9       1    0.455  0.1083       0.2855        0.725
##    31      8       1    0.402  0.1079       0.2372        0.680
##    33      7       1    0.348  0.1060       0.1917        0.632
##    34      6       1    0.295  0.1023       0.1493        0.582
##    43      5       1    0.241  0.0966       0.1101        0.529
##    45      4       1    0.188  0.0887       0.0745        0.474
##    48      2       1    0.114  0.0784       0.0296        0.439
plot(fit$time,-log(fit$surv),type="s",col="red",xlab='time',,main="Estimateur de Breslow du risque cumulé")

On remarque que les estimateurs de Nelson-Aalen et Breslow sont quasiment égaux.

9. Estimateur du risque cumulé pour chaque groupe

Nous utilisons l’estimateur de breslow pour estimer le risque cumulé.

model1<- survfit(Surv(time,status) ~ x,data=data, subset=x=="Maintained")
model2<- survfit(Surv(time,status) ~ x,data=data, subset=x=="Nonmaintained")
plot(model1$time,-log(model1$surv),type="s",col="red",main="Estimateur de Breslow du risque cumulé des deux groupes")
lines(model2$time,-log(model2$surv),type="s",col="blue")

legend("topright", legend=c("Maintained", "Nonmaintained"),
       col=c("red", "blue"), lty=c(1,1))

EXERCICE2

Le tableau suivant (fctif) donne pour 202 personnes le temps entre le début et la fin du chomage, en distinguant entre celles qui retrouvent un emploi salarié et celles qui quittent le chomage pour d’autres raisons.

Chargement des packages utilisés

library(KMsurv)

1. complètons le tableau de survie pour chaque k.

l=c(0,2,4,6,8,15)
Tempsenmois=cut(l,l)
Tempsenmois=Tempsenmois[-1]
Tempsenmois=as.data.frame(Tempsenmois)
Nouvelemploi=c(77,16,11,5,0)
Autresraisons=c(30,28,14,6,15)
chomage=cbind(Tempsenmois,Nouvelemploi,Autresraisons)
kable(chomage)
Tempsenmois Nouvelemploi Autresraisons
(0,2] 77 30
(2,4] 16 28
(4,6] 11 14
(6,8] 5 6
(8,15] 0 15

Determination de nk,Rk,fk,Sk,pk

  • Détermination de \(n_k\)

\(n_k\):nombre de cas exposés au risque après une durée correspondant à la borne inférieure de la classe k.

\(N_{k}=N_{k-1}-nouvelemploi_{k-1}-Autresraisons_{k-1}\)

nk=rep(0,length(l)-1)
nk[1]=202
for (i in 2:length(nk)){
  nk[i]=nk[i-1]-Nouvelemploi[i-1]-Autresraisons[i-1]
}
  • Détermination de \(R_{k}\)

\(R_{k}\):nombre de cas exposés utilisé pour l’estimation du risque. \(R_{k}=n_{k}-\frac{Autres raisons_{k}}{2}\)

Rk=rep(0,length(l)-1)
for(i in 1:length(Rk)){
  Rk[i]=nk[i]-Autresraisons[i]/2
}
  • Détermination de \(S_{k}\)

\(S_{k}\):estimation de la probabilité de rester au chômage pour une durée égale ou supérieure à celle de la classe k. \(S_{k}= \prod_{a_{i} \geq a_{j}}(1-\frac{nouvelemploi_{i-1}}{R_{i-1}})\)

lk=rep(0,length(l)-1)
lk[1]=1
for (i in 2:length(lk)){
  lk[i]=1-Nouvelemploi[i-1]/Rk[i-1]
}
Sk=rep(0,length(lk))
Sk=lk[1]
for(i in 2:length(lk)){
  for(j in 2:i){
    Sk[i]=Sk[j-1]*lk[i]
  }
}
  • Détermination de \(p_{k}\)

\(p_{k}\):estimation de la probabilité de rester au chômage au moins jusqu’au début et au plus tard jusqu’à la fin de la classe k. \(p_{k}= \frac{S_{k}*\frac{nouvelemploi_{k}}{R_{k}}}{amplitude_{k}}\)

pk=rep(0,length(l))
amplitude=c(2,2,2,2,7)
for (i in 1:length(pk)){
  pk[i]=Sk[i]*(Nouvelemploi[i]/Rk[i])/amplitude[i]
}
pk=pk[-5]
  • Détermination de \(h_{k}\)

\(h_{k}\) :estimation du risque instantané par intervalle. \(h_{k}=\frac{\frac{nouvelemploi_{k}}{R_{k}}}{amplitude_{k}(1-\frac{\frac{nouvelemploi_{k}}{R_{k}}}{2})}\)

hk=rep(0,length(pk))
for(i in 1:length(hk)){
  hk[i]=(pk[i]/(1-(Nouvelemploi[i]/Rk[i])/2))/Sk[i]
}

Tableau complèté

donnee=cbind(chomage,nk,Rk,hk,Sk,pk)
kable(donnee)
Tempsenmois Nouvelemploi Autresraisons nk Rk hk Sk pk
(0,2] 77 30 202 187.0 0.2592593 1.0000000 0.2058824
(2,4] 16 28 95 81.0 0.1095890 0.5882353 0.0580973
(4,6] 11 14 51 44.0 0.1428571 0.4720407 0.0590051
(6,8] 5 6 26 23.0 0.1219512 0.3540305 0.0384816
(8,15] 0 15 15 7.5 NA 0.2770673 NA

2.Construction de la table de survie avec lifetab

Chargement des données

#importation
load(file="C:/Users/User/Desktop/Survival Time/Survival Time/chomage_tp.rda")

Construction des variables neccesaires pour utiliser lifetab

tableau=Dataset
Tempsenmois=cut(tableau$temps,l)
tableau1=table(Tempsenmois)
tableau1=as.data.frame(tableau1)
nouveauemploi=rep(0,nrow(tableau1)-1)
for(i in 1:(length(l)-1)){
  nouveauemploi[i]=nrow(tableau[(tableau$temps<l[i+1] & tableau$temps>=l[i]) & tableau$statut=="evenement",])
}

autresraisons=tableau1$Freq-nouveauemploi
tableau1=cbind(tableau1,nouveauemploi,autresraisons)
kable(tableau1)
Tempsenmois Freq nouveauemploi autresraisons
(0,2] 107 77 30
(2,4] 44 16 28
(4,6] 25 11 14
(6,8] 11 5 6
(8,15] 15 9 6

Construction de la table de survie avec lifetab

n=nrow(tableau)
surv=lifetab(l,n,autresraisons,nouveauemploi)
kable(surv)
nsubs nlost nrisk nevent surv pdf hazard se.surv se.pdf se.hazard
0-2 202 30 187 77 1.0000000 0.2058824 0.2592593 0.0000000 0.0179949 0.0285351
2-4 95 28 81 16 0.5882353 0.0580973 0.1095890 0.0359898 0.0134878 0.0272322
4-6 51 14 44 11 0.4720407 0.0590051 0.1428571 0.0388746 0.0161553 0.0426313
6-8 26 6 23 5 0.3540305 0.0384816 0.1219512 0.0424217 0.0159074 0.0541312
8-15 15 6 12 9 0.2770673 NA NA 0.0450482 NA NA

Representation de la fonction de survie**

x=rep(l,each=2)
x=x[-c(1,12)]
y=rep(surv$surv,each=2)
plot(x,y,type="l",col="red",xlab="intervalle de temps",ylab="fonction survie")
title(main = "Courbe de survie globale", cex=.6)

Comparaison des résultats avec ceux obtenus précédemment et commentaire.

les résultats sont presque identique , il existe une légère différence au niveau l’intervalle [8,15]. cette différence est due au faite que les informations sur l’intervalle [8,15] du jeu du données et du tableau ne concorde pas.

3. Intervalle de confiance pour la courbe de survie

La formule de l’intervalle de confiance est la suivante : \(IC_{\alpha}=[\widehat{S}(t)- q_{1-\alpha/2}\sqrt(\widehat{Var}(\widehat{S}(t)),\widehat{S}(t)+ q_{1-\alpha/2}\sqrt(\widehat{Var}(\widehat{S}(t))]\)

l=c(0,2,4,6,8,15)
Tempsenmois=cut(l,l)
Tempsenmois=Tempsenmois[-1]
Tempsenmois=as.data.frame(Tempsenmois)
borneinf=rep(0,5)
bornesup=rep(0,5)
alpha=0.05
for(i in 1:5){
  borneinf[i]=surv$surv[i]-qnorm(1-alpha/2,0,1)*surv$se.surv[i]
  bornesup[i]=surv$surv[i]+qnorm(1-alpha/2,0,1)*surv$se.surv[i]
}
intervalle=as.data.frame(cbind(Tempsenmois,borneinf,bornesup))
kable(intervalle)
Tempsenmois borneinf bornesup
(0,2] 1.0000000 1.0000000
(2,4] 0.5176966 0.6587740
(4,6] 0.3958478 0.5482336
(6,8] 0.2708855 0.4371755
(8,15] 0.1887745 0.3653602

4. Construction de deux courbes de survie pour les femmes et les hommes

Table de survie pour les hommes

tableau=Dataset
tableau=tableau[tableau$genre=="H",]
Tempsenmois=cut(tableau$temps,l)
tableau1=table(Tempsenmois)
tableau1=as.data.frame(tableau1)
nouveauemploi=rep(0,nrow(tableau1)-1)
for(i in 1:(length(l)-1)){
  nouveauemploi[i]=nrow(tableau[(tableau$temps<l[i+1] & tableau$temps>=l[i]) & tableau$statut=="evenement",])
}

autresraisons=tableau1$Freq-nouveauemploi
tableau1=cbind(tableau1,nouveauemploi,autresraisons)
kable(tableau1)
Tempsenmois Freq nouveauemploi autresraisons
(0,2] 31 23 8
(2,4] 25 7 18
(4,6] 20 9 11
(6,8] 10 4 6
(8,15] 15 9 6
n=nrow(tableau)
survH=lifetab(l,n,autresraisons,nouveauemploi)
kable(survH)
nsubs nlost nrisk nevent surv pdf hazard se.surv se.pdf se.hazard
0-2 101 8 97.0 23 1.0000000 0.1185567 0.1345029 0.0000000 0.0215920 0.0277910
2-4 70 18 61.0 7 0.7628866 0.0437722 0.0608696 0.0431839 0.0157621 0.0229639
4-6 45 11 39.5 9 0.6753422 0.0769377 0.1285714 0.0493014 0.0232250 0.0425014
6-8 25 6 22.0 4 0.5214668 0.0474061 0.1000000 0.0589966 0.0221009 0.0497494
8-15 15 6 12.0 9 0.4266546 NA NA 0.0645656 NA NA

Table de survie pour les femmes

tableau=Dataset
tableau=tableau[tableau$genre=="F",]
Tempsenmois=cut(tableau$temps,l)
tableau1=table(Tempsenmois)
tableau1=as.data.frame(tableau1)
nouveauemploi=rep(0,nrow(tableau1)-1)
for(i in 1:(length(l)-1)){
  nouveauemploi[i]=nrow(tableau[(tableau$temps<l[i+1] & tableau$temps>=l[i]) & tableau$statut=="evenement",])
}

autresraisons=tableau1$Freq-nouveauemploi
tableau1=cbind(tableau1,nouveauemploi,autresraisons)
kable(tableau1)
Tempsenmois Freq nouveauemploi autresraisons
(0,2] 76 54 22
(2,4] 19 9 10
(4,6] 5 2 3
(6,8] 1 1 0
(8,15] 0 0 0
n=nrow(tableau)
survF=lifetab(l,n,autresraisons,nouveauemploi)
kable(survF)
nsubs nlost nrisk nevent surv pdf hazard se.surv se.pdf se.hazard
0-2 101 22 90.0 54 1.0000000 0.3000000 0.4285714 0.0000000 0.0258199 0.0526937
2-4 25 10 20.0 9 0.4000000 0.0900000 0.2903226 0.0516398 0.0250998 0.0926060
4-6 6 3 4.5 2 0.2200000 0.0488889 0.2857143 0.0527889 0.0283114 0.1936088
6-8 1 0 1.0 1 0.1222222 0.0611111 1.0000000 0.0592940 0.0296470 0.0000000
8-15 0 0 0.0 0 0.0000000 NA NA NaN NA NA

construction des deux courbes de survie

x=rep(l,each=2)
x=x[-c(1,12)]
yH=rep(survH$surv,each=2)
plot(x,yH,type="l",col="red",xlab="intervalle de temps",ylab="fonction survie",ylim=seq(0,1,1))

x=rep(l,each=2)
x=x[-c(1,12)]
yF=rep(survF$surv,each=2)
lines(x,yF,type="l",col="blue",xlab="intervalle de temps",ylab="fonction survie")
title(main = "Courbe de survie (Homme vs femme)", cex=.6)


legend("topright", legend=c("Homme ", "Femmme"),
       col=c("red", "blue"), lty=c(1,1))

la courbe de survie des hommes est au dessus de la courbe de survie des femmes ce qui veut dire que les hommes retrouvent plus rapidement du travail que les femmes.