## ----setup, include=FALSE----------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", out.width = "100%" ) library(easysurv) library(cli) ## ----installation, eval=FALSE------------------------------------------------- # # First install 'pak' if you haven't already. # install.packages("pak") # # # Then, install easysurv either from GitHub for the latest version: # pak::pkg_install("Maple-Health-Group/easysurv") # # # Or from CRAN for the latest stable version: # pak::pkg_install("easysurv") ## ----initiate-session, eval = FALSE------------------------------------------- # # Start from a clean environment # rm(list = ls()) # # # Attach the easysurv package # library(easysurv) # # # (Optional) load an easysurv analysis template # quick_start() ## ----data-import, eval=TRUE--------------------------------------------------- surv_data <- easy_adtte surv_data ## ----data-structure, eval=TRUE------------------------------------------------ surv_data <- surv_data |> dplyr::filter(PARAMCD == "PFS") |> # Filtering may be relevant for your data dplyr::mutate( time = AVAL, event = 1 - CNSR, # Recode status to 0 = censored, 1 = event group = TRT01P ) |> dplyr::mutate_at("group", as.factor) |> # Convert to factor for easier stratification dplyr::as_tibble() # Convert to tibble for easier viewing surv_data ## ----data-labelling, eval=TRUE------------------------------------------------ # Check labels impacted by re-coding attr(surv_data$event, "label") # Check levels of the group factor variable levels(surv_data$group) # Overwrite the attributes with new labels attr(surv_data$event, "label") <- "0 = Censored, 1 = Event" levels(surv_data$group) <- c("Tab+Vis", "Tab->Vis", "Tab", "Vis") ## ----inspect, eval=TRUE------------------------------------------------------- inspect_surv_data( data = surv_data, time = "time", event = "event", group = "group" ) ## ----km, eval=TRUE, fig.width=6, fig.height=5--------------------------------- km <- get_km( data = surv_data, time = "time", event = "event", group = "group" ) km ## ----km-names, eval=TRUE, fig.width=6, fig.height=5--------------------------- km_with_names <- get_km( data = surv_data, time = "time", event = "event", group = "group", risktable_symbols = FALSE ) km_with_names$km_plot ## ----ph, eval=TRUE, fig.width=6, fig.height=5--------------------------------- ph <- test_ph( data = surv_data, time = "time", event = "event", group = "group" ) ph ## ----parsnip, eval=FALSE------------------------------------------------------ # # We created a function to return NULL if issues arise in model fitting. # pfit <- purrr::possibly(.f = parsnip::fit) # # # Without easysurv, here's how parsnip might be used to fit models: # parsnip::survival_reg(dist = "weibull") |> # parsnip::set_engine("flexsurv") |> # parsnip::fit( # formula = survival::Surv(time, event) ~ group, # data = surv_data # ) # # # But, in easysurv, the fit_models() function uses pfit() to handle errors. # # This looks a bit like: # parsnip::survival_reg(dist = "weibull") |> # parsnip::set_engine("flexsurv") |> # pfit( # formula = survival::Surv(time, event) ~ group, # data = surv_data # ) ## ----fit-models-fail, eval=TRUE, warning=FALSE-------------------------------- # Take just two rows of data and expect distributions to fail. lacking <- surv_data[3:4, ] suspected_failure <- fit_models( data = lacking, time = "time", event = "event", dists = c("exp", "gamma", "gengamma", "gompertz", "llogis", "lnorm", "weibull") ) print(suspected_failure) ## ----fit-models, eval=TRUE---------------------------------------------------- models <- fit_models( data = surv_data, time = "time", event = "event", predict_by = "group" ) models ## ----fit-models-joint, eval=TRUE---------------------------------------------- joint_models <- fit_models( data = surv_data, time = "time", event = "event", predict_by = "group", covariates = "group" ) joint_models ## ----fit-spline, eval=FALSE--------------------------------------------------- # spline_models <- fit_models( # data = surv_data, # time = "time", # event = "event", # predict_by = "group", # engine = "flexsurvspline", # k = c(1, 2, 3), # scale = "hazard" # ) ## ----fit-cure, eval=FALSE----------------------------------------------------- # cure_models <- fit_models( # data = surv_data, # time = "time", # event = "event", # predict_by = "group", # engine = "flexsurvcure" # ) ## ----predict-and-plot, eval=TRUE, fig.width=6, fig.height=5------------------- # With the "models" object from above... preds_and_plots <- predict_and_plot(models) preds_and_plots ## ----export, eval=FALSE------------------------------------------------------- # # Create workbook # wb <- openxlsx::createWorkbook() # # # Write easysurv objects to the workbook # write_to_xl(wb, km) # write_to_xl(wb, ph) # write_to_xl(wb, models) # write_to_xl(wb, preds_and_plots) # # # Save and open the workbook # openxlsx::saveWorkbook(wb, file = "my_file_name.xlsx", overwrite = TRUE) # openxlsx::openXL("my_file_name.xlsx")