Los siguientes datos(Descargar) fueron tomados de la tabla 3.1 de la tercera edición del libro Statistical Methods for Survival Data Analyse de Elisa T. Lee y John Wenyu Wang. Las columnas “Censura Rd” y “Censura ST” fueron agregadas para indicar sensura en los datos de Remission Duration y Survival Time respectivamente, donde “s” indica que el dato esta censurado y “m” lo contrario.
Son datos de 30 pacientes con melanoma en 4 estados, donde se realizo un estudio para comparar dos tratamientos BCG(1) y Corynebacterium parvun(2). SE midio el tiempo supervivencia y la duracion de la remisión.
#leemos los datos
library(dplyr)
library(xtable)
library(openxlsx)
sup<-read.xlsx("superviv.xlsx")
#Tomamos los datos necesarios para estimar la funcion de superviencia s(t)
sup<-select(sup,Patient,Tratament.Received,Survival.Time,Censura.ST)
#Ordenamos los datos por el tiempo de supervivencia
sup<-sup[order(sup$Survival.Time),]
Ya que tenemos los datos ordenados por tiempo de supervivencia estimaresmo una funcion para la misma, por separado pra cada uno de los dos tratamientos.
#Filtramos los datos para el tratamiento BCG
BCG<-filter(sup,Tratament.Received==1)
#Calculamos r "posicion de los datos sin censura"
r<-vector()
for(i in 1:nrow(BCG)){
if(BCG$Censura.ST[i]=="m"){
r[i]<-i
}else{
r[i]<-NA
}
}
BCG<-cbind(BCG,r)
Calcularemos la proporcion de pacientes que sobrevie a cada intervalo como
\[sup\_int=\dfrac{n-r}{n-r+1}\]
donde \(n\) es el tamaño de la muestra y \(r\) es el rango no censurado.
#Calcular el tamaño de la muestra
n=nrow(BCG)
#Calcular la proporcion de supervivienca por intervalo.
BCG<-mutate(BCG,sup_int=(n-r)/(n-r+1))
Ahora calcularemos \[\hat{s}(t)=\hat{s}(t-1)*sup\_int_t\]
denotaremos en la tabla a \(\hat{s}(t)\) simplemente como “S”.
BCG$S<-NA
for(i in 1:n){
if((!is.na(BCG$r[i]))&(BCG$r[i]==1)){
BCG$S[i]<-BCG$sup_int[i]
a<-i
}
if((!is.na(BCG$r[i]))&(!BCG$r[i]==1)){
BCG$S[i]<-BCG$sup_int[i]*BCG$S[a]
a<-i
}
}
Calcularemos la desviación estandar de \(\hat{S}(t)\) con la formula de Greenwood.
\[s.e.\{\hat{S}(t)\}\approx [\hat{S}(t)]\left\{\sum_{j=1}^{k}\dfrac{d_j}{(n-r+1)(n-r)}\right\}^{1/2}\] Tomando en cuenta que para todo j \(d_j=1\)
g<-BCG[BCG$Censura.ST=="m",]
aux<-vector()
se<-vector()
for(i in 1:nrow(g)){
for(j in 1:i){
aux[j]<-1/((n-g$r[j])*(n-g$r[j]+1))
}
se[i]<-(g$S[i])*(sum(aux)^(.5))
}
g<-cbind(g,se)
Calculemos los intervalos de confianza para S al 95%. Dados por
\[\hat{S}(t)\pm1.96s.e.\{\hat{S}(t)\}\]
#Calcula los limites del intervalo de confianza
g<-mutate(g, li=S-1.96*se,ls=S+1.96*se)
#Une los datos de g con los datos completos
BCG<-full_join(BCG,select(g,r,se,li,ls),by="r")
#imprime la tabla de resultados
print(xtable(BCG),type="html")
| Patient | Tratament.Received | Survival.Time | Censura.ST | r | sup_int | S | se | li | ls | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2.00 | 1.00 | 3.90 | m | 1 | 0.91 | 0.91 | 0.09 | 0.74 | 1.08 |
| 2 | 4.00 | 1.00 | 5.40 | m | 2 | 0.90 | 0.82 | 0.12 | 0.59 | 1.05 |
| 3 | 7.00 | 1.00 | 7.90 | m | 3 | 0.89 | 0.73 | 0.13 | 0.46 | 0.99 |
| 4 | 3.00 | 1.00 | 10.50 | m | 4 | 0.88 | 0.64 | 0.15 | 0.35 | 0.92 |
| 5 | 9.00 | 1.00 | 16.60 | s | ||||||
| 6 | 8.00 | 1.00 | 16.90 | s | ||||||
| 7 | 11.00 | 1.00 | 17.10 | s | ||||||
| 8 | 5.00 | 1.00 | 19.50 | m | 8 | 0.75 | 0.48 | 0.18 | 0.13 | 0.82 |
| 9 | 6.00 | 1.00 | 23.80 | s | ||||||
| 10 | 1.00 | 1.00 | 33.70 | s | ||||||
| 11 | 10.00 | 1.00 | 33.70 | s |
Grafia de superviencia para el tratamiento BCG
plot(g$S~g$Survival.Time,data=g,type="s"
,xlim=c(0,max(g$Survival.Time)),ylim=c(0,max(g$ls))
,xlab="Survival Time",ylab="S(t)")
lines(g$li~g$Survival.Time,data=g,type="s")
lines(g$ls~g$Survival.Time,data=g,type="s")
#Filtramos los datos para el tratamiento BCG
BCG<-filter(sup,Tratament.Received==2)
#Calculamos r "posicion de los datos sin censura"
r<-vector()
for(i in 1:nrow(BCG)){
if(BCG$Censura.ST[i]=="m"){
r[i]<-i
}else{
r[i]<-NA
}
}
BCG<-cbind(BCG,r)
Calcularemos la proporcion de pacientes que sobrevie a cada intervalo como
\[sup\_int=\dfrac{n-r}{n-r+1}\]
donde \(n\) es el tamaño de la muestra y \(r\) es el rango no censurado.
#Calcular el tamaño de la muestra
n=nrow(BCG)
#Calcular la proporcion de supervivienca por intervalo.
BCG<-mutate(BCG,sup_int=(n-r)/(n-r+1))
Ahora calcularemos \[\hat{s}(t)=\hat{s}(t-1)*sup\_int_t\]
denotaremos en la tabla a \(\hat{s}(t)\) simplemente como “S”.
BCG$S<-NA
for(i in 1:n){
if((!is.na(BCG$r[i]))&(BCG$r[i]==1)){
BCG$S[i]<-BCG$sup_int[i]
a<-i
}
if((!is.na(BCG$r[i]))&(!BCG$r[i]==1)){
BCG$S[i]<-BCG$sup_int[i]*BCG$S[a]
a<-i
}
}
Calcularemos la desviación estandar de \(\hat{S}(t)\) con la formula de Greenwood.
\[s.e.\{\hat{S}(t)\}\approx [\hat{S}(t)]\left\{\sum_{j=1}^{k}\dfrac{d_j}{(n-r+1)(n-r)}\right\}^{1/2}\] Tomando en cuenta que para todo j \(d_j=1\)
g<-BCG[BCG$Censura.ST=="m",]
aux<-vector()
se<-vector()
for(i in 1:nrow(g)){
for(j in 1:i){
aux[j]<-1/((n-g$r[j])*(n-g$r[j]+1))
}
se[i]<-(g$S[i])*(sum(aux)^(.5))
}
g<-cbind(g,se)
Calculemos los intervalos de confianza para S al 95%. Dados por
\[\hat{S}(t)\pm1.96s.e.\{\hat{S}(t)\}\]
#Calcula los limites del intervalo de confianza
g<-mutate(g, li=S-1.96*se,ls=S+1.96*se)
#Une los datos de g con los datos completos
BCG<-full_join(BCG,select(g,r,se,li,ls),by="r")
#imprime la tabla de resultados
print(xtable(BCG),type="html")
| Patient | Tratament.Received | Survival.Time | Censura.ST | r | sup_int | S | se | li | ls | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 17.00 | 2.00 | 6.90 | m | 1 | 0.95 | 0.95 | 0.05 | 0.85 | 1.05 |
| 2 | 26.00 | 2.00 | 7.70 | m | 2 | 0.94 | 0.89 | 0.07 | 0.76 | 1.03 |
| 3 | 30.00 | 2.00 | 7.80 | s | ||||||
| 4 | 12.00 | 2.00 | 8.00 | m | 4 | 0.94 | 0.84 | 0.09 | 0.67 | 1.01 |
| 5 | 28.00 | 2.00 | 8.20 | s | ||||||
| 6 | 29.00 | 2.00 | 8.20 | s | ||||||
| 7 | 21.00 | 2.00 | 8.30 | m | 7 | 0.92 | 0.77 | 0.10 | 0.58 | 0.97 |
| 8 | 22.00 | 2.00 | 10.80 | s | ||||||
| 9 | 18.00 | 2.00 | 11.00 | s | ||||||
| 10 | 23.00 | 2.00 | 12.20 | s | ||||||
| 11 | 24.00 | 2.00 | 12.50 | s | ||||||
| 12 | 27.00 | 2.00 | 14.80 | s | ||||||
| 13 | 16.00 | 2.00 | 16.00 | s | ||||||
| 14 | 15.00 | 2.00 | 18.10 | s | ||||||
| 15 | 14.00 | 2.00 | 21.40 | s | ||||||
| 16 | 20.00 | 2.00 | 23.00 | s | ||||||
| 17 | 25.00 | 2.00 | 24.40 | m | 17 | 0.67 | 0.52 | 0.22 | 0.08 | 0.95 |
| 18 | 19.00 | 2.00 | 24.80 | s | ||||||
| 19 | 13.00 | 2.00 | 26.90 | s |
Grafia de superviencia para el tratamiento BCG
plot(g$S~g$Survival.Time,data=g,type="s"
,xlim=c(0,max(g$Survival.Time)),ylim=c(0,max(g$ls))
,xlab="Survival Time",ylab="S(t)")
lines(g$li~g$Survival.Time,data=g,type="s")
lines(g$ls~g$Survival.Time,data=g,type="s")
#Filtramos los datos para el tratamiento BCG
BCG<-sup
#Calculamos r "posicion de los datos sin censura"
r<-vector()
for(i in 1:nrow(BCG)){
if(BCG$Censura.ST[i]=="m"){
r[i]<-i
}else{
r[i]<-NA
}
}
BCG<-cbind(BCG,r)
Calcularemos la proporcion de pacientes que sobrevie a cada intervalo como
\[sup\_int=\dfrac{n-r}{n-r+1}\]
donde \(n\) es el tamaño de la muestra y \(r\) es el rango no censurado.
#Calcular el tamaño de la muestra
n=nrow(BCG)
#Calcular la proporcion de supervivienca por intervalo.
BCG<-mutate(BCG,sup_int=(n-r)/(n-r+1))
Ahora calcularemos \[\hat{s}(t)=\hat{s}(t-1)*sup\_int_t\]
denotaremos en la tabla a \(\hat{s}(t)\) simplemente como “S”.
BCG$S<-NA
for(i in 1:n){
if((!is.na(BCG$r[i]))&(BCG$r[i]==1)){
BCG$S[i]<-BCG$sup_int[i]
a<-i
}
if((!is.na(BCG$r[i]))&(!BCG$r[i]==1)){
BCG$S[i]<-BCG$sup_int[i]*BCG$S[a]
a<-i
}
}
Calcularemos la desviación estandar de \(\hat{S}(t)\) con la formula de Greenwood.
\[s.e.\{\hat{S}(t)\}\approx [\hat{S}(t)]\left\{\sum_{j=1}^{k}\dfrac{d_j}{(n-r+1)(n-r)}\right\}^{1/2}\] Tomando en cuenta que para todo j \(d_j=1\)
g<-BCG[BCG$Censura.ST=="m",]
aux<-vector()
se<-vector()
for(i in 1:nrow(g)){
for(j in 1:i){
aux[j]<-1/((n-g$r[j])*(n-g$r[j]+1))
}
se[i]<-(g$S[i])*(sum(aux)^(.5))
}
g<-cbind(g,se)
Calculemos los intervalos de confianza para S al 95%. Dados por
\[\hat{S}(t)\pm1.96s.e.\{\hat{S}(t)\}\]
#Calcula los limites del intervalo de confianza
g<-mutate(g, li=S-1.96*se,ls=S+1.96*se)
#Une los datos de g con los datos completos
BCG<-full_join(BCG,select(g,r,se,li,ls),by="r")
#imprime la tabla de resultados
print(xtable(BCG),type="html")
| Patient | Tratament.Received | Survival.Time | Censura.ST | r | sup_int | S | se | li | ls | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2.00 | 1.00 | 3.90 | m | 1 | 0.97 | 0.97 | 0.03 | 0.90 | 1.03 |
| 2 | 4.00 | 1.00 | 5.40 | m | 2 | 0.97 | 0.93 | 0.05 | 0.84 | 1.02 |
| 3 | 17.00 | 2.00 | 6.90 | m | 3 | 0.96 | 0.90 | 0.05 | 0.79 | 1.01 |
| 4 | 26.00 | 2.00 | 7.70 | m | 4 | 0.96 | 0.87 | 0.06 | 0.75 | 0.99 |
| 5 | 30.00 | 2.00 | 7.80 | s | ||||||
| 6 | 7.00 | 1.00 | 7.90 | m | 6 | 0.96 | 0.83 | 0.07 | 0.70 | 0.97 |
| 7 | 12.00 | 2.00 | 8.00 | m | 7 | 0.96 | 0.80 | 0.07 | 0.65 | 0.94 |
| 8 | 28.00 | 2.00 | 8.20 | s | ||||||
| 9 | 29.00 | 2.00 | 8.20 | s | ||||||
| 10 | 21.00 | 2.00 | 8.30 | m | 10 | 0.95 | 0.76 | 0.08 | 0.60 | 0.92 |
| 11 | 3.00 | 1.00 | 10.50 | m | 11 | 0.95 | 0.72 | 0.08 | 0.56 | 0.89 |
| 12 | 22.00 | 2.00 | 10.80 | s | ||||||
| 13 | 18.00 | 2.00 | 11.00 | s | ||||||
| 14 | 23.00 | 2.00 | 12.20 | s | ||||||
| 15 | 24.00 | 2.00 | 12.50 | s | ||||||
| 16 | 27.00 | 2.00 | 14.80 | s | ||||||
| 17 | 16.00 | 2.00 | 16.00 | s | ||||||
| 18 | 9.00 | 1.00 | 16.60 | s | ||||||
| 19 | 8.00 | 1.00 | 16.90 | s | ||||||
| 20 | 11.00 | 1.00 | 17.10 | s | ||||||
| 21 | 15.00 | 2.00 | 18.10 | s | ||||||
| 22 | 5.00 | 1.00 | 19.50 | m | 22 | 0.89 | 0.64 | 0.11 | 0.43 | 0.85 |
| 23 | 14.00 | 2.00 | 21.40 | s | ||||||
| 24 | 20.00 | 2.00 | 23.00 | s | ||||||
| 25 | 6.00 | 1.00 | 23.80 | s | ||||||
| 26 | 25.00 | 2.00 | 24.40 | m | 26 | 0.80 | 0.51 | 0.14 | 0.23 | 0.79 |
| 27 | 19.00 | 2.00 | 24.80 | s | ||||||
| 28 | 13.00 | 2.00 | 26.90 | s | ||||||
| 29 | 1.00 | 1.00 | 33.70 | s | ||||||
| 30 | 10.00 | 1.00 | 33.70 | s |
Grafia de superviencia para el tratamiento BCG
plot(g$S~g$Survival.Time,data=g,type="s"
,xlim=c(0,max(g$Survival.Time)),ylim=c(0,max(g$ls))
,xlab="Survival Time",ylab="S(t)")
lines(g$li~g$Survival.Time,data=g,type="s")
lines(g$ls~g$Survival.Time,data=g,type="s")