Actualización : Lo siento por otra actualización, pero he encontrado algunas posibles soluciones con polinomios fraccionarios y el riesgo de competencia-paquete que necesito un poco de ayuda con.
El problema
No puedo encontrar una manera fácil de hacer un análisis de coeficiente dependiente del tiempo es en R. Quiero ser capaz de tomar mi coeficiente de variables y convertirlo en un coeficiente dependiente del tiempo (no variable) y luego trazar la variación contra el tiempo:
$\beta_{my\_variable}=\beta_0+\beta_1*t+\beta_2*t^2...$
Posibles soluciones
1) Dividir el conjunto de datos
He mirado este ejemplo (véase la parte 2 de la sesión de laboratorio), pero la creación de un conjunto de datos independiente parece complicada, costosa desde el punto de vista informático y poco intuitiva...
2) Modelos de rango reducido - El paquete coxvc
En paquete coxvc ofrece una forma elegante de resolver el problema. manual . El problema es que el autor ya no está desarrollando el paquete (la última versión es del 23/05/2007), después de algunas conversaciones 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 da estimaciones extremas al final del periodo. Puede encontrar una versión ligeramente actualizada paquete aquí - Principalmente he actualizado la función de trazado.
Puede que sólo sea cuestión de retoques, pero como el programa no proporciona fácilmente intervalos de confianza y el proceso lleva tanto tiempo, ahora mismo estoy buscando otras soluciones.
3) El paquete timereg
El impresionante paquete timereg también resuelve el problema, pero no estoy seguro de cómo usarlo y no me da una trama fluida.
4) Modelo de tiempo polinómico fraccionario (FPT)
Encontré la excelente disertación de Anika Buchholz sobre "Evaluación de los efectos a largo plazo variables en el tiempo de las terapias y los factores pronósticos" que hace un excelente trabajo cubriendo diferentes modelos. Concluye que 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 variables en el tiempo, mientras que el enfoque de Rango Reducido da lugar a modelos demasiado complejos, ya que no incluye la selección de efectos variables 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 resulta que trabaja con Sauerbrei. Parece sólido sin embargo 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 competitivo, pero los cálculos me han llevado demasiado tiempo, así que he optado por la regresión de Cox normal. El crr tiene una opción para 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
....
Hay un ejemplo cuadrático, pero no entiendo muy bien dónde aparece el tiempo y no estoy seguro de cómo mostrarlo. También he mirado el archivo test.R pero el ejemplo es básicamente el mismo...
Mi código de ejemplo
He aquí un ejemplo que utilizo para probar las distintas 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 la coxvc y el timecox tramas. Supongo que los resultados están bien, pero no creo que sea capaz de explicar el gráfico timecox, parece demasiado complejo...
Mis preguntas (actuales)
- ¿Cómo hago el análisis FPT en R?
- ¿Cómo se utiliza la covariable temporal en cmprsk?
- ¿Cómo puedo representar gráficamente el resultado (preferiblemente con intervalos de confianza)?