Quais são as opções no modelo de regressão de risco proporcional quando os resíduos de Schoenfeld não são bons?

15

Estou fazendo uma regressão de riscos proporcionais de Cox em R usando coxph, que inclui muitas variáveis. Os resíduos de Martingale parecem ótimos, e os resíduos de Schoenfeld são ótimos para QUASE todas as variáveis. Existem três variáveis ​​cujos resíduos de Schoenfeld não são planos e a natureza das variáveis ​​é tal que faz sentido que elas possam variar com o tempo.

Essas são variáveis ​​nas quais não estou realmente interessado, portanto, seria bom fazê-las. No entanto, todos eles são variáveis ​​contínuas, não variáveis ​​categóricas. Portanto, percebo que os estratos não são uma rota viável *. Eu tentei criar interações entre as variáveis ​​e o tempo, conforme descrito aqui , mas obtemos o erro:

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

Estou trabalhando com quase 1000 pontos de dados e trabalhando com meia dúzia de variáveis ​​com muitos fatores cada, então parece que estamos pressionando os limites de como esses dados podem ser fatiados e cortados em cubos. Infelizmente, todos os modelos mais simples que tentei com menos variáveis ​​incluídas são claramente piores (por exemplo, os resíduos de Schoenfeld são mais fracos para mais variáveis).

Quais são as minhas opções? Como não me importo com essas variáveis ​​mal comportadas em particular, gostaria de ignorar a saída delas, mas suspeito que não seja uma interpretação válida!

* Um é contínuo, um é um número inteiro com um intervalo superior a 100 e um é um número inteiro com um intervalo de 6. Talvez o binning?

jeffalstott
fonte
2
Que tal usar um modelo estendido de Cox com uma interação de tempo para as variáveis ​​dependentes do tempo?
Kirk
Que tal considerar a opção de covariáveis ​​que variam de tempo (como -tvc- no Stata)?
Carlo Lazzaro

Respostas:

1

A maneira mais elegante seria usar um modelo de sobrevivência paramétrico (Gompertz, Weibull, Exponential, ...) se você tiver alguma idéia de como pode ser o risco da linha de base.

Se você quiser ficar com o seu modelo Cox, poderá adotar um modelo cox estendido com coeficientes dependentes do tempo . Tenha em mente que também existem modelos cox estendidos com covariáveis ​​que dependem do tempo - isso não resolve o seu problema!

Para R, consulte aqui: http://cran.r-project.org/web/packages/survival/vignettes/timedep.pdf

Jochen
fonte
1

Duas idéias -

1) Tente a abordagem de modelagem de Royston-Parmar, por exemplo, http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0047804 e suas referências. Tivemos resultados úteis com isso.

2) Centralizar e padronizar variáveis ​​contínuas podem ser úteis numericamente.

3) Em muitos modelos com fatores com muitos níveis, existem alguns níveis em que basicamente não há dados. Mesclar níveis para removê-los, mas com base em bons critérios substantivos, pode ser muito útil.

Boa sorte!

astaines
fonte
1

Se o uso de uma interação com o tempo subjacente não funcionar, tente as funções de etapa (para obter mais informações, consulte o artigo 2016 da Therneau ).

As funções de etapa são estratificadas em coeficientes específicos em intervalos específicos. Depois de ver os resíduos de Schoenfeld plotados para as covariáveis ​​problemáticas (ie plot(cox.zph(model.coxph))), você precisa verificar visualmente onde as linhas mudam de ângulo. Tente encontrar um ou dois pontos em que a versão beta pareça marcadamente diferente. Suponha que isso ocorreu nos tempos 10 e 20. Portanto, criaremos dados usando a survSplit()partir do survivalpacote que criará um quadro de dados para o agrupamento de modelos de dados específicos nos horários mencionados acima:

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

E, em seguida, execute o cox.phmodelo com a stratafunção como interações com as variáveis ​​problemáticas (como com a interação com o tempo, não adicione um efeito principal para o tempo ou os estratos):

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

E isso deve ajudar.

Yuval Spiegler
fonte