Een Kaplan-Meier-schatting fitten

Survivalanalyse in Python

Shae Wang

Senior Data Scientist

Wat is de Kaplan-Meier-schatting?

Een niet-parametrische statistiek die de overlevingsfunctie van time-to-event-data schat.

  • Ook bekend als
    • de product-limietschatter
    • de K-M-schatting
  • Niet-parametrisch: bouwt een overlevingscurve op uit data en gaat niet uit van een verdeling
Survivalanalyse in Python

De wiskundige intuïtie

Definities:

  • $t_i$: een duur-tijd
  • $d_i$: aantal events op tijd $t_i$
  • $n_i$: aantal individuen dat tot tijd $t_i$ bekend is te overleven

 

Overlevingsfunctie $S(t)$ wordt geschat met: $$S(t)=\prod_{i:t_i\leq t}\bigg(1-\frac{d_i}{n_i}\bigg)$$

Survivalanalyse in Python

Waarom heet het de product-limietschatter?

Stel: events op 3 tijden: 1, 2, 3

Overleving voor $t=2$: $$S(t=2)=\bigg(1-\frac{d_1}{n_1}\bigg)*\bigg(1-\frac{d_2}{n_2}\bigg)$$

Overleving voor $t=3$: $$S(t=3)=S(t=2)*\bigg(1-\frac{d_3}{n_3}\bigg)$$

De overleving op tijd t is het product van de overlevingskans op t en alle eerdere tijden.

Survivalanalyse in Python

Aannames om te onthouden

  • Eenduidige events: het event treedt op op een duidelijk moment.
  • Overlevingskansen vergelijkbaar voor alle proefpersonen: onafhankelijk van instaptijd.
  • Niet-informerende censurering: gecensureerde cases hebben dezelfde vooruitzichten als doorgemeten cases.
Survivalanalyse in Python

Kaplan-Meier met lifelines

from lifelines import KaplanMeierFitter

KaplanMeierFitter: een class uit de lifelines-bibliotheek

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
Survivalanalyse in Python

Het hypotheekvoorbeeld

DataFrame-naam: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
Survivalanalyse in Python

Het hypotheekvoorbeeld

DataFrame-naam: 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", 
fitted with 100 total observations, 
18 right-censored observations>
Survivalanalyse in Python

De Kaplan-Meier-schatting gebruiken

Wat is de mediane looptijd van een uitstaande hypotheek?

print(mortgage_kmf.median_survival_time_)
4.0

Wat is de kans dat een hypotheek elk jaar na start nog uitstaat?

print(mortgage_kmf.survival_function_)
          KM_estimate
timeline             
0.0          1.000000
1.0          0.983267
2.0          0.950933
3.0          0.892328
Survivalanalyse in Python

De Kaplan-Meier-schatting gebruiken

Wat is de kans dat een hypotheek in jaar 34 na start nog niet is afgelost?

mortgage_kmf.predict(34)
0.037998
Survivalanalyse in Python

Voordelen en beperkingen

Voordelen
  • Intuïtieve interpretatie van overlevingskansen.
  • Flexibel: toepasbaar op elke time-to-event-dataset.
  • Meestal het eerste model voor time-to-event-data.
Beperkingen
  • Overlevingscurve is niet vloeiend.
  • Als ≥50% van de data gecensureerd is, kan .median_survival_time_ niet worden berekend.
  • Niet geschikt om covariaat-effecten op de overlevingsfunctie te analyseren.
Survivalanalyse in Python

Laten we oefenen!

Survivalanalyse in Python

Preparing Video For Download...