UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO
Modelos de supervivencia y series de tiempo
Marisol Arreola
El objetivo de esta práctica es crear una función que mida la distancia máxima en tiempo de dos curvas de supervivencia. La función maxsurv recibe los siguientes parámetros:\ - df: Corresponde al DataFrame a estudiar con datos de supervivencia. \ - ColTime: El indice de la columna que representa el tiempo en df\ - ColStatus: El indice de la columna que representa las fallas en df\ -Col: El índice de la columna que representa los subgrupos a estudiar, lo cual se realizará mediante parejas.
require(plotly)
require(survival)
require(KMsurv)
require(dplyr)
require(flexsurv)
require(survminer)
maxsurv<-function(df, ColStatus,ColTime,Col){
status<-df[,ColStatus]
time<-df[,ColTime]
trt<-df[,Col]
km_model<-surv_fit(Surv(time, status)~trt, df)
ggsurvplot(km_model)
#primer grupo
times1<-km_model$time[1:km_model$strata[1]] #tiempos de la primera curva de sup
surv1<-km_model$surv[1:km_model$strata[1]] #Probabilidades
#segundo grupo
times2<-km_model$time[(1+km_model$strata[1]):(km_model$strata[1]+km_model$strata[2])]
surv2<-km_model$surv[(1+km_model$strata[1]):(km_model$strata[1]+km_model$strata[2])]
#Nos da la funcion de la mejor aproximacion continua
a<-approxfun(surv1, times1)#Mejor aproximacion continua
b<-approxfun(surv2, times2)
f<-function(x){abs(a(x)-b(x))}
c<-optimize(f, interval = c(0,1), maximum = TRUE)
d<-optimize(f, interval = c(0,1))
plot(a(surv1),surv1, col=3, type="l", main=paste("Max distance between curves:", c[2]), xlab="Time", ylab="Survival")
lines(b(surv1),surv1, col=2)
lines(c(min(a(c[1]), b(c[1])), max(a(c[1]), b(c[1]))), c(c[1], c[1]))
lines(c(a(c[1]), a(c[1])), c(-.10, c[1]), lty=2)
lines(c(b(c[1]), b(c[1])), c(-.10, c[1]), lty=2)
# Add a legend to the plot
legend("right", legend=c("Subgrupo 1", "Subgrupo 2"),
col=c(3,2), lty=1:1, cex=0.8,
box.lty=2, box.lwd=2, box.col="green")
}
Ejemplo 1: Dataframe que representa un experimento con dos tratamientos. La columna 3 representa el tiempo del fallo, la columna 4 el estado y la columna 1 el tipo de tratamiento
maxsurv(veteran, 4, 3, 1)
## Warning in regularize.values(x, y, ties, missing(ties)): collapsing to
## unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties)): collapsing to
## unique 'x' values
Ejemplo 2: Data frame que representa un experimento con 48 ratas, las cuales fueron inyectadas con droga o placebo. Tenemos que la columna 4 corresponde al tiempo que ocurrio la falla, la columna 6 corresponde a una columna binaria dependiendo si ocurrio el evento o no(muerte) y la columna 2 corresponde al tratamiento: droga o control.
maxsurv(rats2, 6,4,2)
## Warning in regularize.values(x, y, ties, missing(ties)): collapsing to
## unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties)): collapsing to
## unique 'x' values
## Warning in optimize(f, interval = c(0, 1)): NA/Inf replaced by maximum
## positive value
Ejemplo 3. Data frame que estudia cancer en la vejiga, tenemos que la columna 7 corresponde al tiempo ocurrió la falla, la columna 8 corresponde a una columna binaria dependiendo si ocurrió el evento o no y la columna 2 corresponde al tratamiento: Placebo, Pyridoxine o Thiotepa, sin embargo, en esta función estudiaremos sólo los dos primeros.
maxsurv(bladder1, 8,7,2)
## Warning in Surv(time, status): Invalid status value, converted to NA
## Warning in regularize.values(x, y, ties, missing(ties)): collapsing to
## unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties)): collapsing to
## unique 'x' values