Codes for generating Survival Analysis.^[See childRmd/_18survival.Rmd file for other codes]

Codes for generating Shiny Survival Analysis.^[See childRmd/_19shinySurvival.Rmd file for other codes]

library("shiny")
library("dplyr")
library("magrittr")
library("viridis")
library("readxl")
library("survival")
library("survminer")
library("finalfit")
library("glue")
mydata <- readxl::read_excel(here::here("data", "mydata.xlsx"))
mydata$int <- lubridate::interval(
  lubridate::ymd(mydata$SurgeryDate),
  lubridate::ymd(mydata$LastFollowUpDate)
  )
mydata$OverallTime <- lubridate::time_length(mydata$int, "month")
mydata$OverallTime <- round(mydata$OverallTime, digits = 1)

mydata$Outcome <- forcats::fct_recode(as.character(mydata$Death),
               "1" = "TRUE",
               "0" = "FALSE")

mydata$Outcome <- as.numeric(as.character(mydata$Outcome))

mydata %>% 
  select(-ID,
         -Name) %>% 
  inspectdf::inspect_types() %>% 
  dplyr::filter(type == "character") %>% 
  dplyr::select(col_name) %>% 
  pull() %>% 
  unlist() -> characterVariables
selectInput(
  inputId = "Factor",
  label = "Choose a Factor Affecting Survival",
  choices = characterVariables,
  selected = "LVI"
)


dependentKM <- "Surv(OverallTime, Outcome)"


renderPrint({

  print(input$Factor)


})

tags$b("Kaplan-Meier Plot, Log-Rank Test")
tags$br()

renderPlot({


  mydata %>%
    finalfit::surv_plot(
      .data = .,
      dependent = dependentKM,
      explanatory = input$Factor,
      xlab = 'Time (months)',
      pval = TRUE,
      legend = 'none',
      break.time.by = 12,
      xlim = c(0, 60)
    )

})



tags$b("Univariate Cox-Regression")
tags$br()


renderPrint({

  mydata %>%
    finalfit::finalfit(dependentKM, input$Factor) -> tUni

  knitr::kable(tUni[, 1:4],
               row.names = FALSE,
               align = c('l', 'l', 'r', 'r', 'r', 'r'))


})




tags$b("Median Survival")
tags$br()


renderPrint({

  formula_text <- paste0("Surv(OverallTime, Outcome) ~ ",input$Factor)

  km_fit <- survfit(as.formula(formula_text),
                              data = mydata)

  km_fit

})




tags$b("1-3-5-yr Survival")
tags$br()


renderPrint({

  formula_text <- paste0("Surv(OverallTime, Outcome) ~ ",input$Factor)

  km_fit <- survfit(as.formula(formula_text),
                              data = mydata)

  summary(km_fit, times = c(12, 36, 60))

})


renderPrint({


  formula_text <- paste0("Surv(OverallTime, Outcome) ~ ",input$Factor)

  km_fit <- survfit(as.formula(formula_text),
                              data = mydata)

km_fit_summary <- summary(km_fit, times = c(12,36,60))

km_fit_df <- as.data.frame(km_fit_summary[c("strata", "time", "n.risk", "n.event", "surv", "std.err", "lower", "upper")])

km_fit_df %>% 
  dplyr::mutate(
    description = 
      glue::glue(
      "When {strata}, {time} month survival is {scales::percent(surv)} [{scales::percent(lower)}-{scales::percent(upper)}, 95% CI]."
    )
  ) %>% 
  dplyr::select(description) %>% 
  pull()

})


sbalci/histopathology-template documentation built on June 29, 2023, 5:52 a.m.