Visualizando seu modelo de Kaplan-Meier

Análise de Sobrevivência em Python

Shae Wang

Senior Data Scientist

Como construir uma curva de sobrevivência de Kaplan-Meier?

Dados de exemplo com $n=5$:

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

Passo 1: Ordene os dados em ordem crescente. Em empates, dados censurados vêm depois dos não censurados.

Passo 2: Para cada $t_i$, calcule $d_i$, $n_i$ e $\big(1-\frac{d_i}{n_i}\big)$

Passo 3: Para cada $t_i$, multiplique $\big(1-\frac{d_i}{n_i}\big)$ por $\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)$

Análise de Sobrevivência em Python

Como construir uma curva de sobrevivência de Kaplan-Meier?

Passo 1: Coloque as durações em ordem crescente. Em empates, dados censurados vêm depois dos não censurados.

duration
2
5+
3
5
2+

Use o sinal "+" para indicar censura: 2, 5+, 3, 5, 2+

Análise de Sobrevivência em Python

Como construir uma curva de sobrevivência de Kaplan-Meier?

Passo 1: Coloque as durações em ordem crescente. Em empates, dados censurados vêm depois dos não censurados.

$t_i$
2, 2+
3
5, 5+
Análise de Sobrevivência em Python

Como construir uma curva de sobrevivência de Kaplan-Meier?

Passo 2: Para cada $t_i$, calcule $d_i$, $n_i$ e $\big(1-\frac{d_i}{n_i}\big)$

$t_i$
2, 2+
3
5, 5+
Análise de Sobrevivência em Python

Como construir uma curva de sobrevivência de Kaplan-Meier?

Passo 2: Para cada $t_i$, calcule $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
Análise de Sobrevivência em Python

Como construir uma curva de sobrevivência de Kaplan-Meier?

Passo 2: Para cada $t_i$, calcule $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
Análise de Sobrevivência em Python

Como construir uma curva de sobrevivência de Kaplan-Meier?

Passo 2: Para cada $t_i$, calcule $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$
Análise de Sobrevivência em Python

Como construir uma curva de sobrevivência de Kaplan-Meier?

Passo 3: Para cada $t_i$, multiplique $\big(1-\frac{d_i}{n_i}\big)$ por $\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
Análise de Sobrevivência em Python

Como construir uma curva de sobrevivência de 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 de Kaplan-Meier a partir da tabela.

Análise de Sobrevivência em Python

Interpretando a curva de sobrevivência

Curva de Kaplan-Meier a partir da tabela.

  • As probabilidades de sobrevivência em cada tempo entre 0 e 5.

  • Equívoco comum: se a curva vai a 0, ninguém sobreviveu.

  • A curva cai a zero se a última observação não for censurada (duração real do evento conhecida).
Análise de Sobrevivência em Python

Plotando a curva de sobrevivência de Kaplan-Meier

from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
kmf.survival_function_.plot()
plt.show()
Análise de Sobrevivência em Python

Exemplo do problema de hipoteca

Nome do 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()
Análise de Sobrevivência em Python

Exemplo do problema de hipoteca

plt.show()

Visualização da curva de sobrevivência do problema de hipoteca.

Análise de Sobrevivência em Python

Intervalo de confiança da curva de sobrevivência

mortgage_kmf.plot_survival_function()
plt.show()

Visualização da curva de sobrevivência do problema de hipoteca com intervalo de confiança.

Análise de Sobrevivência em Python

Por que o intervalo de confiança é útil?

  • Uma forma de quantificar a incerteza em cada estimativa pontual das probabilidades de sobrevivência
  • Um intervalo de confiança amplo indica menos certeza, muitas vezes por amostra pequena
  • Um intervalo de confiança estreito indica mais certeza, muitas vezes por amostra grande
Análise de Sobrevivência em Python

Maneiras de plotar a curva de sobrevivência de Kaplan-Meier

Trace as estimativas pontuais da função de sobrevivência como uma linha contínua.

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

Gráfico da função de sobrevivência como linha contínua.

Trace a função de sobrevivência como linha em degraus, sem intervalo de confiança.

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

Gráfico da função de sobrevivência como linha em degraus.

Análise de Sobrevivência em Python

Maneiras de plotar a curva de sobrevivência de Kaplan-Meier

Trace a função de sobrevivência como linha em degraus com intervalo de confiança.

kmf.plot()
plt.show()

Gráfico da função de sobrevivência como linha em degraus com intervalo de confiança.

Outra forma...

kmf.plot_survival_function()
plt.show()
Análise de Sobrevivência em Python

Vamos praticar!

Análise de Sobrevivência em Python

Preparing Video For Download...