Aggiornamento : mi scuso per un altro aggiornamento, ma ho trovato alcune possibili soluzioni con polinomi frazionari e il pacchetto di rischi della concorrenza di cui ho bisogno di aiuto.
Il problema
Non riesco a trovare un modo semplice per fare un'analisi del coefficiente dipendente dal tempo è in R. Voglio essere in grado di prendere il mio coefficiente di variabili e farlo in un coefficiente dipendente dal tempo (non variabile) e quindi tracciare la variazione rispetto al tempo:
Possibili soluzioni
1) Suddivisione del set di dati
Ho visto questo esempio (vedi parte 2 della sessione di laboratorio) ma la creazione di un set di dati separato sembra complicata, computazionalmente costosa e non molto intuitiva ...
2) Modelli a rango ridotto - Il pacchetto coxvc
Il pacchetto coxvc fornisce un modo elegante per affrontare il problema: ecco un manuale . Il problema è che l'autore non sta più sviluppando il pacchetto (l'ultima versione è dal 23/05/2007), dopo alcune conversazioni via e-mail ho fatto funzionare il pacchetto ma una corsa ha richiesto 5 ore sul mio set di dati (140.000 voci) e fornisce stime estreme alla fine del periodo. Puoi trovare un pacchetto leggermente aggiornato qui - ho principalmente aggiornato la funzione di trama.
Potrebbe essere solo una questione di messa a punto, ma poiché il software non fornisce facilmente intervalli di confidenza e il processo richiede così tanto tempo, sto cercando ora altre soluzioni.
3) Il pacchetto timereg
Anche l'impressionante pacchetto timereg risolve il problema, ma non sono sicuro di come usarlo e non mi dà una trama fluida.
4) Modello di tempo polinomiale frazionario (FPT)
Ho trovato l'eccellente tesi di Anika Buchholz su "Valutazione degli effetti a lungo termine di terapie e fattori prognostici variabili nel tempo" che svolge un eccellente lavoro su diversi modelli. Conclude che l'FPT proposto da Sauerbrei et al sembra essere il più appropriato per i coefficienti dipendenti dal tempo:
FPT è molto bravo a rilevare effetti che variano nel tempo, mentre l'approccio del Rango Ridotto produce modelli troppo complessi, poiché non include la selezione di effetti che variano nel tempo.
La ricerca sembra molto completa ma per me è leggermente fuori portata. Mi chiedo anche un po 'dal momento che lei lavora con Sauerbrei. Sembra comunque sano e suppongo che l'analisi potrebbe essere fatta con il pacchetto mfp ma non sono sicuro di come.
5) Il pacchetto cmprsk
Ho pensato di fare la mia analisi del rischio concorrente, ma i calcoli sono stati dispendiosi in termini di tempo, quindi sono passato alla regressione normale del cox. Il crr ha anche un'opzione per le covariate dipendenti dal tempo:
....
cov2 matrix of covariates that will be multiplied
by functions of time; if used, often these
covariates would also appear in cov1 to give
a prop hazards effect plus a time interaction
....
C'è un esempio quadratico, ma non seguo esattamente dove appare il tempo e non sono sicuro di come visualizzarlo. Ho anche guardato il file test.R ma l'esempio è sostanzialmente lo stesso ...
Il mio codice di esempio
Ecco un esempio che utilizzo per testare le diverse possibilità
library("survival")
library("timereg")
data(sTRACE)
# Basic cox regression
surv <- with(sTRACE, Surv(time/365,status==9))
fit1 <- coxph(surv~age+sex+diabetes+chf+vf, data=sTRACE)
check <- cox.zph(fit1)
print(check)
plot(check, resid=F)
# vf seems to be the most time varying
######################################
# Do the analysis with the code from #
# the example that I've found #
######################################
# Split the dataset according to the splitSurv() from prof. Wesley O. Johnson
# http://anson.ucdavis.edu/~johnson/st222/lab8/splitSurv.ssc
new_split_dataset = splitSuv(sTRACE$time/365, sTRACE$status==9, sTRACE[, grep("(age|sex|diabetes|chf|vf)", names(sTRACE))])
surv2 <- with(new_split_dataset, Surv(start, stop, event))
fit2 <- coxph(surv2~age+sex+diabetes+chf+I(pspline(stop)*vf), data=new_split_dataset)
print(fit2)
######################################
# Do the analysis by just straifying #
######################################
fit3 <- coxph(surv~age+sex+diabetes+chf+strata(vf), data=sTRACE)
print(fit3)
# High computational cost!
# The price for 259 events
sum((sTRACE$status==9)*1)
# ~240 times larger dataset!
NROW(new_split_dataset)/NROW(sTRACE)
########################################
# Do the analysis with the coxvc and #
# the timecox from the timereg library #
########################################
Ft_1 <- cbind(rep(1,nrow(sTRACE)),bs(sTRACE$time/365,df=3))
fit_coxvc1 <- coxvc(surv~vf+sex, Ft_1, rank=2, data=sTRACE)
fit_coxvc2 <- coxvc(surv~vf+sex, Ft_1, rank=1, data=sTRACE)
Ft_3 <- cbind(rep(1,nrow(sTRACE)),bs(sTRACE$time/365,df=5))
fit_coxvc3 <- coxvc(surv~vf+sex, Ft_3, rank=2, data=sTRACE)
layout(matrix(1:3, ncol=1))
my_plotcoxvc <- function(fit, fun="effects"){
plotcoxvc(fit,fun=fun,xlab='time in years', ylim=c(-1,1), legend_x=.010)
abline(0,0, lty=2, col=rgb(.5,.5,.5,.5))
title(paste("B-spline =", NCOL(fit$Ftime)-1, "df and rank =", fit$rank))
}
my_plotcoxvc(fit_coxvc1)
my_plotcoxvc(fit_coxvc2)
my_plotcoxvc(fit_coxvc3)
# Next group
my_plotcoxvc(fit_coxvc1)
fit_timecox1<-timecox(surv~sex + vf, data=sTRACE)
plot(fit_timecox1, xlab="time in years", specific.comps=c(2,3))
I risultati di codice in questi grafici: Confronto tra diverse impostazioni per coxvc e della coxvc e le timecox trame. Immagino che i risultati siano ok ma non credo che sarò in grado di spiegare il grafico di timecox - sembra complesso ...
Le mie (attuali) domande
- Come faccio l'analisi FPT in R?
- Come posso usare la covariata del tempo in cmprsk?
- Come posso tracciare il risultato (preferibilmente con intervalli di confidenza)?
y~x
y~x*(t+t^2)-t
y~x+x:t+x:t^2