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é qu'un événement survienne à un moment donné, compte tenu de la survie jusque-là.

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

L'hypothèse des risques proportionnels : les risques des 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 définis par des 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 des risques proportionnels entre deux courbes de survie

Analyse de survie en Python

Le modèle de risques proportionnels de Cox

Selon 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, qui varie 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, qui NE varie PAS dans le temps.

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

Données requises pour le modèle Cox PH

  • Durées : durée de vie/durée des individus.
  • Événements : si l'événement a été 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 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 aux autres propriétés pour voir le sommaire du modèle, les covariables, les coefficients, prédire, tracer, 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 plus 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 : $e^{coef}$
    • Une hausse d'une unité de interest à partir de sa valeur médiane → le risque change d'un facteur $e^{0.31}=1.37$, soit une hausse de 37 % par rapport au risque de base.
Analyse de survie en Python

Passons à la pratique !

Analyse de survie en Python

Preparing Video For Download...