Stima di Kaplan-Meier

Analisi di sopravvivenza in Python

Shae Wang

Senior Data Scientist

Cos'è lo stimatore di Kaplan-Meier?

Statistica non parametrica che stima la funzione di sopravvivenza di dati di tempo-all'evento.

  • Conosciuta anche come
    • stimatore product-limit
    • stimatore K-M
  • Non parametrico: costruisce una curva di sopravvivenza dai dati raccolti senza assumere una distribuzione sottostante
Analisi di sopravvivenza in Python

L'intuizione matematica

Definizioni:

  • $t_i$: un tempo di durata
  • $d_i$: numero di eventi avvenuti al tempo $t_i$
  • $n_i$: numero di individui noti per essere sopravvissuti fino a $t_i$

 

La funzione di sopravvivenza $S(t)$ si stima con: $$S(t)=\prod_{i:t_i\leq t}\bigg(1-\frac{d_i}{n_i}\bigg)$$

Analisi di sopravvivenza in Python

Perché si chiama stimatore product-limit?

Supponiamo eventi a 3 tempi: 1, 2, 3

Tasso di sopravvivenza per $t=2$: $$S(t=2)=\bigg(1-\frac{d_1}{n_1}\bigg)*\bigg(1-\frac{d_2}{n_2}\bigg)$$

Tasso di sopravvivenza per $t=3$: $$S(t=3)=S(t=2)*\bigg(1-\frac{d_3}{n_3}\bigg)$$

Il tasso di sopravvivenza al tempo t è il prodotto della probabilità di sopravvivere al tempo t e a ciascun tempo precedente.

Analisi di sopravvivenza in Python

Assunzioni da ricordare

  • Eventi non ambigui: l'evento d'interesse avviene in un momento chiaramente definito.
  • Probabilità di sopravvivenza confrontabili per tutti: non dipendono da quando si entra nello studio.
  • Censura non informativa: le osservazioni censurate hanno le stesse prospettive di sopravvivenza di quelle seguite fino alla fine.
Analisi di sopravvivenza in Python

Stimatore di Kaplan-Meier con lifelines

from lifelines import KaplanMeierFitter

KaplanMeierFitter: una classe della libreria lifelines

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
Analisi di sopravvivenza in Python

L'esempio del mutuo

Nome DataFrame: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
Analisi di sopravvivenza in Python

L'esempio 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
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>
Analisi di sopravvivenza in Python

Usare lo stimatore di Kaplan-Meier

Qual è la durata mediana di un mutuo pendente?

print(mortgage_kmf.median_survival_time_)
4.0

Qual è la probabilità che un mutuo resti pendente ogni anno dopo l'avvio?

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

Usare lo stimatore di Kaplan-Meier

Qual è la probabilità che un mutuo non sia estinto entro il 34° anno dall'avvio?

mortgage_kmf.predict(34)
0.037998
Analisi di sopravvivenza in Python

Vantaggi e limiti

Vantaggi
  • Interpretazione intuitiva delle probabilità di sopravvivenza.
  • Flessibile: si applica a qualsiasi dato tempo-all'evento.
  • Di solito il primo modello da provare sui dati tempo-all'evento.
Limiti
  • La curva di sopravvivenza non è liscia.
  • Se ≥50% dei dati è censurato, .median_survival_time_ non si può calcolare.
  • Poco efficace per analizzare l'effetto delle covariate sulla funzione di sopravvivenza.
Analisi di sopravvivenza in Python

Ayo berlatih!

Analisi di sopravvivenza in Python

Preparing Video For Download...