2016-07-28 4 views
1

Brève introduction:Quelle est la valeur par défaut de la fonction de transformation temporelle dans la commande coxph?

modèle des risques proportionnels de Cox A (PH) peut être estimée avec la fonction coxph du paquet survival. Une exigence évidente pour obtenir des résultats raisonnables à partir de ce type de modèle est que les risques sont proportionnels, c'est-à-dire qu'ils sont constants dans le temps. Si ce n'est pas le cas pour une certaine variable, elle peut être résolue en faisant varier le coefficient de cette variable temps. (Maintenant c'est techniquement un modèle Cox étendu.) Ceci est fait en ajoutant le tt() à cette variable et en spécifiant une fonction au fil du temps (voir vignette("timedep", package = "survival") page 19+).

Question:

Quelle fonction est utilisée si tt() est utilisé sans spécifier une fonction?

Voici un exemple:

library(survival) 
data(lung) 
cox_model <- coxph(Surv(time, status) ~ age + sex + ph.karno, data = lung) 
cox_model_ph <- cox.zph(cox_model) 
#    rho chisq  p 
# age  0.00701 0.00871 0.92566 
# sex  0.12249 2.42336 0.11954 
# ph.karno 0.23135 8.24167 0.00409 
# GLOBAL  NA 11.54750 0.00911 

Nous voyons que ph.karno constitue une violation de l'hypothèse de PH (petite valeur p), il faut donc ajouter tt():

cox_model_tt <- coxph(Surv(time, status) ~ age + sex + tt(ph.karno), data = lung) 
cox_model_tt_ph <- cox.zph(cox_model_tt) 
#     rho chisq  p 
# age   -0.00907 0.0142 0.9052 
# sex   0.12844 2.7270 0.0987 
# tt(ph.karno) 0.11643 2.3846 0.1225 
# GLOBAL    NA 5.0220 0.1702 

maintenant l'hypothèse de PH est satisfaite, mais Je n'ai aucune idée de ce que la fonction tt() a réellement fait. J'ai essayé une fonction utilisée commune telle que tt = function(x, t, ...) x*t, tt = function(x, t, ...) x + t, tt = function(x, t, ...) x*log(t). Mais tous ont donné des résultats différents (et ont été incapables de réparer la violation de PH).

Toute aide est appréciée.

Répondre

2

En regardant à travers le code pour coxph Je pense que si je l'ai trouvé. Vous avez offert aucune valeur pour le « paramètre tt', donc je pense que cela est exécuté:

if (is.null(tt)) { 
      tt <- function(x, time, riskset, weights) { 
       obrien <- function(x) { 
        r <- rank(x) 
        (r - 0.5)/(0.5 + length(r) - r) 
       } 
       unlist(tapply(x, riskset, obrien)) 
      } 

Et voici une confirmation expérimentale:

> cox_model_OB <- coxph(Surv(time, status) ~ age + sex + tt(ph.karno), data = lung, tt= function(x, time, riskset, weights) { 
+     obrien <- function(x) { 
+     r <- rank(x) 
+     (r - 0.5)/(0.5 + length(r) - r) 
+     } 
+     unlist(tapply(x, riskset, obrien)) 
+    } 
+) 
> (cox_model_tt_ph <- cox.zph(cox_model_tt)) 
        rho chisq  p 
age   -0.00907 0.0142 0.9052 
sex   0.12844 2.7270 0.0987 
tt(ph.karno) 0.11643 2.3846 0.1225 
GLOBAL    NA 5.0220 0.1702 

Je me demande si cela était intentionnel. Je suspecte qu'il reste du code pendant une session de développement. Je soupçonne que Therneau a l'intention que l'échec d'offrir une fonction «tt» devrait jeter au moins un avertissement, mais aurait probablement préféré une erreur. Donc c'était une supposition et j'ai trouvé que j'avais tort en cherchant à travers les vignettes et de trouver que c'était prévu: "Cela dépend du fait que les arguments d'entrée à tt() sont classés par le numéro d'événement. Cette fonction est utilisée par défaut si aucun argument tt n'est présent dans l'appel coxph, mais il y a des termes tt dans la formule du modèle (ce qui m'a permis de déprécier la fonction de survobrien). réf: page 23 de «Utilisation des covariables dépendant du temps et des coefficients dépendant du temps dans le modèle de Cox» à partir de la page d'aide de l'ensemble de survie actuel Les liens vers la page Vignettes.

+0

dans sa vignette (https://cran.r-project.org/web/packages/survival/vignettes/timedep.pdf, pg.19), Terry montre la différence entre une transformation temporelle incorrecte (par exemple en utilisant ' I() ') et une transformation temporelle correcte (par exemple en utilisant le paramètre' tt'). En regardant à travers le code source 'coxph' (https://github.com/cran/survival/blob/master/R/coxph.R), je peux voir d'un point de vue mathématique ce qui se passe avec' tt'. Mais pouvez-vous élaborer sur la raison conceptuelle pour laquelle 'tt' est requis pour une vraie transformation temporelle? Je vous remercie. – NickBraunagel

+0

Je pense que votre commentaire/question serait plus approprié pour CrossValidated.com. Je ne pense pas que ce soit vraiment une question de codage. –

+0

Gotcha. Transfert sur – NickBraunagel