Para esta sexta aula prática de Análise de Sobrevivência e Confiabilidade, precisaremos dos seguintes pacotes:
require(flexsurv)
require(reslife)
Pacote flexsurv: Responsável pelo
ajuste de modelos paramétricos flexíveis aos dados de
tempo até a ocorrência de um evento de interesse.
Pacote reslife: Responsável por
fornecer uma estimativa para o tempo médio residual de
ocorrência de um evento de interesse.
As Organizações Internacionais de Saúde recomendam o leite materno como a única fonte de alimentação para crianças até 6 meses de idade. Identificar fatores determinantes do aleitamento materno em diferentes populações é, portanto, fundamental para alcançar tal recomendação. Muitos trabalhos investigam os determinantes do aleitamento exclusivamente materno em populações urbanas de baixa renda. Os resultados desses trabalhos mostram que a condição sócio-econômica e o peso ao nascimento da criança estão associados com o aleitamento exclusivamente materno.
Além disso, as mulheres que têm acesso a maternidades que promovem programas de aleitamento obtêm melhores resultados. Nessa mesma linha de pesquisa, um outro estudo foi realizado pelos professores Eugênio Goulart e Cláudia Lindgren, do Departamento de Pediatria da UFMG, no Centro de Saúde São Marcos, localizado em Belo Horizonte. Este centro é um ambulatório municipal que atende essencialmente a população de baixa renda. O estudo teve como objetivos principais conhecer a prática do aleitamento materno de mães que utilizam este centro, assim como os possíveis fatores de risco ou de proteção para o desmame precoce.
Um inquérito epidemiológico composto por questões demográficas e comportamentais foi aplicado a 150 mães de crianças menores de 2 anos de idade. A variável resposta de interesse foi o tempo máximo de aleitamento materno, em meses, ou seja, o tempo contado a partir do nascimento até o desmame completo da criança. No estudo foram registradas 11 covariáveis e a variável resposta. Algumas crianças não foram acompanhadas até o desmame e, portanto, há a presença de censuras.
A variável resposta é, portanto, o par \((t_i,\delta_i)\), com \(i=1,2,...,150\), de modo que:
As covariáveis explicativas são:
A base de dados está armazenada no arquivo
dados.csv
Os comandos a seguir fazem a leitura dessa base de dados:
dados<-read.csv("dados.csv")
Como em qualquer análise estatística, um passo importante é conduzir uma boa análise descritiva dos dados. Em análise de sobrevivência e confiabilidade não é diferente. Medidas resumo podem ser utilizadas para todas as variáveis, fazendo as devidas adaptações quando necessário.
Trazendo para o contexto de análise de sobrevivência e confiabilidade, podemos usar as técnicas não paramétricas para investigar isoladamente a associação de cada variável qualitativa com a variável resposta. Para cada variável qualitativa, podemos construir as estimativas para as funções de sobrevivência (confiabilidade) segundo Kaplan-Meier. Na sequência, utilizar os testes para comparar as funções de sobrevivência (confiabilidade) nas categorias da covariável qualitativa. Esse passo é importante para verificar como a covariável qualitativa afeta a variável resposta.
Existe uma proposta na literatura de levar para a modelagem de regressão apenas as covariáveis qualitativas que tiverem um valor-p inferior a 0,25 em pelo menos um dos testes de comparação das curvas de sobrevivência (confiabilidade). Este passo acaba se tornando um filtro inicial para a seleção de variáveis qualitativas que poderão entrar no modelo de regressão final ajustado.
No caso de uma variável quantitativa, pode ser possível fazer um gráfico de dispersão entre ela e a variável resposta e demarcar as observações que são censuras ou não. Esse passo pode ajudar a investigar, de forma subjetiva, como a variável quantitativa pode afetar a variável resposta. Além disso, pode ser possível transformá-la em categórica e utilizar os testes de comparação de curvas de sobrevivência (confiabilidade). Essa abordagem pode não ser tão precisa, uma vez que é removida a grandeza dos valores.
Para a nossa base de dados de aleitamento materno, temos apenas variáveis qualitativas. Dessa forma, os comandos a seguir fornecem os testes de comparação das curvas de sobrevivência para todas elas, considerando as abordagens Logrank e Peto:
dados<-read.csv("dados.csv")
V1_LR<-survdiff(Surv(tempo,cens)~V1, data=dados,rho=0)
V1_PT<-survdiff(Surv(tempo,cens)~V1, data=dados,rho=1)
V2_LR<-survdiff(Surv(tempo,cens)~V2, data=dados,rho=0)
V2_PT<-survdiff(Surv(tempo,cens)~V2, data=dados,rho=1)
V3_LR<-survdiff(Surv(tempo,cens)~V3, data=dados,rho=0)
V3_PT<-survdiff(Surv(tempo,cens)~V3, data=dados,rho=1)
V4_LR<-survdiff(Surv(tempo,cens)~V4, data=dados,rho=0)
V4_PT<-survdiff(Surv(tempo,cens)~V4, data=dados,rho=1)
V5_LR<-survdiff(Surv(tempo,cens)~V5, data=dados,rho=0)
V5_PT<-survdiff(Surv(tempo,cens)~V5, data=dados,rho=1)
V6_LR<-survdiff(Surv(tempo,cens)~V6, data=dados,rho=0)
V6_PT<-survdiff(Surv(tempo,cens)~V6, data=dados,rho=1)
V7_LR<-survdiff(Surv(tempo,cens)~V7, data=dados,rho=0)
V7_PT<-survdiff(Surv(tempo,cens)~V7, data=dados,rho=1)
V8_LR<-survdiff(Surv(tempo,cens)~V8, data=dados,rho=0)
V8_PT<-survdiff(Surv(tempo,cens)~V8, data=dados,rho=1)
V9_LR<-survdiff(Surv(tempo,cens)~V9, data=dados,rho=0)
V9_PT<-survdiff(Surv(tempo,cens)~V9, data=dados,rho=1)
V10_LR<-survdiff(Surv(tempo,cens)~V10, data=dados,rho=0)
V10_PT<-survdiff(Surv(tempo,cens)~V10, data=dados,rho=1)
V11_LR<-survdiff(Surv(tempo,cens)~V11, data=dados,rho=0)
V11_PT<-survdiff(Surv(tempo,cens)~V11, data=dados,rho=1)
COMPARACAO_SOBREVIVENCIA <- rbind(c(V1_LR$chisq,V1_LR$pvalue,V1_PT$chisq,V1_PT$pvalue),
c(V2_LR$chisq,V2_LR$pvalue,V2_PT$chisq,V2_PT$pvalue),
c(V3_LR$chisq,V3_LR$pvalue,V3_PT$chisq,V3_PT$pvalue),
c(V4_LR$chisq,V4_LR$pvalue,V4_PT$chisq,V4_PT$pvalue),
c(V5_LR$chisq,V5_LR$pvalue,V5_PT$chisq,V5_PT$pvalue),
c(V6_LR$chisq,V6_LR$pvalue,V6_PT$chisq,V6_PT$pvalue),
c(V7_LR$chisq,V7_LR$pvalue,V7_PT$chisq,V7_PT$pvalue),
c(V8_LR$chisq,V8_LR$pvalue,V8_PT$chisq,V8_PT$pvalue),
c(V9_LR$chisq,V9_LR$pvalue,V9_PT$chisq,V9_PT$pvalue),
c(V10_LR$chisq,V10_LR$pvalue,V10_PT$chisq,V10_PT$pvalue),
c(V11_LR$chisq,V11_LR$pvalue,V11_PT$chisq,V11_PT$pvalue))
rownames(COMPARACAO_SOBREVIVENCIA)<-c("V1","V2","V3","V4","V5","V6",
"V7","V8","V9","V10","V11")
colnames(COMPARACAO_SOBREVIVENCIA)<-c("Logrank_Est","Logrank_pvalor","Peto_Est","Peto_pvalor")
COMPARACAO_SOBREVIVENCIA
## Logrank_Est Logrank_pvalor Peto_Est Peto_pvalor
## V1 3.948917 0.0469015372 5.665980 0.0172970509
## V2 2.598897 0.1069381287 2.394640 0.1217517744
## V3 6.148444 0.0131527781 7.934190 0.0048509325
## V4 12.259259 0.0004629552 14.893645 0.0001137455
## V5 1.375355 0.2408939587 1.285637 0.2568536295
## V6 7.465871 0.0062879584 7.019143 0.0080642837
## V7 1.840854 0.1748508878 1.450923 0.2283799192
## V8 2.114927 0.1458689925 2.219480 0.1362789295
## V9 1.873899 0.1710292070 2.380470 0.1228606074
## V10 2.604718 0.1065461194 1.582213 0.2084422050
## V11 2.932307 0.0868233511 1.671408 0.1960700654
Assim, segundo o critério da literatura, todas as covariáveis qualitativas obtiveram um p-valor < 0,25 em pelo menos um dos testes de comparação. Dessa forma, todas elas seguem para a abordagem dos modelos de regressão.
Na aula passada, vimos o ajuste de três modelos de regressão paramétricos:
Temos que fazer uma seleção de covariáveis e também de um modelo probabilístico para a variável resposta. A estratégia é trabalhar com um modelo que generaliza as três distribuições de probabilidade e, posteriormente, verificar se o ajuste de alguma delas é preferível.
Lembre-se que a função densidade de probabilidade de uma variável aleatória T com distribuição gama generalizada é:
\[f(t)=\frac{\gamma\alpha^{\gamma\beta}}{\Gamma(\beta)}t^{\gamma\beta-1}exp\{-(\alpha t)^\gamma\}\]
Para esta distribuição, tem-se um parâmetro de taxa \(\alpha\) e dois de forma \(\gamma\) e \(\beta\), o que a torna bastante flexível.
Além disso, pode-se mostrar, que a distribuição log-normal aparece como um caso limite da distribuição gama generalizada quando \(\beta \rightarrow \infty\)}
Assim, a estratégia de seleção de covariáveis é feita no modelo de regressão gama generalizado. Esse modelo é mais robusto e, como dito, generaliza as distribuições Exponencial, Weibull e Lognormal. Com o modelo final ajustado, testamos se o modelo gama generalizado é o mais adequado ou alguma de suas versões particulares é preferível. Temos então uma estrutura de modelos encaixados. No último tópico da aula de hoje, estudaremos como fazer essa escolha do melhor modelo probabilístico.
As covariáveis potencialmente importantes para descrever o comportamento da resposta são eleitas para a abordagem dos modelos de regressão. Dependendo do número de covariáveis, há um número gigante de possíveis modelos que podem ser formados. É certamente impraticável ajustar todos estes possíveis modelos a fim de ser selecionado o que melhor explique a variável resposta. Nessas situações, rotinas automáticas para seleção de covariáveis podem ser utilizadas,tais como os métodos forward, backward ou stepwise.
Estes métodos estão implementados e, portanto, disponíveis em pacotes estatísticos. Entretanto, tais rotinas possuem algumas desvantagens. Tipicamente, elas tendem a identificar um particular conjunto de covariáveis, em vez de possíveis conjuntos igualmente bons para explicar a resposta. Esse fato impossibilita que dois ou mais conjuntos de covariáveis igualmente bons sejam apresentados para o pesquisador, para a escolha do mais relevante em sua área de aplicação. Isto significa que esses métodos são automáticos e fazem com que o pacote estatístico escolha o modelo.
Na realidade, o que se defende aqui é que o estatístico e o pesquisador tenham uma postura pro-ativa neste processo. Isto implica, por exemplo, que covariáveis importantes em termos clínicos ou de engenharia devem ser consideradas em cada passo de inclusão ou exclusão no processo de seleção de covariáveis. Frente a estas limitações das rotinas automáticas, optou-se por utilizar métodos que envolvem a interferência mais de perto do analista. Neste estudo optou-se por utilizar uma estratégia de seleção de modelos derivada da proposta de Collett (2003a).
Nesse passo, vamos ajustar todos os modelos contendo uma única covariável. Manteremos apenas as covariáveis que forem significativas ao nível de 0,10. É aconselhável utilizar o teste de Wald nesse passo
Os comandos a seguir ajusta todos esses modelos:
mod1<-flexsurvreg(data=dados,Surv(tempo,cens)~V1,dist="gengamma.orig")
mod2<-flexsurvreg(data=dados,Surv(tempo,cens)~V2,dist="gengamma.orig")
mod3<-flexsurvreg(data=dados,Surv(tempo,cens)~V3,dist="gengamma.orig")
mod4<-flexsurvreg(data=dados,Surv(tempo,cens)~V4,dist="gengamma.orig")
mod5<-flexsurvreg(data=dados,Surv(tempo,cens)~V5,dist="gengamma.orig")
mod6<-flexsurvreg(data=dados,Surv(tempo,cens)~V6,dist="gengamma.orig")
mod7<-flexsurvreg(data=dados,Surv(tempo,cens)~V7,dist="gengamma.orig")
mod8<-flexsurvreg(data=dados,Surv(tempo,cens)~V8,dist="gengamma.orig")
mod9<-flexsurvreg(data=dados,Surv(tempo,cens)~V9,dist="gengamma.orig")
mod10<-flexsurvreg(data=dados,Surv(tempo,cens)~V10,dist="gengamma.orig")
mod11<-flexsurvreg(data=dados,Surv(tempo,cens)~V11,dist="gengamma.orig")
tidy(mod1)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.227 0.314 NA NA
## 2 scale 0.000377 0.00927 NA NA
## 3 k 9.29 22.9 NA NA
## 4 V1sim 0.701 0.317 2.21 0.0272
tidy(mod2)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.339 0.181 NA NA
## 2 scale 0.205 1.04 NA NA
## 3 k 4.51 4.05 NA NA
## 4 V2menor ou igual a 2 -0.609 0.382 -1.59 0.111
tidy(mod3)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.244 0.254 NA NA
## 2 scale 0.00250 0.0417 NA NA
## 3 k 8.24 15.3 NA NA
## 4 V3menor ou igual a 6 meses -0.725 0.307 -2.36 0.0182
tidy(mod4)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.216 0.0763 NA NA
## 2 scale 0.000266 0.00183 NA NA
## 3 k 10.8 7.00 NA NA
## 4 V4sim -1.07 0.298 -3.58 0.000342
tidy(mod5)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.257 0.183 NA NA
## 2 scale 0.00323 0.0338 NA NA
## 3 k 7.21 9.04 NA NA
## 4 V5público 0.500 0.371 1.35 0.178
tidy(mod6)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.361 0.330 NA NA
## 2 scale 0.117 0.946 NA NA
## 3 k 4.25 6.52 NA NA
## 4 V6sim 0.791 0.297 2.67 0.00770
tidy(mod7)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.442 0.347 NA NA
## 2 scale 2.68 13.5 NA NA
## 3 k 2.95 3.70 NA NA
## 4 V7sim -1.07 0.778 -1.38 0.169
tidy(mod8)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.302 0.314 NA NA
## 2 scale 0.0454 0.543 NA NA
## 3 k 5.59 9.97 NA NA
## 4 V8menor que 1 SM -0.515 0.302 -1.71 0.0882
tidy(mod9)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.299 0.305 NA NA
## 2 scale 0.0285 0.340 NA NA
## 3 k 5.67 9.96 NA NA
## 4 V9menor que 2.5 kg 0.809 0.501 1.61 0.107
tidy(mod10)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.475 0.364 NA NA
## 2 scale 1.22 5.15 NA NA
## 3 k 2.62 3.16 NA NA
## 4 V10menor ou igual a 6 horas 0.424 0.298 1.42 0.155
tidy(mod11)
## # A tibble: 4 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 shape 0.435 0.348 NA NA
## 2 scale 1.10 5.63 NA NA
## 3 k 3.00 3.86 NA NA
## 4 V11sim -0.432 0.295 -1.46 0.143
De acordo com o critério do passo 1, vamos manter as variáveis V1, V3, V4, V6 e V8.
As covariáveis significativas no passo 1 são, então, ajustadas conjuntamente. Na presença de certas covariáveis, outras podem deixar de ser significativas. Conseqüentemente, ajustam-se modelos reduzidos, excluindo-se uma única covariável de cada vez. Verificam-se as covariáveis que, quando retiradas, provocam um aumento em pelo menos um dos critérios AIC e BIC. Somente aquelas que provocarem esse aumento permanecerão no modelo.
mod1<-flexsurvreg(data=dados,Surv(tempo,cens)~V1+V3+V4+V6+V8,dist="gengamma.orig")
mod2<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8,dist="gengamma.orig")
mod3<-flexsurvreg(data=dados,Surv(tempo,cens)~V1+V4+V6+V8,dist="gengamma.orig")
mod4<-flexsurvreg(data=dados,Surv(tempo,cens)~V1+V3+V6+V8,dist="gengamma.orig")
mod5<-flexsurvreg(data=dados,Surv(tempo,cens)~V1+V3+V4+V8,dist="gengamma.orig")
mod6<-flexsurvreg(data=dados,Surv(tempo,cens)~V1+V3+V4+V6,dist="gengamma.orig")
Comparacao<-rbind(c(mod1$AIC,mod1$BIC),
c(mod2$AIC,mod2$BIC),
c(mod3$AIC,mod3$BIC),
c(mod4$AIC,mod4$BIC),
c(mod5$AIC,mod5$BIC),
c(mod6$AIC,mod6$BIC))
rownames(Comparacao)<-c("Modelo completo","Sem V1","Sem V3", "Sem V4", "Sem V6", "Sem V8")
colnames(Comparacao)<-c("AIC","BIC")
Comparacao
## AIC BIC
## Modelo completo 442.5370 466.6221
## Sem V1 442.4092 463.4836
## Sem V3 444.9025 465.9769
## Sem V4 449.3428 470.4173
## Sem V6 446.0072 467.0817
## Sem V8 444.5520 465.6264
Assim, de acordo com esse critério, a variável V1 é retirada nesse passo. Observe que ela é a única que diminui o AIC e BIC do modelo completo.
Ajusta-se um novo modelo com as covariáveis retidas no passo 2. Neste passo, retorna-se com as covariáveis excluídas no passo 1 para confirmar que elas não são devem permanecer no modelo. Utilizamos, novamente, o AIC e BIC para essa decisão.
mod1<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8,dist="gengamma.orig")
mod2<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V2,dist="gengamma.orig")
mod3<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V5,dist="gengamma.orig")
mod4<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V7,dist="gengamma.orig")
mod5<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V9,dist="gengamma.orig")
mod6<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V10,dist="gengamma.orig")
mod7<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V11,dist="gengamma.orig")
Comparacao<-rbind(c(mod1$AIC,mod1$BIC),
c(mod2$AIC,mod2$BIC),
c(mod3$AIC,mod3$BIC),
c(mod4$AIC,mod4$BIC),
c(mod5$AIC,mod5$BIC),
c(mod6$AIC,mod6$BIC),
c(mod7$AIC,mod7$BIC))
rownames(Comparacao)<-c("Modelo completo","Com V2","Com V5", "Com V7", "Com V9", "Com V10", "Com V11")
colnames(Comparacao)<-c("AIC","BIC")
Comparacao
## AIC BIC
## Modelo completo 442.4092 463.4836
## Com V2 443.3129 467.3979
## Com V5 444.4153 468.5004
## Com V7 442.6437 466.7287
## Com V9 443.3263 467.4114
## Com V10 444.1726 468.2577
## Com V11 444.2530 468.3381
De acordo com esse passo, nenhuma variável retorna ao modelo.
Ajusta-se um modelo incluindo-se as covariáveis retidas no passo 3. Neste passo, é testado se alguma delas pode ser retirada do modelo. Utilizamos, novamente, o AIC e BIC para essa decisão.
mod1<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8,dist="gengamma.orig")
mod2<-flexsurvreg(data=dados,Surv(tempo,cens)~V4+V6+V8,dist="gengamma.orig")
mod3<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V6+V8,dist="gengamma.orig")
mod4<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V8,dist="gengamma.orig")
mod5<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6,dist="gengamma.orig")
Comparacao<-rbind(c(mod1$AIC,mod1$BIC),
c(mod2$AIC,mod2$BIC),
c(mod3$AIC,mod3$BIC),
c(mod4$AIC,mod4$BIC),
c(mod5$AIC,mod5$BIC))
rownames(Comparacao)<-c("Modelo completo","Sem V3","Sem V4", "Sem V6", "Sem V8")
colnames(Comparacao)<-c("AIC","BIC")
Comparacao
## AIC BIC
## Modelo completo 442.4092 463.4836
## Sem V3 444.2275 462.2913
## Sem V4 453.5129 471.5767
## Sem V6 445.5023 463.5661
## Sem V8 445.9702 464.0340
Assim, as variáveis permanecem no modelo.
Utilizando as covariáveis que sobreviveram ao passo 4, ajusta-se o modelo final para os efeitos principais. Para completar a modelagem, deve-se verificar a possibilidade de inclusão de termos de interação dupla entre as covariáveis inclufdas no modelo. O modelo final fica determinado pelos efeitos principais identificados no passo 4 e os termos de interação significativos identificados neste passo. Utilizamos, novamente, o AIC e BIC para essa decisão.
mod1<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8,dist="gengamma.orig")
mod2<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V3*V4,dist="gengamma.orig")
mod3<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V3*V6,dist="gengamma.orig")
mod4<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V3*V8,dist="gengamma.orig")
mod5<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V4*V6,dist="gengamma.orig")
mod6<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V4*V8,dist="gengamma.orig")
mod7<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8+V6*V8,dist="gengamma.orig")
Comparacao<-rbind(c(mod1$AIC,mod1$BIC),
c(mod2$AIC,mod2$BIC),
c(mod3$AIC,mod3$BIC),
c(mod4$AIC,mod4$BIC),
c(mod5$AIC,mod5$BIC),
c(mod6$AIC,mod6$BIC),
c(mod7$AIC,mod7$BIC))
rownames(Comparacao)<-c("Modelo completo","Com V3_V4","Com V3_V6",
"Com V3_V8","Com V4_V6","Com V4_V8","Com V6_V8")
colnames(Comparacao)<-c("AIC","BIC")
Comparacao
## AIC BIC
## Modelo completo 442.4092 463.4836
## Com V3_V4 443.6904 467.7755
## Com V3_V6 442.6568 466.7418
## Com V3_V8 444.1216 468.2067
## Com V4_V6 443.6785 467.7636
## Com V4_V8 443.6650 467.7501
## Com V6_V8 444.1542 468.2393
Nenhuma interação deve ser adicionada. Portanto, o modelo final inclui as variáveis V3, V4, V6 e v8.
Após os passos mencionados anteriormente, teremos o ajuste final do modelo de regressão gama generalizado. Na sequência, trocamos apenas a distribuição gama generalizada pelas distribuições:
O melhor modelo será aquele que possuir os menores valores de AIC e BIC. Para o melhor modelo, é feita a análise de resíduos e interpretação dos coeficientes estimados, como já fizemos anteriormente para modelos mais simples.
mod_gengamma<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8,dist="gengamma.orig")
mod_exp<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8,dist="exponential")
mod_wei<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8,dist="weibull")
mod_lognorm<-flexsurvreg(data=dados,Surv(tempo,cens)~V3+V4+V6+V8,dist="lnorm")
Comparacao<-rbind(c(mod_gengamma$AIC,mod_gengamma$BIC),
c(mod_exp$AIC,mod_exp$BIC),
c(mod_wei$AIC,mod_wei$BIC),
c(mod_lognorm$AIC,mod_lognorm$BIC))
rownames(Comparacao)<-c("Gama Generalizada", "Exponencial", "Weibull", "LogNormal")
colnames(Comparacao)<-c("AIC","BIC")
Comparacao
## AIC BIC
## Gama Generalizada 442.4092 463.4836
## Exponencial 442.9825 458.0357
## Weibull 444.8711 462.9349
## LogNormal 440.8734 458.9372
De acordo com esse critério, escolhemos o modelo final com a distribuição LogNormal.
Seguimos com a análise de resíduos do modelo escolhido:
CoxSnell <-coxsnell_flexsurvreg(mod_lognorm)$est
Podemos fazer dois gráficos:
ekm<- survfit (Surv(CoxSnell,dados$cens)~1,type="kaplan-meier")
plot(ekm, fun="cumhaz",xlab="Resíduos de Cox-Snell",ylab="Função de risco acumulado")
abline(0, 1, col="red")
plot(ekm, xlab="Resíduos de Cox-Snell",ylab="Função de sobrevivência")
CoxSnell<-sort(CoxSnell)
exp1<-exp(-CoxSnell)
points(CoxSnell,exp1, col="red",type="o")
De acordo com os gráficos, o modelo está bem ajustado.
Ao retornar no modelo lognormal, temos que:
mod_lognorm
## Call:
## flexsurvreg(formula = Surv(tempo, cens) ~ V3 + V4 + V6 + V8,
## data = dados, dist = "lnorm")
##
## Estimates:
## data mean est L95% U95% se
## meanlog NA 2.7623 2.0595 3.4650 0.3586
## sdlog NA 1.4217 1.1914 1.6966 0.1282
## V3menor ou igual a 6 meses 0.4667 -0.5693 -1.1272 -0.0115 0.2846
## V4sim 0.4400 -1.0459 -1.6038 -0.4881 0.2846
## V6sim 0.6267 0.6766 0.1098 1.2434 0.2892
## V8menor que 1 SM 0.4867 -0.6596 -1.2131 -0.1061 0.2824
## exp(est) L95% U95%
## meanlog NA NA NA
## sdlog NA NA NA
## V3menor ou igual a 6 meses 0.5659 0.3239 0.9886
## V4sim 0.3514 0.2011 0.6138
## V6sim 1.9672 1.1161 3.4673
## V8menor que 1 SM 0.5170 0.2973 0.8993
##
## N = 150, Events: 65, Censored: 85
## Total time at risk: 820.8
## Log-likelihood = -214.4367, df = 6
## AIC = 440.8734