El objetivo de esta práctica es crear una función que nos haga gráficos diagnóstico para determinar si a una curva de supervivencia estimada con KM le subyace algún modelo paramétrico.

El objetivo de esta práctica es crear una función que nos haga gráficos diagnóstico para determinar si a una curva de supervivencia estimada con KM le subyace algún modelo paramétrico.

Función que realiza 5 gráficas que corresponden a diferentes diagnósticos de modelos paramétricos

Esta función recibe un conjunto de datos que previamente hay que ajustarlos.

diagnosis_par<- function(km_model){

par(mfrow=c(2,3))

plot(log(km_model$surv), km_model$time , main="Diagnóstico exponencial" , xlab="S(t)", ylab="t", col="red", type = "overplotted")

plot(-log(km_model$surv), km_model$time , main="Diagnóstico Weibull" , xlab="S(t)", ylab="t", col="blue", type = "overplotted")

plot(1/(km_model$surv) -1  , km_model$time , main="Diagnóstico Log-logistic" , xlab="S(t)", ylab="t", col="green",type = "overplotted")

plot(qnorm(1-km_model$surv), km_model$time , main="Diagnóstico Log-normal" , xlab="S(t)", ylab="t", col="purple",type = "overplotted")

plot(log(1-log(km_model$surv)), km_model$time , main="Diagnóstico Gompertz" , xlab="S(t)", ylab="t", col="red",type = "overplotted")

}

Estructura de datos que recibe la función

Paso 1. Se cargan los datos que se desean utilizar.

  data_frame_original <- read.csv("Nombre_del_archivo_donde_estan_los_datos.csv")

Paso 2. Damos formato de supervivencia a nuestros datos con la función:

Surv(data_frame_original$vector_de_tiempos , data_frame_original$vector_de_fallo)

Paso 3. Ajustamos nuestros datos con KM

  Km_Nombre_del_modelo <- surv_fit(Agregamos_el_paso_2 ~ 1, data=data_frame_original)

Es decir

Km_Nombre_del_modelo <- surv_fit( Surv(vector_de_tiempos , vector_de_fallo) ~ 1, data=data_frame_original)
  

y finalmente “Km_Nombre_del_modelo” será lo que recibe la función

Hagamos unos ejemplos

Ejemplo 1

data(genfan)
names(genfan)
## [1] "hours"  "status"
km_model1 <- surv_fit(Surv(hours, status)~1, data = genfan)
diagnosis_par(km_model1)

Al no observar una linea lo mas parecido a una linea completamente recta no podemos concluir que nuestros datos tienen un comportamiento parecido a una distribución paramétrica.

Ejemplo 2

data(veteran)
names(veteran)
## [1] "trt"      "celltype" "time"     "status"   "karno"    "diagtime"
## [7] "age"      "prior"
km_model2 <- surv_fit(Surv(time, status)~1, data = veteran)
diagnosis_par(km_model2)

Para estos datos observamos que tienen una tendencia parecida a una distribución Weibull y a su vez un parecido a una distribución Exponencial ya que en ambos diagnosticos observamos una linea lo mas parecido a una linea recta. Por lo que podemos concluir que los datos de la BD veteram tienen un comportamiento parecido a una distribución Exponencial.

Ejemplo 3

data(psych)
names(psych)
## [1] "sex"   "age"   "time"  "death"
km_model3 <- surv_fit(Surv(time, death)~1, data = psych)
diagnosis_par(km_model3)

Observamos que para esta BD psych, se encuentra una tendencia por una linea recta en la mayoría de los modelos paramétricos, por lo que no sería posible concluir si nuestros datos tienen la tendencia hacia un comportamiento determinado, por lo que necesitariamos otros métodos estadísticos para poder determinar como se comportan .