Modèle de Weibull avec covariables

Analyse de survie en Python

Shae Wang

Senior Data Scientist

Comparer des fonctions de survie

Comparer des groupes avec l'estimateur de Kaplan-Meier :

Courbes de survie Kaplan-Meier : appartement vs maison.

Comparer des groupes avec le test du log-rank :

<lifelines.StatisticalResult: logrank_test>
 null_distribution = chi squared
degrees_of_freedom = 1
         test_name = logrank_test
 test_statistic    p  -log2(p)
           0.09 0.77      0.38

   

Q : Comment évaluer si et comment une ou plusieurs variables continues influent sur la fonction de survie ?

Analyse de survie en Python

Régression de survie

  • Méthode qui modélise les fonctions de survie avec des covariables
  • Quantifie l'effet de chaque covariable sur la fonction de survie

$$Y_i=f(X_i,\beta)$$

$$Y_i: \text{durées}, X_i: \text{covariables}$$

  • Exemples de covariables : âge, poids, pays
Analyse de survie en Python

Modèle AFT (Accelerated Failure Time)

$$\text{Population A}: S_A(t)$$

$$\text{Population B}: S_B(t)$$

$$S_A(t)=S_B(t*\lambda)$$

  • $S_B(t)$ s'accélère ou ralentit le long de $S_A(t)$ d'un facteur $\lambda$.

  • Les modèles AFT expriment cette relation d'accélération/ralentissement selon les covariables.

  • Quand une covariable passe de $a$ à $b$, le temps jusqu'à l'événement s'accélère ou ralentit selon le taux d'échec accéléré $\lambda$.
  • Exemple : $S_{dog}(t)=S_{human}(t*7)$
Analyse de survie en Python

Données pour la régression de survie

Exemple de DataFrame : mortgage_df

id property_type principal interest property_tax credit_score duration paid_off
1 house 1275 0.035 0.019 780 25 0
2 apartment 756 0.028 0.020 695 17 1
3 apartment 968 0.029 0.017 810 5 0
... ... ... ... ... ... ... ...
1000 house 1505 0.041 0.023 750 30 1
Analyse de survie en Python

Combiner Weibull et AFT : le modèle Weibull AFT

  • DataFrame : mortgage_df
  • Covariables :
    • property_type est remplacé par une variable factice :
      • house : 1 si « house », 0 si « apartment »
    • principal
    • interest
    • property_tax
    • credit_score
  1. Importer et instancier la classe WeibullAFTFitter
    from lifelines import WeibullAFTFitter
    aft = WeibullAFTFitter()
    
  2. Appeler .fit() pour ajuster l'estimateur aux données
    aft.fit(df=mortgage_df,
         duration_col="duration",
         event_col="paid_off")
    
Analyse de survie en Python

Interpréter les résultats du modèle

print(aft.summary)
<lifelines.WeibullAFTFitter: fitted with 1808 observations, 340 censored>
                      coef  exp(coef)  se(coef)      z       p
lambda_ house         0.04       1.04      0.01   0.99    0.32  
        principal    -0.03       0.97      0.22  -1.04    0.30  
        interest      0.11       1.11      0.15   1.96    0.05  
        property_tax  0.31       1.36      0.27   1.15    0.25  
        credit_score -0.16       0.85      0.14  -2.33    0.02  
        Intercept     3.99      54.06      0.41   9.52 <0.0005   
rho_    Intercept     0.34       1.40      0.08   3.80 <0.0005
Analyse de survie en Python

WeibullAFTFitter avec formule personnalisée

Utiliser formula pour gérer des covariables personnalisées :

aft.fit(df=mortgage_df,
        duration_col="duration",
        event_col="paid_off",
        formula="principal + interest * house")

Analogue au modèle linéaire avec terme d'interaction :

$\beta_1$principal$+\beta_2$interest$+\beta_3$house$+\beta_4$interest$\cdot$house

Analyse de survie en Python

Interpréter les résultats du modèle

print(aft.summary)
<lifelines.WeibullAFTFitter: fitted with 1808 observations, 340 censored>
                       coef  exp(coef)  se(coef)      z       p
lambda_ principal     -0.03       0.97      0.22  -1.04    0.30     
        interest       0.11       1.11      0.15   1.96    0.05  
        house          0.04       1.04      0.01   0.99    0.32  
        interest:house 0.06       1.06      0.14   0.42    0.64
        Intercept      3.99      54.06      0.41   9.52 <0.0005   
rho_    Intercept      0.34       1.40      0.08   3.80 <0.0005
Analyse de survie en Python

Passons à la pratique !

Analyse de survie en Python

Preparing Video For Download...