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 scaleFunçõ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.