Je Kaplan-Meier-model visualiseren

Survivalanalyse in Python

Shae Wang

Senior Data Scientist

Hoe construeer je een Kaplan-Meier-overlevingscurve?

Speeldata met $n=5$:

duur geobserveerd
2 1
5 0
3 1
5 1
2 0

Stap 1: Sorteer data oplopend. Bij gelijke waarden komt gecensureerde data na ongecensureerde data.

Stap 2: Bereken voor elke $t_i$ $d_i$, $n_i$ en $\big(1-\frac{d_i}{n_i}\big)$

Stap 3: Voor elke $t_i$, vermenigvuldig $\big(1-\frac{d_i}{n_i}\big)$ met $\big(1-\frac{d_{i-1}}{n_{i-1}}\big)$, $\big(1-\frac{d_{i-2}}{n_{i-2}}\big)$, ... , $\big(1-\frac{d_0}{n_0}\big)$

Survivalanalyse in Python

Hoe construeer je een Kaplan-Meier-overlevingscurve?

Stap 1: Rangschik duren oplopend. Bij gelijke waarden komt gecensureerde data na ongecensureerde data.

duur
2
5+
3
5
2+

Gebruik het teken "+" voor censuur: 2, 5+, 3, 5, 2+

Survivalanalyse in Python

Hoe construeer je een Kaplan-Meier-overlevingscurve?

Stap 1: Rangschik duren oplopend. Bij gelijke waarden komt gecensureerde data na ongecensureerde data.

$t_i$
2, 2+
3
5, 5+
Survivalanalyse in Python

Hoe construeer je een Kaplan-Meier-overlevingscurve?

Stap 2: Bereken voor elke $t_i$ $d_i$, $n_i$ en $\big(1-\frac{d_i}{n_i}\big)$

$t_i$
2, 2+
3
5, 5+
Survivalanalyse in Python

Hoe construeer je een Kaplan-Meier-overlevingscurve?

Stap 2: Bereken voor elke $t_i$ $d_i$, $n_i$ en $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$
2, 2+ 1
3 1
5, 5+ 1
Survivalanalyse in Python

Hoe construeer je een Kaplan-Meier-overlevingscurve?

Stap 2: Bereken voor elke $t_i$ $d_i$, $n_i$ en $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$ $n_i$
2, 2+ 1 5
3 1 3
5, 5+ 1 2
Survivalanalyse in Python

Hoe construeer je een Kaplan-Meier-overlevingscurve?

Stap 2: Bereken voor elke $t_i$ $d_i$, $n_i$ en $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$ $n_i$ $\big(1-\frac{d_i}{n_i}\big)$
2, 2+ 1 5 $4/5$
3 1 3 $2/3$
5, 5+ 1 2 $1/2$
Survivalanalyse in Python

Hoe construeer je een Kaplan-Meier-overlevingscurve?

Stap 3: Voor elke $t_i$, vermenigvuldig $\big(1-\frac{d_i}{n_i}\big)$ met $\big(1-\frac{d_{i-1}}{n_{i-1}}\big)$, $\big(1-\frac{d_{i-2}}{n_{i-2}}\big)$, ... , $\big(1-\frac{d_0}{n_0}\big)$

$t_i$ $d_i$ $n_i$ $\big(1-\frac{d_i}{n_i}\big)$ $S(t_i)$
2, 2+ 1 5 4/5 4/5 = 0,8
3 1 3 2/3 4/5 $\cdot$ 2/3 = 0,53
5, 5+ 1 2 1/2 4/5 $\cdot$ 2/3 $\cdot$ 1/2 = 0,27
Survivalanalyse in Python

Hoe construeer je een Kaplan-Meier-overlevingscurve?

$t_i$ $d_i$ $n_i$ $\big(1-\frac{d_i}{n_i}\big)$ $S(t_i)$
2, 2+ 1 5 $4/5$ 0,8
3 1 3 $2/3$ 0,53
5, 5+ 1 2 $1/2$ 0,27

Kaplan-Meier-curve uit tabel.

Survivalanalyse in Python

De overlevingscurve interpreteren

Kaplan-Meier-curve uit tabel.

  • De overlevingskansen op elk tijdstip tussen 0 en 5.

  • Veelgemaakte misvatting: als de curve naar 0 gaat, overleefde niemand.

  • De curve daalt naar nul als de laatste observatie niet is gecensureerd (ware duur is bekend).
Survivalanalyse in Python

De Kaplan-Meier-overlevingscurve plotten

from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
kmf.survival_function_.plot()
plt.show()
Survivalanalyse in Python

Het hypotheekvoorbeeld

DataFrame-naam: mortgage_df

id duur afgelost
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
from lifelines import KaplanMeierFitter
from matplotlib import pyplot as plt
mortgage_kmf = KaplanMeierFitter()
mortgage_kmf.fit(duration=mortgage_df["duration"], 
        event_observed=mortgage_df["paid_off"])
mortgage_kmf.survival_function_.plot()
Survivalanalyse in Python

Het hypotheekvoorbeeld

plt.show()

Visualisatie van de overlevingscurve voor het hypotheekprobleem.

Survivalanalyse in Python

Betrouwbaarheidsinterval van de overlevingscurve

mortgage_kmf.plot_survival_function()
plt.show()

Visualisatie van de overlevingscurve voor het hypotheekprobleem met betrouwbaarheidsinterval.

Survivalanalyse in Python

Waarom is het betrouwbaarheidsinterval nuttig?

  • Een manier om de onzekerheid van elke puntschatting van overlevingskansen te kwantificeren
  • Een breed betrouwbaarheidsinterval betekent minder zekerheid, vaak door kleine steekproef
  • Een smal betrouwbaarheidsinterval betekent meer zekerheid, vaak door grote steekproef
Survivalanalyse in Python

Manieren om de Kaplan-Meier-overlevingscurve te plotten

Plot puntschattingen van de overlevingsfunctie als een doorlopende lijn.

kmf.survival_function_.plot()
plt.show()

Plot van de overlevingsfunctie als doorlopende lijn.

Plot de overlevingsfunctie als getrapte lijn zonder betrouwbaarheidsinterval.

kmf.plot(ci_show=False)
plt.show()

Plot van de overlevingsfunctie als getrapte lijn.

Survivalanalyse in Python

Manieren om de Kaplan-Meier-overlevingscurve te plotten

Plot de overlevingsfunctie als getrapte lijn met betrouwbaarheidsinterval.

kmf.plot()
plt.show()

Plot van de overlevingsfunctie als getrapte lijn met betrouwbaarheidsinterval.

Nog een manier...

kmf.plot_survival_function()
plt.show()
Survivalanalyse in Python

Laten we oefenen!

Survivalanalyse in Python

Preparing Video For Download...