El objetivo de esta función es encontrar la distancia máxima entre dos supervivencias de un conjunto de datos. Para ello haremos uso de las librerias survival y survminer.
Primero creamos un objeto de la clase fit con la función survfit para relacionar las variables tenure que corresponde al tiempo de falla, Churn que corresponde al evento de fallo (en este caso si los clientes termiinan su relación con la empresa) con la categoría Dependents como se muestra a continuación:
fit <- survfit(Surv(tenure,Churn) ~ Dependents, data = datos)
Como el objeto Dependents tiene dos categprías que son si el cliente es dependiente o no,, entonces la siguiente función graficara dos supervivencias.
ggsurv<-ggsurvplot(fit, data = datos)
Ahora fijamos una probabilidad a nuestro gusto para hallar los cuantiles con respecto a ambas supervivencias. Y hallamos la diferencia entre ambos.
q<-as.vector(quantile(fit,probs = 1-quant))
dif<-max(unlist(q$lower))-min(unlist(q))
Procedemos a graficar
ggsurv$plot<-ggsurv$plot+
geom_segment(aes(x = 0, y = quant, xend = max(unlist(q$lower)), yend = quant),
linetype = "solid", size = 1)+ #linea horizontal
geom_segment(aes(x = min(unlist(q)), y = 0, xend = min(unlist(q)), yend =quant),
linetype = "dashed", size = 0.5)+ #linea vertical 1
geom_segment(aes(x = max(unlist(q$lower)), y = 0, xend = max(unlist(q$lower)), yend =quant),
linetype = "dashed", size = 0.5)+
geom_text(x=(min(unlist(q))+max(unlist(q$lower)))/2,y=0.85, label= paste(dif))
ggsurv
Ahora cabe aclarar un detalle, la función arrojara la distancia máxima entre dos supervivencias fijando una probabilidad, pues no tiene ningún sentido hallar distancias entre cuantiles de distintas probabilidades. Así podemos comparar la diferencia de tiempo entre las fallas de dos estratos. Por último la función queda de la siguiente forma:
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("survival")
## Loading required package: survival
library("survminer")
## Loading required package: ggplot2
## Loading required package: ggpubr
## Loading required package: magrittr
datos <- read.csv("WA_Fn-UseC_-Telco-Customer-Churn.csv")
datos$Churn <- datos$Churn %>% as.factor() #Trata a la variable Churn como un factor
datos$Churn <- ifelse(datos$Churn == "Yes", 1, 0) #Si no hago esto la funcion ggsurvplot NO lee Churn
quant=0.80
maxd<-function(datos,quant){
fit <- survfit(Surv(tenure,Churn) ~ Dependents, data = datos)
ggsurv<-ggsurvplot(fit, data = datos)
q<-as.vector(quantile(fit,probs = 1-quant))
dif<-max(unlist(q$lower))-min(unlist(q))
ggsurv$plot<-ggsurv$plot+
geom_segment(aes(x = 0, y = quant, xend = max(unlist(q$lower)), yend = quant),
linetype = "solid", size = 1)+ #linea horizontal
geom_segment(aes(x = min(unlist(q)), y = 0, xend = min(unlist(q)), yend =quant),
linetype = "dashed", size = 0.5)+ #linea vertical 1
geom_segment(aes(x = max(unlist(q$lower)), y = 0, xend = max(unlist(q$lower)), yend =quant),
linetype = "dashed", size = 0.5)+
geom_text(x=(min(unlist(q))+max(unlist(q$lower)))/2,y=0.85, label= paste(dif))
ggsurv
}
maxd(datos,quant)