Quelles sont les options du modèle de régression à aléas proportionnels lorsque les résidus de Schoenfeld ne sont pas bons?


15

Je fais une régression des risques proportionnels de Cox dans R using coxph, qui comprend de nombreuses variables. Les résidus de Martingale ont fière allure, et les résidus de Schoenfeld sont excellents pour PRESQUE toutes les variables. Il existe trois variables dont les résidus de Schoenfeld ne sont pas plats, et la nature des variables est telle qu'il est logique qu'elles puissent varier avec le temps.

Ce sont des variables qui ne m'intéressent pas vraiment, donc en faire des strates serait bien. Cependant, tous sont des variables continues, pas des variables catégorielles. Je considère donc que les strates ne sont pas une route viable *. J'ai essayé de construire des interactions entre les variables et le temps, comme décrit ici , mais nous obtenons l'erreur:

  In fitter(X, Y, strats, offset, init, control, weights = weights,  :
  Ran out of iterations and did not converge

Je travaille avec près de 1000 points de données et je travaille avec une demi-douzaine de variables avec de nombreux facteurs chacun, donc on a l'impression de repousser les limites de la façon dont ces données peuvent être découpées et découpées. Malheureusement, tous les modèles plus simples que j'ai essayés avec moins de variables incluses sont clairement pires (ex. Les résidus de Schoenfeld sont plus mielleux pour plus de variables).

Quelles sont mes options? Comme je ne me soucie pas de ces variables mal comportées, j'aimerais simplement ignorer leur sortie, mais je soupçonne que ce n'est pas une interprétation valide!

* Un est continu, un est un entier avec une plage de plus de 100 et un est un entier avec une plage de 6. Peut-être le binning?


2
Qu'en est-il de l'utilisation d'un modèle Cox étendu avec une interaction temporelle pour les variables dépendantes du temps?
kirk

Qu'en est-il de considérer l'option de covariables à diffusion temporelle (comme -tvc- dans Stata)?
Carlo Lazzaro

Réponses:


1

La manière la plus élégante serait d'utiliser un modèle de survie paramétrique (Gompertz, Weibull, Exponential, ...) si vous avez une idée de ce à quoi pourrait ressembler l'aléa de référence.

Si vous voulez rester avec votre modèle Cox, vous pouvez adopter un modèle cox étendu avec des coefficients dépendants du temps . Gardez à l'esprit qu'il existe également des modèles cox étendus avec des covariats dépendant du temps - ceux-ci ne résolvent pas votre problème!

Pour R, voir ici: http://cran.r-project.org/web/packages/survival/vignettes/timedep.pdf


1

Quelques idées -

1) Essayez l'approche de modélisation Royston-Parmar, par exemple http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0047804 et ses références. Nous avons obtenu des résultats utiles avec.

2) Le centrage et la standardisation des variables continues peuvent être utiles numériquement.

3) Dans de nombreux modèles avec des facteurs avec beaucoup de niveaux, il y a quelques niveaux où il n'y a pratiquement pas de données. La fusion des niveaux pour les supprimer, mais sur la base de bons critères de fond, peut être très utile.

Bonne chance!


1

Si l'utilisation d'une interaction avec l'heure sous-jacente ne fonctionne pas, vous pouvez essayer les fonctions pas à pas (pour plus d'informations, voir vignett e 2016 de Therneau ).

Les fonctions de pas sont stratifiées en coefficients spécifiques à des intervalles spécifiques. Après avoir vu vos résidus de Schoenfeld tracés pour les covariables problématiques (c.-à-d. plot(cox.zph(model.coxph))), Vous devez vérifier visuellement où les lignes changent d'angle. Essayez de trouver un ou deux points où la version bêta semble nettement différente. Supposons que cela se soit produit aux temps 10 et 20. Nous allons donc créer des données à l'aide survSplit()du survivalpackage qui créera un bloc de données pour le groupe de modèles de données spécifique aux moments susmentionnés:

step.data <- survSplit(Surv(t1, t2, event) ~ 
                      x1 + x2,
                      data = data, cut = c(10, 20), episode = "tgroup")

Ensuite, exécutez le cox.phmodèle avec la stratafonction en tant qu'interactions avec les variables problématiques (comme pour l'interaction avec le temps, n'ajoutez pas d'effet principal pour le temps ou les strates):

> model.coxph2 <- coxph(Surv(t1, t2, event) ~ 
                          x1 + x2:strata(tgroup), data = step.data)

Et cela devrait aider.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.