library(survival)
library(ggplot2)
library(KMsurv)
library(gridExtra) #sirve para poner las gráficas en una misma página

data("tongue")
data("aids")
hr<-read.csv("HR_comma_sep.csv", header = T)

Esta parte no necesita de mucha explicación, vamos a estimar con el método KM la función de supervivencia de las bases seleccionadas para esta práctica.

km.hr<-survfit(Surv(time_spend_company, left)~1, hr, type = "kaplan-meier")
km.tongue<-survfit(Surv(time, delta)~1, tongue, type = "kaplan-meier")
km.aids<-survfit(Surv(infect, adult)~1, aids, type = "kaplan-meier")

Ahora, la función que usaremos para generar las gráficas es la siguiente

graf_diag <- function(km.surv,km.time){
  p_exp<-ggplot()+geom_point(aes(x=log(km.surv), y=km.time))+
    labs(title = "Diagnostico Exponencial", x="S(t)", y="t")
  
  p_wei<-ggplot()+geom_point(aes(x=-log(km.surv), y=km.time))+
    labs(title = "Diagnostico Weibull", x="S(t)", y="t")
  
  p_gomp<-ggplot()+geom_point(aes(x=log(-log(km.surv)+1), y=km.time))+
    labs(title = "Diagnostico Gompertz", x="S(t)", y="t")
  
  p_log<-ggplot()+geom_point(aes(x=log(-log(km.surv)+1), y=km.time))+
    labs(title = "Diagnostico Log-logistico", x="S(t)", y="t")
  
  p_lognor<-ggplot()+geom_point(aes(x=qnorm(1-km.surv), y=km.time))+
    labs(title = "Diagnostico Log-normal", x="S(t)", y="t")
  
  grid.arrange(p_exp, p_wei, p_gomp, p_log, p_lognor, ncol = 2)
     
}

Es bastante simple la función. Pide dos cosas: la comlumna surv y la columna time de la lista generada al usar survfit(), con esto tenemos las estimaciones de la función de supervivencia para los datos.

Ahora, para las gráficas no se hizo mucho, solo se obtuvo los despejes necesarios para graficar contra t. Se hizo una gráfica para cada modelo paramétrico y después, con la función grid.arrange() se juntaron todas en una sola página.

Ahora vamos a probar la función con las estimaciones obtenidas para las bases que escogimos. Vamos a empezar con la base hr.

graf_diag(km.hr$surv,km.hr$time)

Viendo las gráficas, podemos notar que ningún modelo paramétrico podría funcionar para estos datos, aunque son pocos datos, por lo que sería muy imprudente dar una conclusión definitiva.

Ahora, para la base tongue obtenemos lo siguiente

graf_diag(km.tongue$surv,km.tongue$time)

Este caso es un poco más complicado, podemos ver que las estimaciones podrían modelarse con alguna distribución paramétrica, sobre todo con una Exponencial o Weibull. Aunque hay que tener en cuenta que hay ciertos datos que se están comportando de manera atípica.

Por último, vamos a aplicar la función a la estimación hecha para la base aids

graf_diag(km.aids$surv,km.aids$time)

En este caso, el único modelo parámetrico que podría modelar los datos sería el log-normal, parece un buen candidato, valdría la pena analizarlo.