Para esta nona aula prática de Análise de Sobrevivência e Confiabilidade, precisaremos do seguinte pacote:
require(survival)
require(dplyr)
Pacote survival: É o pacote
básico para o estudo de Análise de
Sobrevivência e Confiabilidade. Contém as principais
rotinas, incluindo definição de objetos
Surv, curvas Kaplan-Meier, modelos
Cox e modelos paramétricos.
Pacote dplyr: É o pacote
básico para manipulação de bases de dados.
Nesta seção, serão discutidas as bases de dados desta aula
No estudo, foram utilizadas informações provenientes de 91 pacientes HIV positivo e 21 HIV negativo, somando-se, assim, 112 pacientes estudados. Esses pacientes foram acompanhados no período entre março de 1993 e fevereiro de 1995, sendo somente considerados os que tiveram entrada até julho de 1994. Todos os pacientes incluídos no estudo foram encaminhados ao Centro de Treinamento e Referência em Doenças Infecto-parasitárias (CTR-DIP) da cidade de Belo Horizonte-MG, por pertencerem a grupos de comportamento de risco para adquirir o HIV ou por terem um exame Elisa HIV positivo.
As variáveis observadas para cada pessoa foram:
Na covariável Grupos de Risco, pacientes HIV soronegativo são aqueles que não possuem o HIV. Pacientes HIV soropositivo assintomáticos são aqueles que possuem o vírus mas não desenvolveram o quadro clinico de AIDS e que apresentam um perfil imunológico estável. Pacientes com ARC são aqueles que apresentam baixa imunidade e outros indicadores clínicos que antecedem o quadro clínico de AIDS. Pacientes com AIDS são aqueles que jé desenvolveram infecções oportunistas que definem esta doença. Esta covariável depende do tempo, pois os pacientes mudam de classificação ao longo do estudo.
Após a primeira consulta clínica, os pacientes foram encaminhados ao Serviço de Otorrinolaringologia da Universidade Federal de Minas Gerais. A cada consulta, a classificação do paciente foi reavaliada. Cada paciente foi acompanhado por meio de consultas trimestrais. A frequência mediana foi de 4 consultas. A resposta de interesse foi o tempo, em dias, contado a partir da primeira consulta, até a ocorrência da sinusite. O objetivo foi identificar fatores de risco para esta manifestação.
A base de dados está armazenada no objeto aids.txt.
Esses dados provêm dos pacientes com Aids atendidos no Hospital Universitário Gaffrée Guinle (Unirio). Para estudar o efeito da terapia antirretroviral de alta potência (Haart) no tempo de sobrevivência desde o diagnóstico de Aids até o óbito, o banco de dados foi organizado no formato covariável tempo-dependente. Para cada mudança de tratamento (haart=S ou N), nova linha foi criada. Para cada paciente, foram coletados o sexo e a idade.
A base de dados está armazenada no objeto AIDS2.txt
Como visto, covariáveis que alteram seu valor ao longo do período de acompanhamento são conhecidas como covariáveis dependentes do tempo. Tais covariáveis, quando presentes em um estudo, podem ser incorporadas ao modelo de regressão de Cox, generalizando-o como:
\[\lambda(t|\pmb{x(t)})=\lambda_0(t)exp\{\pmb{x(t)\beta}\}\]
Definido desta forma, o modelo anterior não é mais de riscos proporcionais, pois a razão das funções de risco no tempo \(t\) para dois indivíduos \(i\) e \(j\) fica sendo:
\[\frac{\lambda(t|\pmb{x_i(t)})}{\lambda(t|\pmb{x_j(t)})}=exp\{\pmb{\beta}\pmb{x_i(t)}-\pmb{\beta}\pmb{x_j(t)}\},\]
que pode não ser proporcional para as variáveis dependentes do tempo.
O ajuste desse modelo de Cox estendido é feito fazendo uma pequena adaptação na função de verossimilhança parcial, permitindo a inclusão de variáveis que mudem ao longo do tempo.
Esta seção é dedicada ao ajuste do modelo de Cox com covariáveis dependendo do tempo.
Os comandos a seguir fazem a leitura da base de dados:
dados<-read.table("AIDS.txt",header=T)
head(dados)
## pac id sex grp ti tf cens ats ud ac
## 1 1 31 0 4 0 0 1 3 2 2
## 2 2 22 1 2 0 378 0 3 2 2
## 3 3 32 0 4 0 84 1 3 2 2
## 4 4 36 0 2 0 109 0 3 2 2
## 5 5 34 0 2 0 134 1 NA NA NA
## 6 6 29 0 2 0 338 0 1 2 2
É importante atentar para como deve ser a estrutura de um dado com
covariável dependente do tempo. Para isso, a base de dados deve conter
duas colunas, ti e tf que representam tempo
inicial e final, respectivamente. O paciente que possui uma variável
dependente do tempo, deve ter repetições de linhas para identificar cada
mudança. As colunas ti e tf controlam quando
essas mudanças ocorrem. Olha o que acontece com o paciente 24, por
exemplo:
dados%>%filter(pac==24)
## pac id sex grp ti tf cens ats ud ac
## 1 24 34 1 3 0.0 141.5 0 3 2 2
## 2 24 34 1 4 141.5 244.5 1 3 2 2
Observe que entre 0 e 141,5 dias o paciente se encontrava no grupo 3. Entre 141,5 e 244,5 dias ele mudou para o grupo 4. No tempo 244,5 observa-se a ocorrência do evento de interesse (manifestação de sinusite). As demais covariáveis permanecem constantes.
Após o procedimento de seleção de variáveis, apenas as variáveis
id e grp foram para o modelo final. Para
ajustar este modelo, basta modificar o argumento que representa o tempo
na função Surv para ponderar o intervalo ti e
tf. Observe:
# Transformando grp em fator
dados$grp <- factor(dados$grp)
mod1 <- coxph(Surv(ti, tf,cens)~id+grp,method="breslow",data=dados)
mod1
## Call:
## coxph(formula = Surv(ti, tf, cens) ~ id + grp, data = dados,
## method = "breslow")
##
## coef exp(coef) se(coef) z p
## id -0.07695 0.92593 0.03128 -2.460 0.013903
## grp2 -0.73023 0.48180 1.00059 -0.730 0.465512
## grp3 2.27261 9.70473 0.83711 2.715 0.006631
## grp4 2.64906 14.14070 0.78967 3.355 0.000795
##
## Likelihood ratio test=38.61 on 4 df, p=8.367e-08
## n= 122, number of events= 26
## (11 observations deleted due to missingness)
Observe que 11 observações foram deletadas devido a dados faltantes.
Vamos verificar os resíduos de Schoenfeld:
# Transformando grp em fator
Schoenfeld<-resid(mod1,type="scaledsch")
par(mfrow=c(2,2))
plot(cox.zph(mod1, transform="identity",terms = F))
cox.zph(mod1,transform = "identity",terms=F)
## chisq df p
## id 0.143 1 0.71
## grp2 0.596 1 0.44
## grp3 0.359 1 0.55
## grp4 0.121 1 0.73
## GLOBAL 1.170 4 0.88
É importante ressaltar que não seria um problema se a variável
grp tivessem riscos que não fossem proporcionais. Dessa
forma, o modelo encontra-se bem ajustado nesse aspecto.
Retomamos o ajuste do modelo para fazermos as devidas interpretações dos coeficientes:
mod1
## Call:
## coxph(formula = Surv(ti, tf, cens) ~ id + grp, data = dados,
## method = "breslow")
##
## coef exp(coef) se(coef) z p
## id -0.07695 0.92593 0.03128 -2.460 0.013903
## grp2 -0.73023 0.48180 1.00059 -0.730 0.465512
## grp3 2.27261 9.70473 0.83711 2.715 0.006631
## grp4 2.64906 14.14070 0.78967 3.355 0.000795
##
## Likelihood ratio test=38.61 on 4 df, p=8.367e-08
## n= 122, number of events= 26
## (11 observations deleted due to missingness)
O aumento de um ano de idade reduz em 8% aproximadamente o risco de desenvolvimento de sinusite.
Com respeito ao grupo de risco, os grupos 1 (Paciente HIV soronegativo) e 2 (Paciente HIV soropositivo assintomático) são estatisticamente similares no que se refere ao tempo de manifestação de sinusite.
Com respeito ao grupo de risco 1 (Paciente HIV soronegativo), o risco de desenvolvimento de sinusite do grupo 3 (Paciente com ARC) aumenta em 9,70 vezes.
Com respeito ao grupo de risco 1 (Paciente HIV soronegativo), o risco de desenvolvimento de sinusite do grupo 4 (Paciente com AIDS) aumenta em 14,14 vezes.
Podemos supor dois pacientes com 30 e 50 anos e verificar a alteração na sobrevivência de fazer parte de diferentes grupos de risco:
plot(survfit(mod1,newdata=list(id=20,grp="1")),
conf.int = F,col="blue",xlab="Tempos (dias)", ylab="Sobrevivência Estimada",main="20 anos")
lines(survfit(mod1,newdata=list(id=20,grp="2")),
conf.int = F,col="red")
lines(survfit(mod1,newdata=list(id=20,grp="3")),
conf.int = F,col="green")
lines(survfit(mod1,newdata=list(id=20,grp="4")),
conf.int = F,col="orange")
legend(0,0.35,legend=c("Grupo 1", "Grupo 2", "Grupo 3", "Grupo 4"),
col=c("blue", "red", "green", "orange"),lty=1)
plot(survfit(mod1,newdata=list(id=30,grp="1")),
conf.int = F,col="blue",xlab="Tempos (dias)", ylab="Sobrevivência Estimada",main="30 anos")
lines(survfit(mod1,newdata=list(id=30,grp="2")),
conf.int = F,col="red")
lines(survfit(mod1,newdata=list(id=30,grp="3")),
conf.int = F,col="green")
lines(survfit(mod1,newdata=list(id=30,grp="4")),
conf.int = F,col="orange")
legend(0,0.35,legend=c("Grupo 1", "Grupo 2", "Grupo 3", "Grupo 4"),
col=c("blue", "red", "green", "orange"),lty=1)
Para a base de dados AIDS2.txt: