Quali sono le opzioni nel modello di regressione proporzionale del rischio quando i residui di Schoenfeld non sono buoni?


15

Sto facendo una regressione dei rischi proporzionale di Cox nell'uso di R coxph, che include molte variabili. I residui di Martingale sembrano grandi, mentre i residui di Schoenfeld sono fantastici per QUASI tutte le variabili. Esistono tre variabili i cui residui di Schoenfeld non sono piatti e la natura delle variabili è tale che ha senso che possano variare nel tempo.

Queste sono variabili che non mi interessano molto, quindi renderle strati andrebbe bene. Tuttavia, tutte sono variabili continue, non variabili categoriche. Quindi percepisco gli strati come non fattibili *. Ho provato a costruire interazioni tra le variabili e il tempo, come descritto qui , ma otteniamo l'errore:

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

Sto lavorando con quasi 1000 punti dati e sto lavorando con mezza dozzina di variabili con molti fattori ciascuno, quindi sembra che stiamo spingendo i limiti di come questi dati possono essere suddivisi e tagliati a dadini. Sfortunatamente, tutti i modelli più semplici che ho provato con meno variabili incluse sono chiaramente peggiori (es. I residui di Schoenfeld sono più crumbi per più variabili).

Quali sono le mie opzioni? Dal momento che non mi interessano queste particolari variabili mal comportate, vorrei solo ignorare il loro output, ma sospetto che non sia un'interpretazione valida!

* Uno è continuo, uno è un numero intero con un intervallo di oltre 100 e uno è un numero intero con un intervallo di 6. Forse il binning?


2
Che dire dell'utilizzo di un modello Cox esteso con un'interazione temporale per le variabili dipendenti dal tempo?
Kirk,

Che ne dici di considerare l'opzione di covariate time-vaying (come -tvc- in Stata)?
Carlo Lazzaro,

Risposte:


1

Il modo più elegante sarebbe usare un modello di sopravvivenza parametrico (Gompertz, Weibull, Exponential, ...) se hai qualche idea di come potrebbe apparire il rischio di base.

Se vuoi rimanere con il tuo modello Cox puoi prendere un modello cox esteso con coefficienti dipendenti dal tempo . Tieni presente che ci sono anche modelli cox estesi con covariati dipendenti dal tempo - questi non risolvono il tuo problema!

Per R vedere qui: http://cran.r-project.org/web/packages/survival/vignettes/timedep.pdf


1

Coppia di idee -

1) Prova l'approccio alla modellazione di Royston-Parmar, ad es. Http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0047804 e riferimenti in esso. Abbiamo avuto risultati utili con esso.

2) Centrare e standardizzare le variabili continue può essere utile numericamente.

3) In molti modelli con fattori con molti livelli ci sono alcuni livelli in cui praticamente non ci sono dati. Unire i livelli per rimuoverli, ma sulla base di buoni criteri sostanziali, può essere molto utile.

In bocca al lupo!


1

Se l'utilizzo di un'interazione con il tempo sottostante non funziona, è possibile provare le funzioni di passaggio (per ulteriori informazioni, consultare la vignetta di Therneau 2016 ).

Le funzioni a gradino sono stratificate in coefficienti specifici a intervalli specifici. Dopo aver visto i tuoi residui di Schoenfeld tracciati per le covariate problematiche (cioè plot(cox.zph(model.coxph))) devi controllare visivamente dove le linee cambiano angolo. Prova a trovare uno o due punti in cui la beta sembra notevolmente diversa. Supponiamo che ciò si sia verificato ai tempi 10 e 20. Quindi creeremo i dati utilizzando survSplit()dal survivalpacchetto che creerà un frame di dati per il raggruppamento del modello di dati specifico nei tempi sopra indicati:

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

E quindi esegui il cox.phmodello con la stratafunzione come interazioni con le variabili problematiche (come nell'interazione con il tempo, non aggiungere un effetto principale per il tempo o gli strati):

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

E questo dovrebbe aiutare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.