[a] Tempo até o desenvolvimento do tumor (em semanas)
[b] Rato A: falha na 10ª semana;
Rato B: falha na 15ª semana;
Rato D: censura na 20ª semana
[a] censura à esquerda
[c] censura intervalar
[d] censura aleatória (à direita)
Sugestão: utilize integral por partes, em que \(u = (u - t)\) e \(dv = f(u)du = -\frac{\partial}{\partial u}S(u)\)
\(S(t) = \exp\{-(\beta_0t + \frac{\beta_1t^2}{2})\}\)
\(f(t) = (\beta_0 +\beta_1t)\exp\{-(\beta_0t + \frac{\beta_1t^2}{2})\}\)
\(E(T) = 10\), \(\lambda(t) = \frac{2}{t+10}\) e \(S(t) = \frac{100}{(t+10)^2}\)
Seção 1.4.1 => Dados de hepatite
Tempo inicial: data do início do tratamento
Escala de medida: semanas
Evento: morte (óbito)
Seção 1.4.5 => Dados de aleitamento materno
Tempo inicial: data de nascimento da criança
Escala de medida: meses
Evento: desmame completo da criança
Seção 1.4.7 => Dados de tempo de vida de mangueiras
Tempo inicial: 1971 (ano em que as mangueiras foram plantadas)
Escala de medida: anos
Evento: morte
tempos<-c(0.19,0.78,0.96,1.31,2.78,3.16,4.67,4.85,6.50,7.35,8.27,12.07,32.52,33.91,36.71,rep(36.71,10))
cens<-c(rep(1,15), rep(0,10))
ekm<- survfit(Surv(tempos,cens)~1, conf.type=c("log-log"))
summary(ekm)
[a] tempo mediano estimado: 22,3 minutos
[b] Estimativa da fração de não defeituosos nos primeiros 2 minutos: 0,82 (82%)
I.C.95% = (0,68; 0,96) --> utilizando a expressão (2.7)
I.C.95% = (0,625; 0,919) --> utilizando a expressão (2.8)
Logo, estimativa da fração de defeituosos: (1 - 0,82) = 0,18 (18%)
I.C.95% = (0,04; 0,32) --> utilizando a expressão (2.7) para var\((\hat S(t))\)
I.C.95% = (0,081; 0,375) --> utilizando a expressão (2.8)
[c] tempo médio estimado: 20,93 minutos
[d] \(t\) = 2,78 minutos
tempos <- c(7,34,42,63,64,74,83,84,91,108,112,129,133,133,139,140,140,146,149,154,157,160,160,165,173,
176,185,218,225,241,248,273,277,279,297,319,405,417,420,440,523,523,583,594,1101,1116,1146,
1226,1349,1412,1417)
cens <- c(1,1,1,1,1,0, rep(1,20), 0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,1)
ekm <- survfit(Surv(tempos,cens)~1, type=c("kaplan-meier"))
summary(ekm)
[b] tempo mediano estimado: 178 dias
tempo médio estimado: 422 dias com I.C.95% = (293; 552) dias
[d] vmr(1000) = 326 dias --> sem interpolação em S(1000)
vmr(1000) = 356 dias --> com interpolação em S(1000)
[f] (i) t = 114; (ii) t = 418 e (iii) t = 1202 dias
tempos<-c(28,89,175,195,309,377,393,421,447,462,709,744,770,1106,1206,34,88,137,199,280,291,299,
300,309,351,358,369,369,370,375,382,392,429,451,1119)
cens<-c(1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0)
grupos<-c(rep(0,15), rep(1,20))
cbind(tempos,cens,grupos)
require(survival)
ekm<-survfit(Surv(tempos,cens)~grupos, conf.type="log-log")
summary(ekm)
[b] valor p = 0,02 (logrank) e valor p = 0,13 (Wilcoxon)
tempos<-c(31,40,43,44,46,46,47,48,48,49,50,50,rep(60,8),48,48,49,49,49,49,50,50,50,50,53,53,
54,54,54,55,55,55,55,55)
cens<-c(rep(1,16),0,0,0,0,rep(1,16),0,0,0,0)
embal<-c(rep(0,20), rep(1,20))
survdiff(Surv(tempos,cens)~embal, rho=0)
[b] percentil 10 = 44 horas; tempo médio da amostra combinada = 52 horas
tempos<- c(1,3,4,5,5,6,6,5,5,7,7, 1,3,3,6,4,5,7,7,7,7, 2,3,5,5,5,6,5,7,7,7)
cens<- c(1,1,1,1,1,1,1,0,0,0,0, 1,1,1,1,0,0,1,1,0,0, 1,1,1,1,1,1,0,0,0,0)
grupos<- c(1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,3,3)
survdiff(Surv(tempos,cens)~grupos, rho=0)
valor p = 0,9 (logrank)
[a] S(30) = 0,91; S(45) = 0,82
[b] tempo médio: 88,6 dias
[c] tempo mediano: 83,3 dias
[d] \(\lambda(30)\) = 0,006; \(\lambda(45)\) = 0,009; \(\lambda(60)\) = 0,012
tempos<-c(0.19,0.78,0.96,1.31,2.78,3.16,4.67,4.85,6.50,7.35,8.27,12.07,32.52,33.91,36.71, rep(36.71,10))
cens<-c(rep(1,15), rep(0,10))
Utilizando o modelo log-normal
[a] tempo mediano: 19,8 minutos
[b] 1 - S(2) = 0,16
[c] tempo médio: 270 minutos
[d] t = 2,93 minutos
tempos<-c(151,164,336,365,403,454,455,473,538,577,592,628,632,647,675,727,785,801,811,816,867,893,930,937,
976,1008,1040,1051,1060,1183,1329,1334,1379,1380,1633,1769,1827,1831,1849,2016,2282,2415,2430,
2686,2729, rep(2729,15))
cens<-c(rep(1,45), rep(0,15))
Utilizando o modelo log-normal tem-se:
[b] Tempo médio = 2157 horas, com I.C.95% = (1427; 2886)
Tempo mediano = 1373 horas, com I.C.95% = (1072; 1760)
Percentual de falhas após 500 horas = 15%, com I.C.95% = (7; 26)
# Entrada dos dados no R
tempos <- c(7,34,42,63,64,74,83,84,91,108,112,129,133,133,139,140,140,146,149,154,157,160,160,165,173,
176,185,218,225,241,248,273,277,279,297,319,405,417,420,440,523,523,583,594,1101,1116,1146,
1226,1349,1412,1417)
cens <- c(1,1,1,1,1,0, rep(1,20), 0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,1)
tempos<-c(1,2,2,2,2,6,8,8,9,9,13,13,16,17,22,25,29,34,36,43,45,1,2,5,7,7,11,12,19,22,30,35,39,42,46,55)
cens<-c(1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1)
trat<-c(rep(1,21),rep(2,15))
[a] Exponencial
[b] valor p = 0,746
[d] S(40) = 0,2153
# Entrada dos dado no R
tempos<-c(31,40,43,44,46,46,47,48,48,49,50,50,rep(60,8),48,48,49,49,49,49,50,50,50,50,53,53,
54,54,54,55,55,55,55,55)
cens<-c(rep(1,16),0,0,0,0,rep(1,16),0,0,0,0)
embal<-c(rep(0,20), rep(1,20))
tempos<-c(28,89,175,195,309,377,393,421,447,462,709,744,770,1106,1206,34,88,137,199,280,291,299,
300,309,351,358,369,369,370,375,382,392,429,451,1119)
cens<-c(1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0)
grau<-c(rep(0,15), rep(1,20)) # 0 = baixo e 1 = alto
dados<- as.data.frame(cbind(tempos,cens,grau))
require(survival)
fit1<-coxph(Surv(tempos,cens)~factor(grau), method="breslow", dados)
summary(fit1)
[c] I.C.95% para \(\beta_1\) = (0,14; 2,09)
[d] valor p = 0,02 (TRV)
[e] logrank = 5,5
# leitura dos dados no R
dados<-read.table("http://docs.ufpr.br/~giolo/asa/dados/ovario.txt",h=T)
# modelo inicial com todas as covariáveis
fit1<-coxph(Surv(tempo,cens) ~ trat + idade + res + status, method="breslow", dados)
summary(fit1)
# ajustar os demais modelos!
# Dados do exercício 7 - Cap.2
tempos<- c(1,3,4,5,5,6,6,5,5,7,7, 1,3,3,6,4,5,7,7,7,7, 2,3,5,5,5,6,5,7,7,7)
cens<- c(1,1,1,1,1,1,1,0,0,0,0, 1,1,1,1,0,0,1,1,0,0, 1,1,1,1,1,1,0,0,0,0)
grupos<- c(1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,3,3)
fit1<-coxph(Surv(tempos,cens) ~ factor(grupos), method="breslow")
summary(fit1)
hg2<-read.table("https://docs.ufpr.br/~giolo/asa/dados/hg2.txt", h=T)
attach(hg2)
library(survival)
rendac<-ifelse(renda < 4,1,2)
summary(ialtura)
Min. 1st Qu. Median Mean 3rd Qu. Max.
71.0 107.9 120.2 118.8 132.1 154.8
# covariável altura inicial dicotomizada no 1o quartil
alt<-ifelse(ialtura < 108,1,2)
leucc<-read.table("https://docs.ufpr.br/~giolo/asa/dados/leucc.txt",h=T)
attach(leucc)
# Pacote timereg: ajuste de extensão do modelo de Cox (efeito de todas as covariáveis variando no tempo)
require(timereg)
fit3a<-timecox(Surv(tempos,cens)~leuinic + idadec + zpesoc + pasc + vacc, data=leucc, max.time=3.4)
summary(fit3a)
# Pacote timereg: ajuste de extensão do modelo de Cox (efeito de leuinic e pasc variando no tempo)
fit3b<-timecox(Surv(tempos,cens)~leuinic + const(idadec) + const(zpesoc) + pasc + const(vacc),
data=leucc, max.time=3.4)
summary(fit3b)
# Modelo de Cox padrão
hg2<-read.table("https://www.ufpr.br/~giolo/asa/dados/hg2.txt",h=T)
attach(hg2)
library(survival)
rendac<-ifelse(renda < 4,1,2)
fit2<-coxph(Surv(tempos, cens) ~ factor(raca) + factor(trauma) + factor(recemnas) + factor(rendac)
+ ialtura + factor(trauma)*factor(recemnas), data = hg2, method = "breslow")
summary(fit2)
# Pacote timereg: ajuste de extensão do modelo de Cox (efeito das 4 covariáveis variando no tempo)
times<-hg2$tempos+rnorm(80,0,0.02)
library(timereg)
fit4a<-timecox(Surv(times,cens)~ialtura + factor(raca) + factor(trauma) + factor(rendac),
data=hg2, max.time=40)
summary(fit4a)
# Modelo de Cox estratificado (altura inicial)
alt<-ifelse(ialtura < 120,1,2)
fit4<-coxph(Surv(tempos,cens)~factor(raca) + factor(trauma) + factor(rendac) + strata(alt),
data=hg2, method="breslow")
summary(fit4)
cox.zph(fit4, transform="identity")
library(survival)
tempos<-c(31,40,43,44,46,46,47,48,48,49,50,50,rep(60,8),48,48,49,49,49,49,50,50,50,50,53,53,
54,54,54,55,55,55,55,55)
cens<-c(rep(1,16),0,0,0,0,rep(1,16),0,0,0,0)
embal<-c(rep(0,20),rep(1,20))
dados<-as.data.frame(cbind(tempos, cens, embal))
# Ajuste do modelo de Aalen utilizando o pacote addreg
source("http://www.ufpr.br/~giolo/asa/arquivos/Addreg.r")
fit1<- addreg(Surv(tempos,cens) ~ factor(embal), dados)
summary(fit1)
names(fit1)
# Ajuste do modelo de Aalen utilizando o pacote timereg
library(timereg)
fit1<- aalen(Surv(tempos,cens) ~ factor(embal), max.time=55, dados)
fit1
# Análise gráfica dos resíduos
fit1.1<- aalen(Surv(tempos,cens) ~ factor(embal), residuals=1, max.time=55, dados)
n<-dim(dados)[1]
rm<-matrix(0,n,1) # rm = resíduos martingal
for(i in 1:n){
rm[i]<-sum(fit1.1$residuals$dM[,i])
}
delta<-dados$cens
ei<-delta-rm # ei = resíduos de Cox-Snell
par(mfrow=c(1,2))
r.surv <- survfit(Surv(ei,delta)~1, type="fleming-harrington")
e<-r.surv$time
He<- -log(r.surv$surv)
plot(e,He,type="s", xlab="Resíduos Cox-Snell", ylab="Taxa de Falha Acumulada")
t <- seq(0, max(e), length=100)
lines(t,t, lwd=2)
title("(a)", cex=1)
st<- r.surv$surv
sexp<-exp(-e)
plot(st,sexp, xlab="S(ei): K-M", ylab="S(ei): Exp(1)", pch=16, ylim=c(0,1), xlim=c(0,1))
abline(a=0, b=1, lwd=1)
title("(b)", cex=1)
leuc<-read.table("https://docs.ufpr.br/~giolo/asa/dados/leucemia.txt",h=T)
attach(leuc)
idadec<-ifelse(idade>96,1,0)
leuinic<-ifelse(leuini>75,1,0)
zpesoc<-ifelse(zpeso>-2,1,0)
zestc<-ifelse(zest>-2,1,0)
vacc<-ifelse(vac>15,1,0)
pasc<-ifelse(pas>5,1,0)
riskc<-ifelse(risk>1.7,1,0)
r6c<-r6
leucc<-as.data.frame(cbind(leuinic,tempos,cens,idadec,zpesoc,zestc,pasc,vacc,riskc,r6c))
detach(leuc)
attach(leucc)
# Ajuste do modelo de Aalen -> pacote addreg
source("http://www.ufpr.br/~giolo/asa/arquivos/Addreg.r")
fit1<-addreg(Surv(tempos,cens) ~ idadec + leuinic + zpesoc + zestc + vacc + pasc + riskc + r6c, leucc)
summary(fit1)
# Ajuste do modelo de Aalen -> pacote timereg
library(timereg)
fit1<-aalen(Surv(tempos,cens) ~ idadec + leuinic + zpesoc + zestc + vacc + pasc + riskc + r6c,
max.time=55, residuals=1, leucc)
# Modelo após exclusão (uma a uma) das variáveis com efeito não significativo
fit1<- aalen(Surv(tempos,cens) ~ idadec + leuinic, max.time=55, residuals=1, leucc)
summary(fit1)
# Análise gráfica dos resíduos -> modelo final
n<-dim(leucc)[1]
rm<-matrix(0,n,1) # resíduos martingal
for(i in 1:n){
rm[i]<-sum(fit1$residuals$dM[,i])
}
delta<-leucc$cens
ei<-delta-rm # resíduos de Cox-Snell
par(mfrow=c(1,2))
r.surv <- survfit(Surv(ei,delta)~1, type="fleming-harrington")
e<-r.surv$time
He<- -log(r.surv$surv)
plot(e,He,type="s", xlab="Resíduos Cox-Snell", ylab="Taxa de Falha Acumulada")
t <- seq(0, max(e), length=100)
lines(t,t,lwd=2)
title("(a)", cex=1)
st<- r.surv$surv
sexp<-exp(-e)
plot(st,sexp, xlab="S(ei): K-M", ylab="S(ei): Exp(1)", pch=16, ylim=c(0,1), xlim=c(0,1))
abline(a=0, b=1, lwd=1)
title("(b)", cex=1)
temp<-c(65,156,100,134,16,108,121,4,39,143,56,26,22,1,1,5,65,56,65,17,7,16,22,3,4,2,3,8,4,3,30,4,43)
cens<-c(rep(1,17), rep(1,16))
lwbc<-c(3.36,2.88,3.63,3.41,3.78,4.02,4,4.23,3.73,3.85,3.97,4.51,4.54,5,5,4.72,5,3.64,3.48,3.6,
3.18,3.95,3.72,4,4.28,4.43,4.45,4.49,4.41,4.32,4.90,5,5)
grupo<-c(rep(0,17), rep(1,16))
dados<-as.data.frame(cbind(temp,cens,lwbc,grupo))
attach(dados)
lwbc1<-lwbc - mean(lwbc) # centrando lwbc na média
require(survival)
# Ajuste do modelo de Aalen -> pacote addreg
source("http://www.ufpr.br/~giolo/asa/arquivos/Addreg.r")
fit1<- addreg(Surv(temp,cens) ~ lwbc1 + grupo, dados)
# Ajuste do modelo de Aalen -> pacote timereg
require(timereg)
fit1<- aalen(Surv(temp,cens) ~ lwbc1 + grupo, max.time=65, residuals=1, dados)
summary(fit1)
# Análise de resíduos
n<-dim(dados)[1]
rm<-matrix(0,n,1) # resíduos martingal
for(i in 1:n){
rm[i]<-sum(fit1$residuals$dM[,i])
}
delta<-dados$cens
ei<-delta-rm # resíduos de Cox-Snell
par(mfrow=c(1,2))
r.surv <- survfit(Surv(ei,delta)~1, type="fleming-harrington")
e<-r.surv$time
He<- -log(r.surv$surv)
plot(e,He, type="s", xlab="Resíduos Cox-Snell", ylab="Taxa de Falha Acumulada")
t <- seq(0, max(e), length=100)
lines(t, t, lwd=2)
title("(a)", cex=1)
st<- r.surv$surv
sexp<-exp(-e)
plot(st, sexp, xlab="S(ei): K-M", ylab="S(ei): Exp(1)", pch=16, ylim=c(0,1), xlim=c(0,1))
abline(a=0, b=1, lwd=1)
title("(b)", cex=1)
library(survival)
source("http://docs.ufpr.br/~giolo/asa/arquivos/Turnbull.R") # leitura da função Turnbull.R
mang<-read.table("https://docs.ufpr.br/~giolo/asa/dados/mang.txt",h=T) # leitura dos dados
left<-mang$li
right<-mang$ui
dat<-as.data.frame(cbind(left, right))
attach(dat)
table(dat$left[dat$left<21]) # Frequências mostradas na Tabela 8.6
right[is.na(right)] <- Inf
tau <- cria.tau(dat)
p <- S.ini(tau=tau)
A <- cria.A(data=dat, tau=tau)
tb <- Turnbull(p,A,dat)
tb
cbind(tb$time, tb$surv)
plot(tb$time, tb$surv, lty=1, type = "s", ylim=c(0,1), xlim=c(0,21), xlab="Tempos (anos)", ylab="S(t)")
Critério Seção 8.7 => pe = (r - k)/n = (154 - 11)/210 = 0.68
library(survival)
tempos<- c(1,2,3,3,3,5,5,16,16,16,16,16,16,16,16,1,1,1,1,4,5,7,8,10,10,12,16,16,16)
cens<-c(0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0)
grupos<-c(rep(1,15),rep(2,14))
fit<-coxph(Surv(tempos,cens) ~ grupos, method="breslow")
summary(fit)
cox.zph(fit)
# Análise dos resíduos de Cox-Snell
resm<-resid(fit, type="martingale")
res<-cens - resm # resíduos de Cox-Snell
ekm <- survfit(Surv(res, cens)~1)
summary(ekm)
par(mfrow=c(1,1))
plot(ekm, mark.time=F, conf.int=F, xlab="resíduos", ylab="S(e) estimada")
res<-sort(res)
exp1<-exp(-res)
lines(res, exp1, lty=3)
legend(1, 0.8, lty=c(1,3), c("Kaplan Meier","Exponencial(1)"), lwd=1, bty="n", cex=0.7)
pele<-read.table("https://docs.ufpr.br/~giolo/asa/dados/pele.txt",h=T)
i<-order(pele$survtime)
pele<-pele[i,]
attach(pele)
pele$x1<-ifelse(pele$Sexo=="M",1,0)
pele$x2[pele$Idade %in% c(18:39)]<-'18-39'
pele$x2[pele$Idade %in% c(40:59)]<-'40-59'
pele$x2[pele$Idade %in% c(60:80)]<-'60-80'
pele$x3<-Estadio
library(flexcure) # instalar previamente o pacote flexcure
help(curereg) # se desejar ver detalhes da função curereg
m1<-curereg(Surv(survtime, status) ~ factor(x3), cureformula = ~ factor(x1) + factor(x3), data = pele,
ncausedist = "bernoulli", timedist="weibull", method = "L-BFGS-B")
# Obs: métodos de otimização => method = "BFGS" (ou "Nelder-Mead", "CG", "L-BFGS-B", "SANN")
summary(m1)
AIC(m1) # Akaike information criterion
BIC(m1) # Bayesian information criterion
logLik(m1) # Log-Likelihood
vcov(m1) # Variance-Covariance Matrix
cure <- curefraction(m1); cure
mean(cure[,"curefraction"])
library(ggplot2)
par(mfrow=c(1,1))
plot(m1, mark.time=F, ylab="Sp(t)", xlab="Tempos") # curvas de Kaplan-Meier versus as preditas pelo modelo
library(flexcure)
melm<-read.table("https://docs.ufpr.br/~giolo/asa/dados/melanoma.txt",h=T)
attach(melm)
melm$tempos<-days/365
m1<-curereg(Surv(tempos, cens) ~ factor(sex) + factor(esp) + factor(ulc),
cureformula = ~ factor(sex) + factor(esp) + factor(ulc), data = melm,
ncausedist = "poisson", timedist="weibull", method = "L-BFGS-B")
summary(m1)
m2<-curereg(Surv(tempos, cens) ~ factor(sex) + factor(esp),
cureformula = ~ + factor(ulc), data = melm,
ncausedist = "poisson", timedist="weibull", method = "L-BFGS-B")
summary(m2)
AIC(m2) # Akaike information criterion
BIC(m2) # Bayesian information criterion
cure <- curefraction(m2); cure # proporção de cura para as combinações
mean(cure[,"curefraction"])
# Sp(t|x,z) para todas as combinações
library(ggplot2)
par(mfrow=c(1,1))
plot(m2, mark.time=F, ylab="Sp(t)", xlab="Tempos")
Copyright © 2024 Suely Ruiz Giolo