Het Cox Proportional Hazards‑model fitten

Survivalanalyse in Python

Shae Wang

Senior Data Scientist

Hazardfunctie en hazardrate

Hazardfunctie $h(t)$: kans dat het event optreedt op tijd t, gegeven overleving tot dan.

Hazardrate: het instantane tempo waarop het event optreedt

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

De hazardfunctie $h(t)$ en de overlevingsfunctie $S(t)$ zijn wederzijds afleidbaar.

Survivalanalyse in Python

De proportional hazards‑aanname

De proportional hazards‑aanname: alle individuele hazards zijn proportioneel aan elkaar.

Voor individu $A$ en $B$: $$h_A(t)=c h_B(t)$$

  1. Er is een baseline‑hazardfunctie; andere hazards krijgen schaalfactoren.
  2. De relatieve overlevingsimpact van een variabele verandert niet in de tijd (tijdinvariant).

Vergelijking van de proportional-hazards‑aanname tussen twee overlevingscurves

Survivalanalyse in Python

Het Cox Proportional Hazards‑model

Gebaseerd op de proportional hazards‑aanname: $$h(t|x)=b_0(t)exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$$

$b_0(t)$: baseline‑hazard op populatieniveau, verandert met de tijd.

$exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$: lineair verband tussen covariaten en de log‑hazard, verandert NIET met de tijd.

  • Het Cox Proportional Hazards (Cox PH)‑model is een regressiemodel dat covariaten regresseert op time‑to‑event/duratie.
Survivalanalyse in Python

Datavereisten voor Cox PH‑model

  • Durations: levensduur/duratie van individuen.
  • Events: of het event is geobserveerd (1=Ja, 0=Nee, gecensureerd).
    • Als niet opgegeven, gaat het model uit van geen censuur.
  • Covariaten: continue of one‑hot gecodeerde categorische variabelen voor de regressie.
Survivalanalyse in Python

Het Cox PH‑model fitten

  1. Importeer en maak een CoxPHFitter aan
    from lifelines import CoxPHFitter
    coxph = CoxPHFitter()
    
  2. Roep .fit() aan om het model te trainen
    coxph.fit(df, duration_col, event_col)
    
  3. Bekijk eigenschappen: samenvatting, covariaten, coëfficiënten, predict, plot, etc.
    coxph.summary()
    coxph.predict()
    
Survivalanalyse in Python

Voorbeeld Cox PH‑model

  • DataFrame: mortgage_df
  • Covariaten:
    • house
    • principal
    • interest
    • property_tax
    • credit_score
  • Andere kolommen: duration, paid_off
from lifelines import CoxPHFitter

coxph = CoxPHFitter() coxph.fit(df=mortgage_df, duration_col="duration", event_col="paid_off")
Survivalanalyse in Python

Aangepast model

Filter het DataFrame:

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

Gebruik de parameter formula:

coxph.fit(df=mortgage_df,
          duration_col="duration",
          event_col="paid_off",
          formula="principal + interest 
          + property_tax + credit_score")
  • Handiger en duidelijker, maar schaalt niet bij veel covariaten.
Survivalanalyse in Python

Coëfficiënten interpreteren

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
  • Hazard ratio: $e^{coef}$
    • Één eenheid stijging in interest vanaf de mediaan -> de hazard verandert met factor $e^{0.31}=1.37$, dus 37% hoger dan de baseline.
Survivalanalyse in Python

Laten we oefenen!

Survivalanalyse in Python

Preparing Video For Download...