Ước lượng mô hình Cox Proportional Hazards

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

Shae Wang

Senior Data Scientist

Hàm nguy cơ và tốc độ nguy cơ

Hàm nguy cơ $h(t)$: xác suất sự kiện xảy ra tại thời điểm t, với điều kiện đã sống sót đến t.

Tốc độ nguy cơ: tốc độ tức thời xảy ra sự kiện

$$h(t)=-\frac{d}{dt}logS(t)$$

$h(t)$ và hàm sống sót $S(t)$ có thể suy ra lẫn nhau.

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

Giả định nguy cơ tỷ lệ

Giả định nguy cơ tỷ lệ: nguy cơ của mọi cá nhân tỷ lệ với nhau.

Với cá nhân $A$ và $B$: $$h_A(t)=ch_B(t)$$

  1. nguy cơ gốc và các nguy cơ khác được xác định bằng hệ số co giãn.
  2. Tác động tương đối đến sống sót của một biến không đổi theo thời gian (bất biến theo thời gian).

So sánh giả định nguy cơ tỷ lệ giữa hai đường cong sống sót

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

Mô hình Cox Proportional Hazards

Dựa trên giả định nguy cơ tỷ lệ: $$h(t|x)=b_0(t)exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$$

$b_0(t)$: nguy cơ gốc ở mức quần thể, thay đổi theo thời gian.

$exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$: quan hệ tuyến tính giữa biến đồng biến và log nguy cơ, KHÔNG đổi theo thời gian.

  • Mô hình Cox Proportional Hazards (Cox PH) là một mô hình hồi quy hồi quy các biến đồng biến lên thời gian đến sự kiện/khoảng thời gian.
Phân tích sống sót bằng Python

Yêu cầu dữ liệu cho mô hình Cox PH

  • Durations: thời gian sống/khoảng thời gian của cá nhân.
  • Events: sự kiện có được quan sát không (1=Có, 0=Không, bị kiểm duyệt).
    • Nếu không cung cấp, mô hình giả định không có đối tượng bị kiểm duyệt.
  • Covariates: biến liên tục hoặc biến phân loại mã hóa one-hot cho hồi quy.
Phân tích sống sót bằng Python

Ước lượng mô hình Cox PH

  1. Import và khởi tạo lớp CoxPHFitter
    from lifelines import CoxPHFitter
    coxph = CoxPHFitter()
    
  2. Gọi .fit() để huấn luyện mô hình với dữ liệu
    coxph.fit(df, duration_col, event_col)
    
  3. Truy cập các thuộc tính khác để xem tóm tắt, biến, hệ số, dự đoán, vẽ, v.v.
    coxph.summary()
    coxph.predict()
    
Phân tích sống sót bằng Python

Ví dụ mô hình Cox PH

  • DataFrame: mortgage_df
  • Biến đồng biến:
    • house
    • principal
    • interest
    • property_tax
    • credit_score
  • Cột khác: duration, paid_off
from lifelines import CoxPHFitter

coxph = CoxPHFitter() coxph.fit(df=mortgage_df, duration_col="duration", event_col="paid_off")
Phân tích sống sót bằng Python

Tùy chỉnh mô hình

Lọc DataFrame:

new_df = mortgage_df.loc[:, 
          mortgage_df.columns!="house"]
coxph.fit(df=new_df,
          duration_col="duration",
          event_col="paid_off")

Dùng tham số formula:

coxph.fit(df=mortgage_df,
          duration_col="duration",
          event_col="paid_off",
          formula="principal + interest 
          + property_tax + credit_score")
  • Thuận tiện, rõ ràng hơn, nhưng không mở rộng tốt khi nhiều biến đồng biến.
Phân tích sống sót bằng Python

Diễn giải hệ số

print(coxph.summary)
<lifelines.CoxPHFitter: fitted with 1808 observations, 340 censored>
                        coef  exp(coef)  se(coef)      z       p
covariate house        -0.38       0.68      0.19. -1.98    0.05
          principal    -0.06       0.94      0.02  -2.61    0.01
          interest      0.31       1.37      0.31   1.02    0.31
          property_tax -0.15       0.86      0.21  -0.71    0.48
          credit_score -0.43       0.65      0.38  -1.14.   0.26
  • Tỷ số nguy cơ (hazard ratio): $e^{coef}$
    • Tăng interest 1 đơn vị từ trung vị -> nguy cơ thay đổi theo hệ số $e^{0.31}=1.37$, tức tăng 37% so với nguy cơ gốc.
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...