graf_censuraD

Para el análisis de supervivencia, la funcion graf_censuraD grafica datos censurados por la derecha del tipo I y II. El código es el siguiente:

graf_censuraD(ve,vt1,tm,titulo,etiqx,etiqy,vt2){
  if(missing(vt2)){
    Surv(vt1,ve)
    set.seed(1)
    m <- data.frame(vt1,ve) %>% sample_n(tm)
    status <- as.factor(m$ve)
    ggplot(m)+
      geom_point(aes(x = 1:tm, y = m$vt1, shape = status, 
                     colour = status), size = 2, stroke = 1.1)+
      geom_point(x = 1:tm, y = rep(0,tm), shape = 16, colour = 'springgreen', size = 2)+
      scale_shape_manual(values=c(0,4,16),name = "Escala",
                         labels= c(quote(0 == censurado), quote(1 == finado)))+
      scale_color_manual(values=c('deeppink','darkorchid'),name = "Escala",
                         labels= c(quote(0 == censurado), quote(1 == finado)))+
      geom_linerange(aes(x = 1:tm, ymin = 0, ymax= m$vt1))+
      coord_cartesian(ylim = c(0,max(m$vt1)+5))+
      coord_flip()+
      labs(x= etiqx, y= etiqy, title = titulo)
  }else{
    Surv(vt1,vt2,ve)
    set.seed(2)
    m <- data.frame(vt1,vt2,ve) %>% sample_n(tm)
    ggplot(m)+
      geom_point(aes(x = 1:tm, y = m$vt2, shape = m$ve %>% as.factor(), 
                     colour = m$ve %>% as.factor()), size = 2, stroke = 1.1)+
      scale_shape_manual(values=c(0,4),name = "Escala", 
                         labels= c(quote(0 == censurado), quote(1 == finado)))+
      scale_color_manual(values=c('deeppink','darkorchid'),name = "Escala", 
                         labels= c(quote(0 == censurado), quote(1 == finado)))+
      geom_point(x = 1:tm, y = m$vt1, shape = 16, colour = 'springgreen', size = 2)+
      geom_linerange(aes(x = 1:tm, ymin = m$vt1, ymax= m$vt2))+
      coord_cartesian(ylim = c(0,max(m$vt1)+5))+
      coord_flip()+
      labs(x= etiqx, y= etiqy, title = titulo)
  }
}

Los argumentos son:

Para su funcionamiento se requieren las siguientes paqueterías.

require(survival)
require(KMsurv)
require(dplyr)
require(ggplot2)

Ejemplos

1. Empleados

Se tiene una base de datos proveniente de recursos humanos donde se ve la informacion de los trabajadores como nivel de satisfaccin, horas promedio mensuales, etcetera. Por el momento nos enfocaremos en tiempo trabajado en la compañia (time_spend_company) y se fue (left) que es una variable de tiempo y la de estatus respectivamente. Sea empleados el data frame.

empleados <- read.csv("HR_comma_sep.cvs")
graf_censuraD(empleados$left,empleados$time_spend_company,20,"Empleados","Observaciones","Tiempo (en años")

Lo que da por resultado la siguiente grafica

Observese que los puntos verdes son el punto de partida de los tiempos, es decir el tiempo inicial de todas las observaciones es cero.

2. Cateter en riñones

Se tiene la base de datos kidney incluida en la paqueteria survival. Esta base de datos representa el tiempo de reaparición de una infección al ponerle un cateter a los pacientes con problemas de riñones que usan equipo de diálisis. El cateter puede ser removido por causas ajenas a la infección, en tal caso se censuran los datos. Tiene 3 variables de los cuales nos fijamos en dos: el tiempo antes de remover el cateter (time) y si fue removido por la infección o por otras causas (delta cuyos valores son 1 y 0 respectivamente).

data("kidney")
graf_censuraD(kidney$delta,kidney$time,15,"Kidney Sample","Observaciones","Tiempo")

Se tiene una sola variable de tiempo y se quiere una muestra de 15 individuos.

3. Lista de espera para transplante de corazon

Se tiene la base de datos heart incluida en la paqueteria survival que representa la supervivencia de pacientes en la lista de espera para el programa de transplante de corazon de Stanford. Se trabaja con la sub-base de datos jasa1.

data("heart")
str(jasa1)

Tiene 8 variables, para la gráfica nos fijamos en el tiempo de inicio (start), tiempo en que acaba (stop) y el estatus (event). Esta base de datos nos da la información también si salió del estudio debido a que recibió el transplante o si fue por otra causa al comparar event y transplantlo que sería para observar datos censurados por la derecha del tipo aleatorios, sin embargo la función no grafica este tipo de observaciones. Pero si tomamos como el status el evento si salió o no de la lista entonces se escribe la funcion con las entradas siguientes.

graf_censuraD(jasa1$event,jasa1$start,20,"Tiempo en lista de espera para transplante de corazon","Observaciones","Tiempo",jasa1$stop)

Y queda la gráfica

Se puede observar que los tiempos de inicio son diferentes.