Actualización : Perdón por otra actualización, pero he encontrado algunas posibles soluciones con polinomios fraccionales y el paquete de riesgos de la competencia con el que necesito ayuda.
El problema
No puedo encontrar una manera fácil de hacer un análisis de coeficiente dependiente del tiempo en R. Quiero poder tomar el coeficiente de mis variables y hacerlo en un coeficiente dependiente del tiempo (no variable) y luego trazar la variación en función del tiempo:
Soluciones posibles
1) División del conjunto de datos
He mirado este ejemplo (Se parte 2 de la sesión de laboratorio) pero la creación de un conjunto de datos separado parece complicado, computacionalmente costoso y no muy intuitivo ...
2) Modelos de rango reducido: el paquete coxvc
El paquete coxvc proporciona una forma elegante de abordar el problema: aquí hay un manual . El problema es que el autor ya no está desarrollando el paquete (la última versión es desde el 23/05/2007), después de una conversación por correo electrónico he conseguido que el paquete funcione pero una ejecución tardó 5 horas en mi conjunto de datos (140 000 entradas) y proporciona estimaciones extremas al final del período. Puede encontrar un paquete ligeramente actualizado aquí : en su mayoría, acabo de actualizar la función de trazado.
Puede ser solo una cuestión de ajustes, pero dado que el software no proporciona fácilmente intervalos de confianza y el proceso lleva mucho tiempo, estoy buscando otras soluciones en este momento.
3) El paquete timereg
El impresionante paquete timereg también aborda el problema, pero no estoy seguro de cómo usarlo y no me da una trama fluida.
4) Modelo de tiempo fraccional polinómico (FPT)
Encontré la excelente disertación de Anika Buchholz sobre "Evaluación de los efectos a largo plazo de las terapias y los factores pronósticos a largo plazo" que hace un excelente trabajo cubriendo diferentes modelos. Ella concluye que el FPT propuesto por Sauerbrei et al. Parece ser el más apropiado para los coeficientes dependientes del tiempo:
FPT es muy bueno para detectar efectos que varían en el tiempo, mientras que el enfoque de Rango reducido da como resultado modelos demasiado complejos, ya que no incluye la selección de efectos que varían en el tiempo.
La investigación parece muy completa, pero está un poco fuera de mi alcance. También me pregunto un poco ya que ella trabaja con Sauerbrei. Sin embargo, parece sólido y supongo que el análisis podría hacerse con el paquete mfp, pero no estoy seguro de cómo.
5) El paquete cmprsk
He estado pensando en hacer mi análisis de riesgo de la competencia, pero los cálculos han llevado mucho tiempo, así que cambié a la regresión de Cox regular. El crr tiene una opción para las covariables dependientes del tiempo:
....
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
....
Existe el ejemplo cuadrático, pero no entiendo exactamente dónde aparece el tiempo y no estoy seguro de cómo mostrarlo. También he mirado el archivo test.R pero el ejemplo allí es básicamente el mismo ...
Mi código de ejemplo
Aquí hay un ejemplo que uso para probar las diferentes posibilidades
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))
El código da como resultado estos gráficos: Comparación de diferentes configuraciones para coxvc y de los gráficos de coxvc y timecox . Supongo que los resultados están bien, pero no creo que pueda explicar el gráfico de timecox, parece complejo ...
Mis preguntas (actuales)
- ¿Cómo hago el análisis FPT en R?
- ¿Cómo uso la covariable de tiempo en cmprsk?
- ¿Cómo trazo el resultado (preferiblemente con intervalos de confianza)?
y~x
y~x*(t+t^2)-t
y~x+x:t+x:t^2