Vizualizace modelu Kaplan-Meier

Survival Analysis in Python

Shae Wang

Senior Data Scientist

Jak sestavit křivku přežití Kaplan-Meier?

Ukázková data s $n=5$:

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

Krok 1: Seřaďte data vzestupně. Při shodě následují cenzorovaná pozorování za necenzorovanými.

Krok 2: Pro každé $t_i$ vypočítejte $d_i$, $n_i$ a $\big(1-\frac{d_i}{n_i}\big)$

Krok 3: Pro každé $t_i$ vynásobte $\big(1-\frac{d_i}{n_i}\big)$ hodnotami $\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)$

Survival Analysis in Python

Jak sestavit křivku přežití Kaplan-Meier?

Krok 1: Seřaďte doby trvání vzestupně. Při shodě následují cenzorovaná data za necenzorovanými.

duration
2
5+
3
5
2+

Znaménko "+" označuje cenzorovaná data: 2, 5+, 3, 5, 2+

Survival Analysis in Python

Jak sestavit křivku přežití Kaplan-Meier?

Krok 1: Seřaďte doby trvání vzestupně. Při shodě následují cenzorovaná data za necenzorovanými.

$t_i$
2, 2+
3
5, 5+
Survival Analysis in Python

Jak sestavit křivku přežití Kaplan-Meier?

Krok 2: Pro každé $t_i$ vypočítejte $d_i$, $n_i$ a $\big(1-\frac{d_i}{n_i}\big)$

$t_i$
2, 2+
3
5, 5+
Survival Analysis in Python

Jak sestavit křivku přežití Kaplan-Meier?

Krok 2: Pro každé $t_i$ vypočítejte $d_i$, $n_i$ a $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$
2, 2+ 1
3 1
5, 5+ 1
Survival Analysis in Python

Jak sestavit křivku přežití Kaplan-Meier?

Krok 2: Pro každé $t_i$ vypočítejte $d_i$, $n_i$ a $\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
Survival Analysis in Python

Jak sestavit křivku přežití Kaplan-Meier?

Krok 2: Pro každé $t_i$ vypočítejte $d_i$, $n_i$ a $\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$
Survival Analysis in Python

Jak sestavit křivku přežití Kaplan-Meier?

Krok 3: Pro každé $t_i$ vynásobte $\big(1-\frac{d_i}{n_i}\big)$ hodnotami $\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
Survival Analysis in Python

Jak sestavit křivku přežití Kaplan-Meier?

$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

Křivka Kaplan-Meier sestavená z tabulky.

Survival Analysis in Python

Interpretace křivky přežití

Křivka Kaplan-Meier sestavená z tabulky.

  • Pravděpodobnosti přežití v každém čase mezi 0 a 5.

  • Častá mylná představa: pokud křivka klesne na 0, nepřežil nikdo.

  • Křivka klesne na nulu, pokud poslední pozorování není cenzorováno (doba události je známá).
Survival Analysis in Python

Vykreslení křivky přežití Kaplan-Meier

from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt

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

Příklad: problém hypotéky

Název DataFrame: 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()
Survival Analysis in Python

Příklad: problém hypotéky

plt.show()

Vizualizace křivky přežití pro problém hypotéky.

Survival Analysis in Python

Interval spolehlivosti křivky přežití

mortgage_kmf.plot_survival_function()
plt.show()

Vizualizace křivky přežití pro problém hypotéky s intervalem spolehlivosti.

Survival Analysis in Python

Proč je interval spolehlivosti užitečný?

  • Vyjadřuje míru nejistoty u každého bodového odhadu pravděpodobnosti přežití
  • Široký interval spolehlivosti znamená větší nejistotu, obvykle při malém vzorku
  • Úzký interval spolehlivosti znamená menší nejistotu, obvykle při velkém vzorku
Survival Analysis in Python

Způsoby vykreslení křivky přežití Kaplan-Meier

Bodové odhady funkce přežití jako spojitá čára.

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

Graf funkce přežití jako spojitá čára.

Funkce přežití jako schodová čára bez intervalu spolehlivosti.

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

Graf funkce přežití jako schodová čára.

Survival Analysis in Python

Způsoby vykreslení křivky přežití Kaplan-Meier

Funkce přežití jako schodová čára s intervalem spolehlivosti.

kmf.plot()
plt.show()

Graf funkce přežití jako schodová čára s intervalem spolehlivosti.

Další možnost...

kmf.plot_survival_function()
plt.show()
Survival Analysis in Python

Pojďme si procvičit!

Survival Analysis in Python

Preparing Video For Download...