En el análisis de la supervivencia es de interés conocer las distancias entre los tiempos de supervivencia para dos modelos que expliquen el mismo fenómeno pero tengan un tratamiento o estrato distinto. Esto permite comparar la supervivencia en dos grupos distintos.
Esta función realiza un gráfico que permite observar la distancia máxima entre dos curvas de supervivencia que pertenecen al mismo estudio pero que son diferentes en cuanto al tratamiento o estrato de los individuos. Se grafican dos supervivencias, una para cada tratamiento y se obtiene la distancia máxima de las diferencias de los tiempos para una supervivencia mayor a \(S(i)\). \(S(i)\) es dada por el usuario y representa el nivel de supervivencia el cual tiene interés de estudiar.
Parámetros Los parámetros que recibe la función son:
max_dist <- function(base,datos,status,trt,s_i){
km_model_trt<-survfit(Surv(datos, status)~trt, data=base)
#Separa supervivencia segun tratamiento (estrato)
n0<-km_model_trt$strata[1]
n1<-km_model_trt$strata[2]
t1<-km_model_trt$time[1:n0]
s1<-km_model_trt$surv[1:n0]
t2<-km_model_trt$time[(n0+1):(n0+n1)]
s2<-km_model_trt$surv[(n0+1):(n0+n1)]
#Aproxima funcion
a<-approxfun(s1,t1)
b<-approxfun(s2,t2)
df1<-data.frame(s=s1,ta1=a(s1), ta2=b(s1))
df1$z2<-abs(df1$ta1-df1$ta2)
#Elimina NA's y busca maximo segun probabilidad de interes (mayor a 0.5)
df1 <- df1[!is.na(df1$z2),]
df<-df1[df1$s>s_i,]
q<-max(df$z2)
d<-df1[df1$z2==q,]; q<-round(q,4);q1<-as.character(q)
#Crea grafico
p<-ggplot(df1)+geom_line(aes(s,ta1, color="1"), size=1)+
geom_line(aes(s,ta2, color="2"), size=1)+ggtitle(paste("Max distance between curves",q1))+
geom_vline(xintercept = d$s, linetype="dashed", color = "gray50", size=0.7)+
labs(x="Survival", y="Time")+coord_flip()+
scale_colour_manual(name="Treatment", values=c("1"="hotpink1", "2"="steelblue3"))+
geom_hline(yintercept = d$ta1, linetype="dashed", color = "gray50", size=0.7)+
geom_hline(yintercept = d$ta2, linetype="dashed", color = "gray50", size=0.7)+
labs(x="Survival", y="Time")+coord_flip()
p
}
A continuación se presentan tres ejemplos para comprender el funcionamiento de la función.
Ejemplo 1
La base de datos contiene resultados parciales de un estudio de coagulación con láser para el tratamiento de retinopatía diabética. Cada paciente recibió o no de manera aleatoria el tratamiento de láser.
data("diabetic")
max_dist(diabetic,diabetic$time,diabetic$status,diabetic$trt,0.7)
Ejemplo 2
Este conjunto de datos simulados se basa en un estudio de leucemia mieloide aguda.
data("myeloid")
max_dist(myeloid,myeloid$futime,myeloid$death,myeloid$trt,0.55)
Ejemplo 3
Estudio aeatorio de dos regímenes de tratamiento para el cáncer de pulmón. Es un conjunto de datos de análisis de supervivencia estándar.
data("veteran")
max_dist(veteran,veteran$time,veteran$status,veteran$trt,0.25)