Visualizzare il tuo modello di Kaplan-Meier

Analisi di sopravvivenza in Python

Shae Wang

Senior Data Scientist

Come costruire una curva di sopravvivenza di Kaplan-Meier?

Dati di esempio con $n=5$:

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

Passo 1: Ordina i dati in modo crescente. Se ci sono pareggi, i dati censurati vanno dopo quelli non censurati.

Passo 2: Per ogni $t_i$, calcola $d_i$, $n_i$ e $\big(1-\frac{d_i}{n_i}\big)$

Passo 3: Per ogni $t_i$, moltiplica $\big(1-\frac{d_i}{n_i}\big)$ per $\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)$

Analisi di sopravvivenza in Python

Come costruire una curva di sopravvivenza di Kaplan-Meier?

Passo 1: Ordina le durate in modo crescente. Se ci sono pareggi, i dati censurati vanno dopo quelli non censurati.

duration
2
5+
3
5
2+

Usa il segno "+" per indicare i dati censurati: 2, 5+, 3, 5, 2+

Analisi di sopravvivenza in Python

Come costruire una curva di sopravvivenza di Kaplan-Meier?

Passo 1: Ordina le durate in modo crescente. Se ci sono pareggi, i dati censurati vanno dopo quelli non censurati.

$t_i$
2, 2+
3
5, 5+
Analisi di sopravvivenza in Python

Come costruire una curva di sopravvivenza di Kaplan-Meier?

Passo 2: Per ogni $t_i$, calcola $d_i$, $n_i$ e $\big(1-\frac{d_i}{n_i}\big)$

$t_i$
2, 2+
3
5, 5+
Analisi di sopravvivenza in Python

Come costruire una curva di sopravvivenza di Kaplan-Meier?

Passo 2: Per ogni $t_i$, calcola $d_i$, $n_i$ e $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$
2, 2+ 1
3 1
5, 5+ 1
Analisi di sopravvivenza in Python

Come costruire una curva di sopravvivenza di Kaplan-Meier?

Passo 2: Per ogni $t_i$, calcola $d_i$, $n_i$ e $\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
Analisi di sopravvivenza in Python

Come costruire una curva di sopravvivenza di Kaplan-Meier?

Passo 2: Per ogni $t_i$, calcola $d_i$, $n_i$ e $\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$
Analisi di sopravvivenza in Python

Come costruire una curva di sopravvivenza di Kaplan-Meier?

Passo 3: Per ogni $t_i$, moltiplica $\big(1-\frac{d_i}{n_i}\big)$ per $\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
Analisi di sopravvivenza in Python

Come costruire una curva di sopravvivenza di 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

Curva di Kaplan-Meier dalla tabella.

Analisi di sopravvivenza in Python

Interpretare la curva di sopravvivenza

Curva di Kaplan-Meier dalla tabella.

  • Le probabilità di sopravvivenza a ogni tempo tra 0 e 5.

  • Fraintendimento comune: se la curva va a 0, nessun soggetto è sopravvissuto.

  • La curva scende a zero se l’ultima osservazione non è censurata (la durata dell’evento è nota).
Analisi di sopravvivenza in Python

Tracciare la curva di sopravvivenza di Kaplan-Meier

from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt

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

Esempio del problema del mutuo

Nome 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()
Analisi di sopravvivenza in Python

Esempio del problema del mutuo

plt.show()

Visualizzazione della curva di sopravvivenza del problema del mutuo.

Analisi di sopravvivenza in Python

Intervallo di confidenza della curva di sopravvivenza

mortgage_kmf.plot_survival_function()
plt.show()

Visualizzazione della curva di sopravvivenza del problema del mutuo con intervallo di confidenza.

Analisi di sopravvivenza in Python

Perché è utile l’intervallo di confidenza?

  • Un modo per quantificare l’incertezza su ogni stima puntuale delle probabilità di sopravvivenza
  • Un ampio intervallo di confidenza indica minore certezza, spesso per campione piccolo
  • Un intervallo di confidenza stretto indica maggiore certezza, spesso per campione grande
Analisi di sopravvivenza in Python

Modi per tracciare la curva di sopravvivenza di Kaplan-Meier

Traccia le stime puntuali della funzione di sopravvivenza come linea continua.

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

Grafico della funzione di sopravvivenza come linea continua.

Traccia la funzione di sopravvivenza come linea a gradini senza intervallo di confidenza.

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

Grafico della funzione di sopravvivenza come linea a gradini.

Analisi di sopravvivenza in Python

Modi per tracciare la curva di sopravvivenza di Kaplan-Meier

Traccia la funzione di sopravvivenza come linea a gradini con l’intervallo di confidenza.

kmf.plot()
plt.show()

Grafico della funzione di sopravvivenza come linea a gradini con intervallo di confidenza.

Un altro modo...

kmf.plot_survival_function()
plt.show()
Analisi di sopravvivenza in Python

Esercitiamoci!

Analisi di sopravvivenza in Python

Preparing Video For Download...