Survival analysis

omon das

2026-03-31

data=readr::read_csv("D:\\spss exam\\Survival Data.csv")
data
## # A tibble: 200 × 4
##     Time Status Treatment   Age
##    <dbl>  <dbl>     <dbl> <dbl>
##  1    87      1         1    63
##  2    38      1         2    73
##  3    80      1         2    63
##  4    44      1         2    75
##  5    64      0         2    64
##  6   129      1         2    67
##  7   114      0         1    79
##  8    52      1         2    50
##  9    13      0         1    59
## 10    73      0         2    60
## # ℹ 190 more rows
summary(data)
##       Time            Status      Treatment         Age       
##  Min.   :  2.00   Min.   :0.0   Min.   :1.00   Min.   :50.00  
##  1st Qu.: 32.00   1st Qu.:0.0   1st Qu.:1.00   1st Qu.:60.00  
##  Median : 66.50   Median :0.5   Median :2.00   Median :68.00  
##  Mean   : 66.94   Mean   :0.5   Mean   :1.53   Mean   :67.92  
##  3rd Qu.: 98.75   3rd Qu.:1.0   3rd Qu.:2.00   3rd Qu.:75.00  
##  Max.   :135.00   Max.   :1.0   Max.   :2.00   Max.   :85.00
data %>% 
  summarise(Mean_time=mean(Time), Mean_age= mean(Age), total_variable=n(), type_of_status=n_distinct(Status), treatment_type=n_distinct(Treatment), spread_of_time=sd(Time), spread_of_age= sd(Age)) %>% 
  pivot_longer(everything(),cols_vary = "slowest") %>% 
  rename("summary_statistics"="name")
## # A tibble: 7 × 2
##   summary_statistics  value
##   <chr>               <dbl>
## 1 Mean_time           66.9 
## 2 Mean_age            67.9 
## 3 total_variable     200   
## 4 type_of_status       2   
## 5 treatment_type       2   
## 6 spread_of_time      39.5 
## 7 spread_of_age        9.97
attach(data)
S1<-Surv(Time,Status)
fit1<-survfit(S1~Treatment,data = data)

fit1
## Call: survfit(formula = S1 ~ Treatment, data = data)
## 
##               n events median 0.95LCL 0.95UCL
## Treatment=1  94     49     94      83     116
## Treatment=2 106     51    109      94     123
#png(filename = "D:\\spss exam\\Survival plot.png", width = 800, height = 600, units = "px")

plot(fit1,col=3:4, xlim=c(0,140),lwd=3, lty="solid",mark.time=TRUE, main="Kaplan-Meier Curve",xlab="Time", ylab="Survival Probability")
legend(80, 0.9, c("Treatment-1", "Treatment-2"), col=3:4, lwd=3)

#dev.off()
survdiff(S1~Treatment)
## Call:
## survdiff(formula = S1 ~ Treatment)
## 
##               N Observed Expected (O-E)^2/E (O-E)^2/V
## Treatment=1  94       49     46.2     0.169     0.329
## Treatment=2 106       51     53.8     0.145     0.329
## 
##  Chisq= 0.3  on 1 degrees of freedom, p= 0.6
Cox<-coxph(Surv(Time,Status)~Treatment+Age)
summary(Cox)
## Call:
## coxph(formula = Surv(Time, Status) ~ Treatment + Age)
## 
##   n= 200, number of events= 100 
## 
##               coef exp(coef) se(coef)      z Pr(>|z|)
## Treatment -0.12380   0.88356  0.20109 -0.616    0.538
## Age       -0.01052   0.98954  0.01022 -1.029    0.304
## 
##           exp(coef) exp(-coef) lower .95 upper .95
## Treatment    0.8836      1.132    0.5957      1.31
## Age          0.9895      1.011    0.9699      1.01
## 
## Concordance= 0.54  (se = 0.032 )
## Likelihood ratio test= 1.36  on 2 df,   p=0.5
## Wald test            = 1.37  on 2 df,   p=0.5
## Score (logrank) test = 1.37  on 2 df,   p=0.5
library(broom)
tidy(Cox, exponentiate=T, conf.int=T)
## # A tibble: 2 × 7
##   term      estimate std.error statistic p.value conf.low conf.high
##   <chr>        <dbl>     <dbl>     <dbl>   <dbl>    <dbl>     <dbl>
## 1 Treatment    0.884    0.201     -0.616   0.538    0.596      1.31
## 2 Age          0.990    0.0102    -1.03    0.304    0.970      1.01