Tarefa 01 - Analise de Sobrevivência

Exemplo

O exemplo a ser utilizado será:

  • Tempos de reincidência em meses de pacientes com câncer de bexiga submetidos a um procedimento cirúrgico feito por laser.

Para tanto, iremos considerar a distribuição Log-Logístico, comparado com o Kaplan-Meier e, para o segundo método de comparação, utilizando-se linearização, utilizaremos a Gamma-Generalizada.

Modelo Log-Logístico

name = 'Log-Logistico'
name_r = 'llogis'

Libraries

Utilizaremos as bibliotecas survival (Jenkins (2005)), com o intuito de organizar os dados como um problema de sobrevivência e a estimação de Kaplan-Meier, e flexsurv (Jackson (2016)) para a estimação do modelo Log-Logístico. Então:

library(flexsurv)
## Warning: package 'flexsurv' was built under R version 4.1.3
## Carregando pacotes exigidos: survival
library(survival)
library(survminer)
## Warning: package 'survminer' was built under R version 4.1.3
## Carregando pacotes exigidos: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.3
## Carregando pacotes exigidos: ggpubr
## Warning: package 'ggpubr' was built under R version 4.1.3
## 
## Attaching package: 'survminer'
## The following object is masked from 'package:survival':
## 
##     myeloma
library(lubridate)
## Warning: package 'lubridate' was built under R version 4.1.3
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

Base de dados

Carregando a base de dados:

tempos<-c(3,5,6,7,8,9,10,10,12,15,15,18,19,20,22,25,28,30,40,45)
cens<-c(1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0)

Ajustando o modelo

Abaixo vamos ajustar o modelo utilizando-se da função flexsurvreg

name = 'Log-Logistico'
name_r = 'llogis'

fs2 <- flexsurvreg(Surv(tempos,cens)~1,
                   dist = name_r)

Vamos obter os valores da estimativa por verossimilhança do modelo:

shape = fs2$coefficients[1] # Parametro de shape
scale = fs2$coefficients[2] # Parametro de scale

Funções

Podemos notar que a função de densidade, implementada pela biblioteca flexsurv para o modelo log-logístico é definido da seguinte forma:

  • f(t)

\[ f(x | a, b) = \frac{\bigg(\frac{a}{b}\bigg)\cdot\bigg(\frac{x}{b}\bigg)^{a-1}}{\bigg[1 + \bigg(\frac{x}{b}\bigg)^{a}\bigg]^{2}} \]

Com função de densidade acumulada dada por:

  • F(t)

\[ F(x | a, b) = 1 - \frac{1}{1 + \bigg(\frac{x}{b}\bigg)^{a}} \]

Com função de sobrevivência definida como:

  • S(t)

\[ S(t | a, b) = \frac{1}{1 + \bigg(\frac{t}{b}\bigg)^{a}} \]

Aonde consideraremos \(b>0\) como scale e \(a>0\) como shape.

Funções de sobrevivência

Vamos obter a estimativa da função de sobrevivência de Kaplan-Meier e a estimativa da função de sobrevivência para o modelo Log-Logístico.

# Funcao de sobrevivencia
S <- function(t, shape, scale){
  (1 + ((t/scale)**(shape)))**(-1)
}
#Obtendo as estimativas das fun??es de sobreviv?ncia
ekm<-survfit(Surv(tempos,cens)~1) #estimador de kaplan-meier
time<-ekm$time #tempos
st<-ekm$surv #sobreviv?ncia kaplan meier
stg <- S(t=time, shape=shape, scale=scale)

knitr::kable(cbind(time,st,stg))
time st stg
3 0.9500000 0.4817061
5 0.9000000 0.3819006
6 0.8500000 0.3481433
7 0.8000000 0.3207305
8 0.7500000 0.2979367
9 0.7000000 0.2786272
10 0.6500000 0.2620209
12 0.5958333 0.2348342
15 0.5416667 0.2043115
18 0.4814815 0.1816388
19 0.4212963 0.1753034
20 0.3611111 0.1694552
22 0.3009259 0.1590022
25 0.2407407 0.1458108
28 0.1805556 0.1348872
30 0.1203704 0.1285810
40 0.0601852 0.1049406
45 0.0601852 0.0964214

Método 01

