require(survival)
## Loading required package: survival
require(survminer)
## Loading required package: survminer
## Loading required package: ggplot2
## Loading required package: ggpubr
## Loading required package: magrittr
require(dplyr)
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
require(flexsurv)
## Loading required package: flexsurv
require(ggplot2)

Objetivo: Crear una función que mida distancias (en tiempo) entre curvas de supervivencia para dos subgrupos/estratos.

La función que se presenta a continuación, está formada por:

datos: Representa la base que será cargada desde R.

time:Representa el vector de tiempos de falla.

stat: Representa censuras y fallas, toma los valores 0 y 1.

cas: Variable para hallar supervivencia.

j: Elementos en el primer estrato o subgrupo.

k: Elementos en el segundo estrato o subgrupo.

distancia_maxima<- function(datos, time, stat, cas, j, k){
  km_model_trt <- surv_fit(Surv(time,stat)~cas, datos)
  ggsurvplot(km_model_trt)
  
  j<-km_model_trt$strata[1]
  k<-km_model_trt$strata[2]
  times1 <- km_model_trt$time[1:j]
  surv1 <- km_model_trt$surv[1:j]
  times2 <- km_model_trt$time[(j+1):(j+k)]
  surv2 <- km_model_trt$surv[(j+1):(j+k)]
  tabla <- data.frame(Tiempo=times1)
  tabla2<-data.frame(Tiempo=times2)
  
  
  a <- approxfun(times1, surv1)
  b <- approxfun(times2, surv2)
  a_1 <- approxfun(surv1, times1)
  b_1 <- approxfun(surv2, times2)
  
  v <- seq(0.1,0.95, length=1000)
  v1 <- a_1(v)
  v2 <- b_1(v)
  diferencia <- abs(v1-v2)
  tmaximo= max(diferencia)
  
  for (j in 1:1000){
    if (diferencia[j] == tmaximo){
      t <- j
      break
    }else{
      t<- 0
    }
  }
  y1 <- v[t]
  x1 <- a_1(y1)
  x2 <- b_1(y1)
  
 max_distance<- ggplot(data=tabla,aes(x = times1, y= a(times1), color="1")) + geom_line() + 
    geom_line(data=tabla2,aes(x=times2, y=b(times2), color="2")) +
    scale_colour_manual(name="Strata", values=c("1"="forestgreen", "2"="darkorchid4"))+
    geom_hline(yintercept = v[t],linetype="solid", size=1)+ 
    geom_vline(xintercept = x1,linetype="dotdash", size=1)+
    geom_vline(xintercept = x2,linetype="dotdash", size=1)+
    ggtitle("Distancia maxima entre curvas es: ", tmaximo)+
    labs(x = "Time", y = "Survival Probability")+
    theme_bw()+ 
    theme(
      panel.background = element_rect(fill = "wheat"),
      panel.grid.minor = element_line(linetype = "solid"))
  max_distance
}

Veteran

Ensayo aleatorio de dos regímenes de tratamiento para el cáncer de pulmón. Este es un conjunto de datos de análisis de supervivencia estándar.

trt: 1 = estándar, 2 = prueba

data("veteran")
distancia_maxima(veteran, veteran$time, veteran$status,veteran$trt, 61, 53)
## 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

mgus

Los 241 pacientes diagnosticados con gammapatía monoclonal de importancia indeterminada en la Clínica Mayo antes del 1 de enero de 1971 y seguidos hasta 1992. El interés radica en la posible transformación de mgus hacia un cáncer de las células plasmáticas, la muerte por otras causas actuando como Un riesgo competitivo.

Sex: 1=male, 2=female

data("mgus")
distancia_maxima(mgus, mgus$futime, mgus$death, mgus$sex ,103,135)
## 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

Lung

Supervivencia en pacientes con cáncer de pulmón avanzado del North Central Cancer Treatment Group. Los puntajes de rendimiento califican qué tan bien el paciente puede realizar las actividades diarias habituales.

sex: Masculino = 1, Femenino = 2

data("lung")
distancia_maxima(lung, lung$time, lung$status, lung$sex ,119,87)
## 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