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)

Modeling non parametric

Método de estimador kaplan Meier

lung.end.fit <- survfit(lung.ent ~ 1)
# summary(lung.end.fit)

Cuantiles de supervivencia

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"))

Interpretación:

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)

Interpretación

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)

Interpretación

Intervalos de confianza para el estimador Kaplan-Meier

#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)

Interpretación

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"))

Interpretación

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))

Interpretación

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)

Interpretación

*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

Interpretación

*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

Interpretación

# 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

Interpretación

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

Interpretación

Modelo paramétrico

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")

Interpretación

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()”)

Conclusión