Tests GT simplifié sur les résidus de Schoenfeld

Author

Marc Thevenin

Published

November 9, 2022

Important

Attention il ne s’agit pas du test actuellement implémenté dans la nouvelle version de survival (v3) qui, malheureusement, lui a substitué la version dite “exacte”. Le programme de la fonction du test simplifié est néanmoins facilement récupérable et exécutable. lien.

Je continue de préconiser l’utilisation de cette version non “exact” du test, reproductible avec les autres applications statistiques (Stata,Sas,Python).

Soit les données suivantes, avec t la variable de durées, Y la variable de censure et X la seule et unique covariable.

\(t_i\) \(Y_i\) \(X_i\)
1 1 1
2 0 0
3 0 0
4 1 1
5 1 1
6 1 0
7 0 1
test = data.frame(time=  c(1,2,3,4,5,6,7),
                    Y=c(1,0,0,1,1,1,0),
                    X=     c(1,0,0,1,1,0,1))

Estimation du modèle de Cox:

library(survival)
fit = coxph(formula = Surv(time, Y) ~ X, data=test)
fit
Call:
coxph(formula = Surv(time, Y) ~ X, data = test)

    coef exp(coef) se(coef)    z     p
X 0.6217    1.8622   1.1723 0.53 0.596

Likelihood ratio test=0.31  on 1 df, p=0.5797
n= 7, number of events= 4 

Calcul des résidus brut (si et seulement si \(Y=1\)) dans le cas d’une seule covariable avec \(b\) égal à 0.62:

\[rs_{i}=X_{i}- \sum_{j\in R_i}X_{i}\frac{e^{0.62\times X}}{\sum_{j\in R_i}e^{0.62\times X}}= X_{i} - E(X_{j\in R_i})\] Il y a ici 4 résidus à calculer, pour \(t=(1,4,5,6)\)

Résidus pour \(t=1\)

Résidus pour \(t=4\)

Résidus pour \(t=5\)

Résidus pour \(t=6\)

Les résidus “standardisés”, ou plutôt scaled residuals (je cale sur une traduction correcte en français) sont égaux à:

\[sr_i = b + nd \times Var(b) \times r_i\] Avec \(nd= \sum Y_i\)

Avec \(g(t_i)\) une fonction de la durée (\(g(t_i)=t_i\), \(g(t_i)=1-KM(t_i)\)…) et \(\overline{g(t)}\) sa valeur moyenne, la statistique du test score simplifié pour une covariable est égale à :

\[\frac{[\sum_i(g(t_i) - \overline{g(t_i)}\times sr_i)]^2}{nd \times Var(b) \times (\sum_i(g(t_i) - \overline{g(t_i)})^2}\] Et suis un \(\chi^2\) à 1 degré de liberté.

Avec \(\overline{g(t_i)}=t_i\), le calcul de la statistique de test est:

#source("D:/D/Marc/SMS/FORMATIONS/analyse_duree/cox.zphold/cox.zphold.R")

source("https://raw.githubusercontent.com/mthevenin/analyse_duree/master/cox.zphold/cox.zphold.R")
cox.zphold(fit, transform="identity")
     rho chisq     p
X -0.688  1.49 0.222