Paquetería

require(survival)
## Loading required package: survival
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(survminer)
## Loading required package: survminer
## Loading required package: ggplot2
## Loading required package: ggpubr
## Loading required package: magrittr
data("veteran")
data("heart")
data("diabetic")

Función

dist <- function(datos,time,status,trat){
  
  km_model_trt<-survfit(Surv(time, status)~trat, data=datos)
  
  time1 <- km_model_trt$time[1:km_model_trt$strata[1]]
  surv1 <- km_model_trt$surv[1:km_model_trt$strata[1]]
  time2 <- km_model_trt$time[(km_model_trt$strata[1]+1):(km_model_trt$strata[1]+km_model_trt$strata[2])]
  surv2 <- km_model_trt$surv[(km_model_trt$strata[1]+1):(km_model_trt$strata[1]+km_model_trt$strata[2])]
  
  a <- approxfun(surv1,time1)
  b <- approxfun(surv2,time2)
  
  df <- data.frame(surv = surv1,time1 = a(surv1), time2 = b(surv1),distanc=abs(a(surv1)-b(surv1)))
  df <- df[!is.na(df$distanc),]
  disM <- max(df$distanc)
  d <- df[df$distanc==disM,]
  
  grafica <- ggplot(df) +
    geom_line(aes(surv,time1, color="1"), size=1) +
    geom_line(aes(surv,time2, color="2"), size=1) +
    ggtitle(paste("Distancia máxima: \n" ,as.character(round(disM,2)))) +
    scale_color_manual(name="Tratamiento",values=c('#4E85DE','#EDA023')) +
    geom_hline(yintercept = d$time1, linetype="dashed") +
    geom_hline(yintercept = d$time2, linetype="dashed") +
    geom_vline(xintercept = d$surv, linetype="dashed") +
    labs(x="Supervivencia", y="Tiempo") +
    coord_flip()
  grafica
}

Ejemplos

dist(veteran,veteran$time,veteran$status,veteran$trt)

dist(heart,heart$year,heart$event,heart$transplant)

dist(diabetic,diabetic$time,diabetic$status,diabetic$trt)