Un gráfico Cuantil-Cuantil permite observar cuan cerca está la distribución de un conjunto de datos a alguna distribución ideal ó comparar la distribución de dos conjuntos de datos.
En este caso haremos una comparación de un conjunto de datos de supervivencia contra una distribución conocida para tratar de hacer inferencia por medio de
éstas gráficas sobre cuál es la distribución que mejor se ajusta a nuestros datos.
Obs: En este caso sólo usaremos 5 distribuciones para comparar con la función de supervivencia: 1. Gompertz-Makeham 2. Gamma 3. Generalized Gamma 4. Log-Logistic 5. Generalized F Sin embargo, existe una gama amplia de distribuciones que se pueden utilizar para encontrar el mejor ajuste.
Iniciamos cargando las librerías
library(survival)
library(KMsurv)
library(survMisc)
library(survminer)
## Loading required package: ggplot2
##
## Attaching package: 'ggplot2'
## The following object is masked from 'package:survMisc':
##
## autoplot
## Loading required package: ggpubr
## Loading required package: magrittr
library(flexsurv)
library(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
Lo primero que debemos hacer es obtener la función de supervivencia estimada de alguna base de datos que nos interese.
getwd()
## [1] "C:/Users/bec-rene3/Documents/Lizbeth/Trabajos/R"
datos <- read.csv(file = "churn.csv", header = T)
Recodificamos la variable que nos interesa tomar como censura
datos$churn <- ifelse(datos$churn == "Yes", 1, 0)
Ahora realizamos el ajuste de la función de supervivencia (para esta función sólo podemos analizar el mejor ajuste con un objeto del tipo surv_fit() sin estratificación), sin embargo se puede desarrollar una función que calcule la mejor aproximación para cada estrato [Tal vez un futuro proyecto :D ]
ajuste<- surv_fit(Surv(accountlength, churn) ~ 1, data = datos)
Creamos la función para obtener las gráficas cuantil-cuantil.
qqplots<-function(ajuste){
probas<- 1 -ajuste$surv
a<-quantile(ajuste$time, probs=probas)
simgompertz<-qgompertz(probas,shape = 3)
simgamma<-qgamma(probas,shape = 3)
simgammagen<-qgengamma(probas, 5, 4, Q=2)
simllogist<-qllogis(probas,3)
simfgen<-qgenf(probas, 5, 4, Q=2,P=8)
qqplot(probas,simgompertz, main="Q-Q plot Comparación Gompertz", col= "lightcoral")
qqplot(probas,simgamma, main="Q-Q plot Comparación Gamma", col= "blueviolet")
qqplot(probas,simgammagen, main="Q-Q plot Comparación Gamma Generalizada", col= "cyan4")
qqplot(probas,simfgen, main="Q-Q plot Comparación F Gneralizada", col= "limegreen")
qqplot(probas,simllogist, main="Q-Q plot Comparación Log-Logistica", col= "pink")
}
Ahora porbemos nuestra función con el ajuste KM que realizamos a los datos de nuestro interés.
qqplots(ajuste)
Para elegir la distribución que más se asemeja a la función de supervivencia estimada se busca que la dustribución de los datos con las Q-Qplot se asemejen lo más posible a una recta identidad (Y=X) Aunque no en este caso basta con que sea una recta con pendiente positiva, ya que si se cumple con esta condición pero la pendiente es distinta de cero, se hace un cambio de escala, mientras que si la línea no pasa por el origen lo que se procede a hacer es una traslación o cambio de posición.
NOTA: Este es un intento de función para hacer QQ-plots, podría no ser el mejor, o no estar del todo correcto.. jejeje SALUDOS