library(survival)
str(lung)
## 'data.frame': 228 obs. of 10 variables:
## $ inst : num 3 3 3 5 1 12 7 11 1 7 ...
## $ time : num 306 455 1010 210 883 ...
## $ status : num 2 2 1 2 2 1 2 2 2 2 ...
## $ age : num 74 68 56 57 60 74 68 71 53 61 ...
## $ sex : num 1 1 1 1 1 1 2 2 1 1 ...
## $ ph.ecog : num 1 0 0 1 0 1 2 2 1 2 ...
## $ ph.karno : num 90 90 90 90 100 50 70 60 70 70 ...
## $ pat.karno: num 100 90 90 60 90 80 60 80 80 70 ...
## $ meal.cal : num 1175 1225 NA 1150 NA ...
## $ wt.loss : num NA 15 15 11 0 0 10 1 16 34 ...
lote <- lung$inst
# Time : de supervivencia de la planta
# Status : Estado de censura, 1-Censurado, 2-No censurado
# Age : Edad de la palma
hibridos <- lung$sex
sev <- lung$ph.ecog
N17 <- lung$meal.cal
P17 <- lung$wt.loss
lung.ent <- Surv(lung$time, lung$status)
# cbind(lung$time, lung$status, lung.ent)
Método de estimador kaplan Meier
lung.end.fit <- survfit(lung.ent ~ 1)
# summary(lung.end.fit)
plot(lung.end.fit, xlab = "Días", ylab = "Probabilidad de supervivencia", col = c("red","blue","blue"), main = "Cuantiles de supervivencia de palmas")
abline(h = c(0.25, 0.5, 0.75), col = "#660000", lwd = 1.2)
#Área de probabilidad de individuos con 25% de supervivencia
lines(c(170,195), c(0.7, 0.75), col = "blue", lwd = 1.85)
lines(c(195,170), c(0.75, 0.8), col = "blue", lwd = 1.85)
lines(c(170,145), c(0.8, 0.75), col = "blue", lwd = 1.85)
lines(c(145,170), c(0.75, 0.7), col = "blue", lwd = 1.85)
#Área de probabilidad de individuos con 50% de supervivencia
lines(c(280,310), c(0.5, 0.57), col = "blue", lwd = 1.85)
lines(c(310,360), c(0.57, 0.5), col = "blue", lwd = 1.85)
lines(c(360,310), c(0.5, 0.43), col = "blue", lwd = 1.85)
lines(c(310,280), c(0.43, 0.5), col = "blue", lwd = 1.85)
#Área de probabilidad de individuos con 75% de supervivencia
lines(c(550,655), c(0.33, 0.25), col = "blue", lwd = 1.85)
lines(c(665,550), c(0.25, 0.19), col = "blue", lwd = 1.85)
lines(c(550,460), c(0.19, 0.25), col = "blue", lwd = 1.85)
lines(c(460,550), c(0.25, 0.33), col = "blue", lwd = 1.85)
text(800, 0.8, "75% palmas vivas")
text(800, 0.55, "50% palmas vivas")
text(800, 0.3, "25% palmas vivas")
legend(100, 0.2, c("IC", "Real"),lty = 7:8, col = c("red","blue","blue"))
Se muestran áreas de probabilidad de supervivencia del 25, 50 y 75% de las plantas de palma a lo largo de 1013 días: * El 25% de las palmas aproximadamente mueren entre los 170 y los 195 días. * El 50% de las palmas aproximadamente mueren entre los 280 y los 360 días. * El 75% de las palmas aproximadamente mueren entre los 460 y los 665 días.
lung.end.fit <- survfit(lung.ent ~ sev, lung)
plot(lung.end.fit, lty = 8:11, col = 7:10, xlab = "Días", ylab = "Probabilidad de supervivencia", lwd = 2, main = "Supervivencia de palmas con 4 niveles de severidad")
legend(600, .9, c("Severidad = 0", "Severidad = 1", "Severidad = 2", "Severidad = 3"), lty = 8:11, col = 7:10)
abline(h = 0.5, lwd = 2, col = "blue")
abline(v = 200, lwd = 2, col = "blue")
abline(v = 310, lwd = 2, col = "blue")
abline(v = 390, lwd = 2, col = "blue")
points(c(200, 310, 390), c(0.5, 0.5, 0.5), cex = 1.2)
lung.fit.hib <- survfit(lung.ent ~ hibridos , lung)
plot(lung.fit.hib, lty = 1:2, conf.int = 0.95, col =c(7,10), xlab = "Días", ylab = "Probabilidad de supervivencia", lwd = 2, main = "Comparación de supervivencia de 2 tipos de hibridos de palma")
legend(700, .9, c("Hibrido 1", "Hibrido 2"), lty = 1:2, col = c(7,10))
abline(h = 0.5, col = "blue", lwd = 2)
abline(v = 400, col = "blue", lwd = 2)
abline(v = 270, col = "blue", lwd = 2)
abline(h = 0.3, col = "blue", lwd = 2)
abline(h = 0.08, col = "blue", lwd = 2)
points(c(270, 400, 400, 770), c(0.5, 0.5, 0.3, 0.08), cex = 1.2)
#install.packages("km.ci")
library(km.ci)
lung.end.fit <- survfit(lung.ent ~ 1)
b <- km.ci(lung.end.fit, conf.level = 0.95, tl = NA, tu = NA, method = "loghall")
plot(b, lty = 2, lwd = 2, col = 'red', main = "Intervalos de confianza estimadores de supervivencia", ylab = "Probabilidad de supervivencia", xlab = "Días")
lines(lung.end.fit, lwd=2, lty=1, col = 'black')
lines(lung.end.fit, lwd=1, lty=4, conf.int=T, col = 'blue')
linetype<-c(1, 2, 4)
legend(600, .9, c("Kaplan-Meier", "Hall-Wellner", "Pointwise"),
lty = linetype,
col = c('red', 'black', 'blue'))
abline(h = 0.5, col='maroon3', lwd=2)
abline(v = 310, col='maroon3', lwd=2)
aalen.fit.ent<- survfit(coxph(lung.ent~1), type="aalen")
sum_aalen.fit.ent = summary(aalen.fit.ent)
plot(aalen.fit.ent, col="red",lwd=1,lty=1, main = 'Estimador Nelson-Aelen vs Kaplan-Meier',ylab = "Probabilidad de supervivencia", xlab = "Días")
lines(lung.end.fit, lwd=1, lty=1, col = "#0066CC")
legend(600, 0.9,
c("Nelson-Aalen", "Kaplan-Meier"),
lty=c(1,1),
col=c("red", "#0066CC"))
barplot(sum_aalen.fit.ent$time, cumsum(sum_aalen.fit.ent$n.event), xlab = "Número de muertes acumuladas", ylab = "Días", col = "red", main = "Muertes acumuladas de plantas de palma en el tiempo", ylim = c(0,1000))
mod_suv_ent = lm(cumsum(sum_aalen.fit.ent$n.event) ~ sum_aalen.fit.ent$time)
summary(mod_suv_ent)
##
## Call:
## lm(formula = cumsum(sum_aalen.fit.ent$n.event) ~ sum_aalen.fit.ent$time)
##
## Residuals:
## Min 1Q Median 3Q Max
## -49.044 -11.535 4.049 12.868 20.208
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 22.178043 2.171525 10.21 <2e-16 ***
## sum_aalen.fit.ent$time 0.217289 0.005911 36.76 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.43 on 137 degrees of freedom
## Multiple R-squared: 0.908, Adjusted R-squared: 0.9073
## F-statistic: 1352 on 1 and 137 DF, p-value: < 2.2e-16
plot(sum_aalen.fit.ent$time, cumsum(sum_aalen.fit.ent$n.event), pch = 16, ylab = "Suma acumulada de muertes", xlab = "Días", main = "Modelo de la suma acumulada de muertes de palma en el tiempo")
abline(mod_suv_ent, col = "red", lwd = 2)
*El modelo nos indica que el tiempo es importante en la cantidad de muertes acumuladas de plantas, la recta que mejor se ajusta a este modelo se presenta en color rojo.
survdiff(lung.ent~sev,lung)
## Call:
## survdiff(formula = lung.ent ~ sev, data = lung)
##
## n=227, 1 observation deleted due to missingness.
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## sev=0 63 37 54.153 5.4331 8.2119
## sev=1 113 82 83.528 0.0279 0.0573
## sev=2 50 44 26.147 12.1893 14.6491
## sev=3 1 1 0.172 3.9733 4.0040
##
## Chisq= 22 on 3 degrees of freedom, p= 7e-05
*Esta función survdiff nos indica con el parámetro Chi-cuadrado que los niveles de severidad (0 - 4) no cumplen la hipótesis de igualdad, es decir que la probabilidad de encontrar 2 curvas iguales en los diferentes grados de severidad es baja, los niveles de severidad de la enfermedad son diferentes.
# Prueba de log-rank or Mantel-Haenszel
survdiff(lung.ent~hibridos,lung, rho = 0)
## Call:
## survdiff(formula = lung.ent ~ hibridos, data = lung, rho = 0)
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## hibridos=1 138 112 91.6 4.55 10.3
## hibridos=2 90 53 73.4 5.68 10.3
##
## Chisq= 10.3 on 1 degrees of freedom, p= 0.001
# Prueba de Peto & Peto modification of the Gehan-Wilcoxon test
survdiff(lung.ent~hibridos,lung, rho = 1)
## Call:
## survdiff(formula = lung.ent ~ hibridos, data = lung, rho = 1)
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## hibridos=1 138 70.4 55.6 3.95 12.7
## hibridos=2 90 28.7 43.5 5.04 12.7
##
## Chisq= 12.7 on 1 degrees of freedom, p= 4e-04
survdiff(lung.ent~hibridos + sev,lung)
## Call:
## survdiff(formula = lung.ent ~ hibridos + sev, data = lung)
##
## n=227, 1 observation deleted due to missingness.
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## hibridos=1, sev=0 36 28 33.051 0.772 0.986
## hibridos=1, sev=1 71 54 43.318 2.634 3.636
## hibridos=1, sev=2 29 28 14.416 12.799 14.128
## hibridos=1, sev=3 1 1 0.172 3.973 4.004
## hibridos=2, sev=0 27 9 21.101 6.940 8.020
## hibridos=2, sev=1 42 28 40.210 3.707 4.999
## hibridos=2, sev=2 21 16 11.731 1.553 1.693
##
## Chisq= 32.9 on 6 degrees of freedom, p= 1e-05
par.wei.ent <- survreg(lung.ent~1,dist="w")
par.wei.ent
## Call:
## survreg(formula = lung.ent ~ 1, dist = "w")
##
## Coefficients:
## (Intercept)
## 6.034904
##
## Scale= 0.7593936
##
## Loglik(model)= -1153.9 Loglik(intercept only)= -1153.9
## n= 228
kappa.ent <- par.wei.ent$scale
lambda.ent <- exp(-par.wei.ent$coeff[1])
zeit.ent <- seq(from=0,to=1100,length.out=1000)
s.ent <- exp(-(lambda.ent*zeit.ent)^kappa.ent)
h.ent <- lambda.ent^kappa.ent *kappa.ent*zeit.ent^(kappa.ent-1)
par(mfrow=c(2,1))
plot(zeit.ent,h.ent,xlab="Days",ylab="h(t)", pch = 16, cex = 0.1, las = 1, main = "Riesgo de muerte en el tiempo")
plot(zeit.ent,s.ent,xlab="Days",ylab="s(t)", pch = 16, cex = 0.1, las = 1, main = "Supervivencia en el tiempo")
El riesgo de muerte en el tiempo va disminuyendo en un modelo paramétrico donde el tiempo sigue una distribución Weibull. La probabilidad de supervivencia de las palmas disminuye en el tiempo de una forma similar a cuando se realiza con un método no paramétrico (función “Surv()”)