Visualisering av din Kaplan-Meier-modell

Överlevnadsanalys i Python

Shae Wang

Senior Data Scientist

Hur konstruerar man en Kaplan-Meier-överlevnadskurva?

Exempeldata med $n=5$:

duration observed
2 1
5 0
3 1
5 1
2 0

Steg 1: Sortera data i stigande ordning. Vid lika värden placeras censurerade observationer efter ocensurerade.

Steg 2: Beräkna $d_i$, $n_i$ och $\big(1-\frac{d_i}{n_i}\big)$ för varje $t_i$

Steg 3: Multiplicera $\big(1-\frac{d_i}{n_i}\big)$ med $\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)$ för varje $t_i$

Överlevnadsanalys i Python

Hur konstruerar man en Kaplan-Meier-överlevnadskurva?

Steg 1: Sortera varaktigheterna i stigande ordning. Vid lika värden placeras censurerade observationer efter ocensurerade.

duration
2
5+
3
5
2+

Använd "+" för att markera censurerade observationer: 2, 5+, 3, 5, 2+

Överlevnadsanalys i Python

Hur konstruerar man en Kaplan-Meier-överlevnadskurva?

Steg 1: Sortera varaktigheterna i stigande ordning. Vid lika värden placeras censurerade observationer efter ocensurerade.

$t_i$
2, 2+
3
5, 5+
Överlevnadsanalys i Python

Hur konstruerar man en Kaplan-Meier-överlevnadskurva?

Steg 2: Beräkna $d_i$, $n_i$ och $\big(1-\frac{d_i}{n_i}\big)$ för varje $t_i$

$t_i$
2, 2+
3
5, 5+
Överlevnadsanalys i Python

Hur konstruerar man en Kaplan-Meier-överlevnadskurva?

Steg 2: Beräkna $d_i$, $n_i$ och $\big(1-\frac{d_i}{n_i}\big)$ för varje $t_i$

$t_i$ $d_i$
2, 2+ 1
3 1
5, 5+ 1
Överlevnadsanalys i Python

Hur konstruerar man en Kaplan-Meier-överlevnadskurva?

Steg 2: Beräkna $d_i$, $n_i$ och $\big(1-\frac{d_i}{n_i}\big)$ för varje $t_i$

$t_i$ $d_i$ $n_i$
2, 2+ 1 5
3 1 3
5, 5+ 1 2
Överlevnadsanalys i Python

Hur konstruerar man en Kaplan-Meier-överlevnadskurva?

Steg 2: Beräkna $d_i$, $n_i$ och $\big(1-\frac{d_i}{n_i}\big)$ för varje $t_i$

$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$
Överlevnadsanalys i Python

Hur konstruerar man en Kaplan-Meier-överlevnadskurva?

Steg 3: Multiplicera $\big(1-\frac{d_i}{n_i}\big)$ med $\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)$ för varje $t_i$

$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
Överlevnadsanalys i Python

Hur konstruerar man en Kaplan-Meier-överlevnadskurva?

$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-kurva från tabellen.

Överlevnadsanalys i Python

Tolka överlevnadskurvan

Kaplan-Meier-kurva från tabellen.

  • Överlevnadssannolikheterna vid varje tidpunkt mellan 0 och 5.

  • Vanlig missuppfattning: Om kurvan når 0 har inga individer överlevt.

  • Kurvan sjunker till noll om den sista observationen inte är censurerad (den faktiska händelsetidpunkten är känd).
Överlevnadsanalys i Python

Plotta Kaplan-Meier-överlevnadskurvan

from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
kmf.survival_function_.plot()
plt.show()
Överlevnadsanalys i Python

Bolåneproblemet som exempel

DataFrame-namn: mortgage_df

id duration paid_off
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()
Överlevnadsanalys i Python

Bolåneproblemet som exempel

plt.show()

Visualisering av överlevnadskurvan för bolåneproblemet.

Överlevnadsanalys i Python

Konfidensintervall för överlevnadskurvan

mortgage_kmf.plot_survival_function()
plt.show()

Visualisering av överlevnadskurvan för bolåneproblemet med konfidensintervall.

Överlevnadsanalys i Python

Varför är konfidensintervallet användbart?

  • Ett mått på hur osäkra vi är kring varje punktskattning av överlevnadssannolikheten
  • Ett brett konfidensintervall innebär större osäkerhet, ofta på grund av litet stickprov
  • Ett smalt konfidensintervall innebär mindre osäkerhet, ofta på grund av stort stickprov
Överlevnadsanalys i Python

Sätt att plotta Kaplan-Meier-överlevnadskurvan

Plotta punktskattningarna för överlevnadsfunktionen som en kontinuerlig linje.

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

Överlevnadsfunktionen plottad som en kontinuerlig linje.

Plotta överlevnadsfunktionen som en trappstegsformad linje utan konfidensintervall.

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

Överlevnadsfunktionen plottad som en trappstegsformad linje.

Överlevnadsanalys i Python

Sätt att plotta Kaplan-Meier-överlevnadskurvan

Plotta överlevnadsfunktionen som en trappstegsformad linje med konfidensintervall.

kmf.plot()
plt.show()

Överlevnadsfunktionen plottad som en trappstegsformad linje med konfidensintervall.

Ett annat sätt...

kmf.plot_survival_function()
plt.show()
Överlevnadsanalys i Python

Nu kör vi en övning!

Överlevnadsanalys i Python

Preparing Video For Download...