Ajuster le modèle de risques proportionnels de Cox

Analyse de survie en Python

Shae Wang

Senior Data Scientist

Fonction de risque et taux de risque

Fonction de risque $h(t)$ : décrit la probabilité que l'événement survienne à un instant donné, sachant la survie jusqu'à cet instant.

Taux de risque : taux instantané de survenue de l'événement

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

La fonction de risque $h(t)$ et la fonction de survie $S(t)$ se déduisent l'une de l'autre.

Analyse de survie en Python

L'hypothèse des risques proportionnels

Hypothèse des risques proportionnels : les risques de tous les individus sont proportionnels entre eux.

Pour l'individu $A$ et l'individu $B$ : $$h_A(t)=ch_B(t)$$

  1. Il existe une fonction de risque de base et les autres risques sont obtenus par facteurs d'échelle.
  2. L'effet relatif sur la survie associé à une variable ne varie pas dans le temps (invariant dans le temps).

Comparaison de l'hypothèse de risques proportionnels entre deux courbes de survie

Analyse de survie en Python

Le modèle de risques proportionnels de Cox

D'après l'hypothèse des risques proportionnels : $$h(t|x)=b_0(t)exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$$

$b_0(t)$ : fonction de risque de base au niveau population, variable dans le temps.

$exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$ : relation linéaire entre les covariables et le log du risque, NE varie PAS dans le temps.

  • Le modèle de risques proportionnels de Cox (Cox PH) est un modèle de régression qui met en relation des covariables avec le temps jusqu'à l'événement/durée.
Analyse de survie en Python

Données requises pour le modèle Cox PH

  • Durées : la durée de vie/durée des individus.
  • Événements : si l'événement est observé (1=Oui, 0=Non, censuré).
    • S'il n'est pas fourni, le modèle suppose qu'aucun sujet n'est censuré.
  • Covariables : variables continues ou catégorielles encodées en one‑hot pour la régression.
Analyse de survie en Python

Ajuster le modèle Cox PH

  1. Importer et instancier la classe CoxPHFitter
    from lifelines import CoxPHFitter
    coxph = CoxPHFitter()
    
  2. Appeler .fit() pour ajuster l'estimateur aux données
    coxph.fit(df, duration_col, event_col)
    
  3. Accéder à d'autres propriétés : résumé du modèle, covariables, coefficients, prédiction, tracés, etc.
    coxph.summary()
    coxph.predict()
    
Analyse de survie en Python

Exemple de modèle Cox PH

  • DataFrame : mortgage_df
  • Covariables :
    • house
    • principal
    • interest
    • property_tax
    • credit_score
  • Autres colonnes : duration, paid_off
from lifelines import CoxPHFitter

coxph = CoxPHFitter() coxph.fit(df=mortgage_df, duration_col="duration", event_col="paid_off")
Analyse de survie en Python

Modèle personnalisé

Filtrer le DataFrame :

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

Utiliser le paramètre formula :

coxph.fit(df=mortgage_df,
          duration_col="duration",
          event_col="paid_off",
          formula="principal + interest 
          + property_tax + credit_score")
  • Plus pratique et clair, mais ne passe pas à l'échelle avec un grand nombre de covariables.
Analyse de survie en Python

Interpréter les coefficients

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
  • Rapport de risque (hazard ratio) : $e^{coef}$
    • Une augmentation d'une unité de interest par rapport à sa médiane → le risque change d'un facteur $e^{0.31}=1.37$, soit +37 % par rapport au risque de base.
Analyse de survie en Python

Passons à la pratique !

Analyse de survie en Python

Preparing Video For Download...