par(mfrow=c(1,2))
plot(stg,st,pch=16,ylim=range(c(min(st),max(st))), xlim=range(c(0,1)), ylab = "S(t): Kaplan-Meier",
     xlab=paste("S(t):", name))
lines(c(0,1), c(0,1), type="l", lty=1)
grid()

plot(ekm, conf.int=F, xlab="Tempos", ylab="S(t)")
lines(c(0,time),c(1,stg), lty=2)
legend("bottomleft",lty=c(1,2),c("Kaplan-Meier", name),bty="n",cex=0.8)
grid()

Método 02

Aqui utilizaremos uma transformação para linear a relação entre o tempo e a função de sobrevivencia.

  • Demonstração:

Para tanto, sabemos que a função de sobrevivencia da gamma generalizada é dada por:

\[ S(t) = \frac{1}{1 + \bigg(\frac{t}{\alpha}\bigg)^{\beta}} \rightarrow \]

também podemos escrever da seguinte forma:

\[ \rightarrow 1 + \bigg(\frac{t}{\alpha}\bigg)^{\beta} = \frac{1}{S(t)} \rightarrow \]

isolando \(\bigg(\frac{t}{\beta}\bigg)^{\beta}\), temos

\[ \rightarrow \bigg(\frac{t}{\beta}\bigg)^{\beta} = \frac{1}{S(t)} - 1 = \frac{1 - S(t)}{S(t)} \rightarrow \]

\[ \rightarrow \log\bigg(\frac{1 - S(t)}{S(t)}\bigg) = \beta\cdot \log\bigg(\frac{t}{\alpha}\bigg) \rightarrow \] \[ \rightarrow \log\bigg(\frac{1 - S(t)}{S(t)}\bigg) = \beta\cdot [\log(t) - \log(\alpha)] \rightarrow \]

\[ \rightarrow \log(t) = \frac{1}{\beta}\cdot \log\bigg(\frac{ 1 - S(t)}{S(t)}\bigg) + \log(\alpha) \] seja \(k = \log(\alpha)\), \(\tau = \frac{1}{\beta}\), \(X = \log\bigg(\frac{1-S(t)}{S(t)}\bigg)\) e \(Y = \log(t)\), então notamos a seguinte expressão:

\[ Y = \tau\cdot X + k \]

  • Computacionalmente:
lstg= (1/scale)*log((1-st)/st) + log(shape) # s(t): kaplan meier

par(mfrow=c(1,1))
plot(log(time), lstg,pch=16,
     xlab=expression(log(t)),
     ylab=expression((1/beta)*log((1-S(t))/S(t)) + log(alpha)),
     main=name)
abline(lm(lstg ~ log(time)))
grid()

Teste de RV

Aplicaremos um teste de razão de verossimilhanças.

fitg <- flexsurvreg(formula = Surv(tempos, cens) ~ 1,dist=name_r)
fitgg <- flexsurvreg(formula = Surv(tempos, cens) ~ 1,dist="gengamma")

#Obten??o das log-verossimilhan?as
loglikLLogis<-fitg$loglik[1]  #log-verossimilhan?a modelo log-logistico
loglikG<-fitgg$loglik[1]   #log-verossimilhan?a modelo generalizado 

#Obten??o das estat?sticas de teste

RVe<-2*(loglikG-loglikLLogis) #Estat?stica da raz?o de verossimilhan?as para o modelo exponencial

#Obten??o dos p-valores dos testes            
pRV<-1-pchisq(RVe,2) #Log-logistico

rbind(pRV,
      'LogLik.LLogis'=fitg$loglik[1],
      'LogLik.GG'=fitgg$loglik[1])
##                     [,1]
## pRV             0.711922
## LogLik.LLogis -66.030530
## LogLik.GG     -65.690743

Não rejeitamos a hipótese nula, ou seja, pelo teste de razão de verossimilhanças, e em suma pela analise gráfica, podemos ver que o modelo Log-Logístico não se ajustou bem para esse conjunto de dados.

References

Jackson, Christopher H. 2016. “flexsurv: a platform for parametric survival modeling in R”. Journal of statistical software 70.
Jenkins, Stephen P. 2005. “Survival analysis”. Unpublished manuscript, Institute for Social and Economic Research, University of Essex, Colchester, UK 42: 54–56.