El análisis de supervivencia se basa en el estudio del tiempo, en la ocurrencia de un evento.
El tiempo de superviviencia o falla se define como el tiempo transcurrido desde el estado inicial hasta la ocurrencia de un evento dado.
Para determinar el tiempo de falla de forma precisa, hay tres requerimientos: un tiempo de origen que debe ser definido, una escala para medir el paso del tiempo que debe ser congruente al problema y finalmente, el significado de falla debe ser completamente claro. Frecuentemente la escala para medir el paso de tiempo es el tiempo reloj(tiempo real), sin embargo hay otras posibilidades, como el kilometraje en un auto o el uso operacional de un sistema.
La función que se creó para el análisis de supervivencia toma los parámetros del data frame seleccionado, donde se selecciona la columna de escala de tiempo a evaluar y la colummna donde nos de un indicador si no se presentó censura y si se presentó la falla del evento estudiado. También la función toma como parámetro el tamaño de la poblacion a evaluar para después hacer su gráfica para el análisis de supervivencia.
require(survival)
require(KMsurv)
require(dplyr)
require(ggplot2)
grafico<- function(n,m){
ggplot(m)+
geom_point(aes(x = 1:n,
y = m[,1],
shape = m[,2] %>% as.factor(),
colour = m[,2] %>% as.factor()),
size = 3)+
geom_linerange(aes(x = 1:n,
ymin = 0,
ymax = m[,1]),
linetype = "dashed")+
coord_cartesian(ylim = c(0, max(m[1,])+5))+
coord_flip()+theme_light()+labs(y="Tiempo",x="Tamaño de la muestra")+
scale_color_discrete(name="Variables",labels=c(paste("censura"),
paste("falla")))+
ggtitle("Gráfica de Supervivencia")
}
Ahora veamos cómo funciona el código con 3 bases de datos distintas
Este data.frame nos muestra el comportamiento de los trabajadores con respecto a la empresa donde laboran.
El data frame tiene un total de 14,999 observacioness junto con 10 variables, pero en este estudio se tomaron 20, 30 y 40 trabajadores de manera aleatoria, el cual solo nos interesó estudiar la variable de tiempo “time_spend_company” y el evento “left”.
Como el data frame es muy extenso, se creó un subconjunto de los datos tomando solamente en cuenta las variables mencionadas anteriormente para poder manejarlo mucho más sencillo y poder hacer los gráficos correspondientes para el estudio en cuestión.
hr<- read.csv("HR_comma_sep.csv")
Surv(hr$time_spend_company, hr$left)
n1<-20
set.seed(10)
m1 <- hr %>%
select(time_spend_company, left) %>%
sample_n(n1)
grafico(n1,m1)
n1<-30
set.seed(20)
m1 <- hr %>%
select(time_spend_company, left) %>%
sample_n(n1)
grafico(n1,m1)
n1<-40
set.seed(30)
m1 <- hr %>%
select(time_spend_company, left) %>%
sample_n(n1)
grafico(n1,m1)
En este data frame los datos provienen de un estudio de ingeniería del tiempo de falla de los ventiladores del generador de diésel. El objetivo de esta base de datos es decidir si sustituir o no los ventiladores con uno de mejor calidad para evitar futuros fallos.
Se estudiaron un total de 70 generadores. Para cada uno de ellos se registró el número de horas desde que lo pusieron en servicio hasta el fallo del ventilador o hasta el final del estudio (lo que pasara primero).
Para este estudio se tomaron 15, 20 y 30 generadores elegidos de forma aleatoria. La variable tiempo es “hours” y la variable estudiada es “status”. Se crearon distintos subconjuntos de data frames para poder tomar los valores tomados en forma aleatoria y hacer su análisis de supervivencia.
data("genfan")
gf<-data.frame(genfan)
Surv(gf$hours, gf$status)
n2<-15
set.seed(40)
m2<-gf %>%
select(hours,status) %>%
sample_n(n2)
grafico(n2,m2)
n2<-20
set.seed(50)
m2<-gf %>%
select(hours,status) %>%
sample_n(n2)
grafico(n2,m2)
n2<-30
set.seed(60)
m2<-gf %>%
select(hours,status) %>%
sample_n(n2)
grafico(n2,m2)
En este data. frame se cuenta con 26 individuos, en el cual se tiene las variables “sex”, “age”, “time” y “death”.
Es de interés estudiar la relación del tiempo en el que se estudió el paciente y, si llegara a suceder, el fallecimiento.
Para el análisis de superviviencia se tomaron 10, 20 y 24 pacientes de manera aleatoria y, a continuación se mostrarán las gráficas correspondientes.
data("psych")
ps<-data.frame(psych)
Surv(psych$time,psych$death)
n3<-10
set.seed(70)
m3<-ps %>%
select(time,death) %>%
sample_n(n3)
grafico(n3,m3)
n3<-20
set.seed(80)
m3<-ps %>%
select(time,death) %>%
sample_n(n3)
grafico(n3,m3)
n3<-24
set.seed(80)
m3<-ps %>%
select(time,death) %>%
sample_n(n3)
grafico(n3,m3)