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