Ajuster un estimateur de Kaplan-Meier

Analyse de survie en Python

Shae Wang

Senior Data Scientist

Qu'est-ce que l'estimateur de Kaplan-Meier ?

Une statistique non paramétrique qui estime la fonction de survie pour des données de temps jusqu'à l'événement.

  • Aussi appelé
    • estimateur produit-limite
    • estimateur K-M
  • Non paramétrique : construit une courbe de survie à partir des données collectées, sans supposer de loi sous-jacente
Analyse de survie en Python

L'intuition mathématique

Définitions :

  • $t_i$ : un temps de durée
  • $d_i$ : nombre d'événements survenus au temps $t_i$
  • $n_i$ : nombre d'individus connus pour avoir survécu jusqu'au temps $t_i$

 

La fonction de survie $S(t)$ est estimée par : $$S(t)=\prod_{i:t_i\leq t}\bigg(1-\frac{d_i}{n_i}\bigg)$$

Analyse de survie en Python

Pourquoi « estimateur produit-limite » ?

Supposons des événements aux 3 temps : 1, 2, 3

Taux de survie pour $t=2$ : $$S(t=2)=\bigg(1-\frac{d_1}{n_1}\bigg)*\bigg(1-\frac{d_2}{n_2}\bigg)$$

Taux de survie pour $t=3$ : $$S(t=3)=S(t=2)*\bigg(1-\frac{d_3}{n_3}\bigg)$$

Le taux de survie au temps t est le produit des probabilités de survivre à t et à chaque temps précédent.

Analyse de survie en Python

Hypothèses à garder en tête

  • Événements non ambigus : l'événement d'intérêt se produit à un temps clairement défini.
  • Probabilités de survie comparables pour tous : elles ne dépendent pas du moment d'entrée dans l'étude.
  • Censure non informative : les observations censurées ont les mêmes perspectives de survie que celles suivies jusqu'au bout.
Analyse de survie en Python

Estimateur de Kaplan-Meier avec lifelines

from lifelines import KaplanMeierFitter

KaplanMeierFitter : une classe de la bibliothèque lifelines

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
Analyse de survie en Python

Exemple : prêts immobiliers

Nom du DataFrame : mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
Analyse de survie en Python

Exemple : prêts immobiliers

Nom du DataFrame : mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
from lifelines import KaplanMeierFitter
mortgage_kmf = KaplanMeierFitter()
mortgage_kmf.fit(duration=mortgage_df["duration"], 
        event_observed=mortgage_df["paid_off"])
<lifelines.KaplanMeierFitter:"KM_estimate", 
trained with 100 total observations, 
18 right-censored observations>
Analyse de survie en Python

Utiliser l'estimateur de Kaplan-Meier

Quelle est la durée médiane d'un prêt en cours ?

print(mortgage_kmf.median_survival_time_)
4.0

Quelle est la probabilité qu'un prêt reste en cours chaque année après l'initiation ?

print(mortgage_kmf.survival_function_)
          KM_estimate
timeline             
0.0          1.000000
1.0          0.983267
2.0          0.950933
3.0          0.892328
Analyse de survie en Python

Utiliser l'estimateur de Kaplan-Meier

Quelle est la probabilité qu'un prêt ne soit pas remboursé à l'année 34 après l'initiation ?

mortgage_kmf.predict(34)
0.037998
Analyse de survie en Python

Atouts et limites

Atouts
  • Interprétation intuitive des probabilités de survie.
  • Flexible : applicable à tout temps jusqu'à l'événement.
  • Souvent le premier modèle à essayer sur ces données.
Limites
  • Courbe de survie non lisse.
  • Si 50 % ou plus des données sont censurées, .median_survival_time_ ne peut pas être calculée.
  • Peu adapté pour analyser l'effet de covariables sur la fonction de survie.
Analyse de survie en Python

Passons à la pratique !

Analyse de survie en Python

Preparing Video For Download...