Trực quan hóa mô hình Kaplan–Meier

Phân tích sống sót bằng Python

Shae Wang

Senior Data Scientist

Cách xây dựng đường cong sống sót Kaplan–Meier?

Dữ liệu ví dụ với $n=5$:

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

Bước 1: Sắp xếp tăng dần. Nếu trùng, quan sát kiểm duyệt xếp sau quan sát không kiểm duyệt.

Bước 2: Với mỗi $t_i$, tính $d_i$, $n_i$ và $\big(1-\frac{d_i}{n_i}\big)$

Bước 3: Với mỗi $t_i$, nhân $\big(1-\frac{d_i}{n_i}\big)$ với $\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)$

Phân tích sống sót bằng Python

Cách xây dựng đường cong sống sót Kaplan–Meier?

Bước 1: Sắp xếp thời lượng tăng dần. Nếu trùng, quan sát kiểm duyệt xếp sau quan sát không kiểm duyệt.

duration
2
5+
3
5
2+

Dùng dấu "+" để chỉ dữ liệu kiểm duyệt: 2, 5+, 3, 5, 2+

Phân tích sống sót bằng Python

Cách xây dựng đường cong sống sót Kaplan–Meier?

Bước 1: Sắp xếp thời điểm tăng dần. Nếu trùng, quan sát kiểm duyệt xếp sau quan sát không kiểm duyệt.

$t_i$
2, 2+
3
5, 5+
Phân tích sống sót bằng Python

Cách xây dựng đường cong sống sót Kaplan–Meier?

Bước 2: Với mỗi $t_i$, tính $d_i$, $n_i$ và $\big(1-\frac{d_i}{n_i}\big)$

$t_i$
2, 2+
3
5, 5+
Phân tích sống sót bằng Python

Cách xây dựng đường cong sống sót Kaplan–Meier?

Bước 2: Với mỗi $t_i$, tính $d_i$, $n_i$ và $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$
2, 2+ 1
3 1
5, 5+ 1
Phân tích sống sót bằng Python

Cách xây dựng đường cong sống sót Kaplan–Meier?

Bước 2: Với mỗi $t_i$, tính $d_i$, $n_i$ và $\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
Phân tích sống sót bằng Python

Cách xây dựng đường cong sống sót Kaplan–Meier?

Bước 2: Với mỗi $t_i$, tính $d_i$, $n_i$ và $\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$
Phân tích sống sót bằng Python

Cách xây dựng đường cong sống sót Kaplan–Meier?

Bước 3: Với mỗi $t_i$, nhân $\big(1-\frac{d_i}{n_i}\big)$ với $\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
Phân tích sống sót bằng Python

Cách xây dựng đường cong sống sót 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

Đường cong Kaplan–Meier từ bảng.

Phân tích sống sót bằng Python

Diễn giải đường cong sống sót

Đường cong Kaplan–Meier từ bảng.

  • Xác suất sống sót tại mỗi thời điểm từ 0 đến 5.

  • Hiểu sai thường gặp: Nếu đường về 0, không ai sống sót.

  • Đường sẽ về 0 nếu quan sát cuối không bị kiểm duyệt (biết chính xác thời gian sự kiện).
Phân tích sống sót bằng Python

Vẽ đường cong sống sót Kaplan–Meier

from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
kmf.survival_function_.plot()
plt.show()
Phân tích sống sót bằng Python

Ví dụ bài toán thế chấp

Tên 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()
Phân tích sống sót bằng Python

Ví dụ bài toán thế chấp

plt.show()

Minh họa đường cong sống sót cho bài toán thế chấp.

Phân tích sống sót bằng Python

Khoảng tin cậy của đường cong sống sót

mortgage_kmf.plot_survival_function()
plt.show()

Minh họa đường cong sống sót với khoảng tin cậy cho bài toán thế chấp.

Phân tích sống sót bằng Python

Vì sao khoảng tin cậy hữu ích?

  • Cách định lượng độ bất định của từng ước lượng điểm xác suất sống sót
  • Khoảng tin cậy rộng nghĩa là kém chắc chắn hơn, thường do cỡ mẫu nhỏ
  • Khoảng tin cậy hẹp nghĩa là chắc chắn hơn, thường do cỡ mẫu lớn
Phân tích sống sót bằng Python

Các cách vẽ đường cong sống sót Kaplan–Meier

Vẽ ước lượng điểm của hàm sống sót dưới dạng đường liên tục.

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

Biểu đồ hàm sống sót dạng đường liên tục.

Vẽ hàm sống sót dạng bậc thang, không có khoảng tin cậy.

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

Biểu đồ hàm sống sót dạng bậc thang.

Phân tích sống sót bằng Python

Các cách vẽ đường cong sống sót Kaplan–Meier

Vẽ hàm sống sót dạng bậc thang kèm khoảng tin cậy.

kmf.plot()
plt.show()

Biểu đồ hàm sống sót dạng bậc thang kèm khoảng tin cậy.

Một cách khác...

kmf.plot_survival_function()
plt.show()
Phân tích sống sót bằng Python

Ayo berlatih!

Phân tích sống sót bằng Python

Preparing Video For Download...