## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", message = FALSE, warning = FALSE ) ## ----load-packages, message=FALSE, warning=FALSE------------------------------ library(tflmetaR) library(gridify) library(haven) library(dplyr) library(survival) library(survminer) ## ----load-data---------------------------------------------------------------- # get addtte data ---- # synthetic adtte for oncology therapeutic area from CDISC adtte <- read_xpt(system.file("extdata", "adam_adtte.xpt", package = "tflmetaR")) ## ----prepare-data------------------------------------------------------------- tte <- adtte |> rename(avalc = AVALU) |> rename_with(tolower) |> filter(paramcd == "PFS") |> arrange(desc(trtp)) |> relocate(usubjid, trtp, cnsr, evntdesc, avalc, aval, trta) |> select(usubjid, trtp, cnsr, evntdesc, avalc, aval, trta) tte$trtp <- factor(tte$trtp) ## ----fit-survival-model------------------------------------------------------- # run survival modal ---- surv_object <- Surv(time = tte$aval, event = tte$cnsr) fit1 <- survfit(surv_object ~ trtp, data = tte) ## ----create-survplot---------------------------------------------------------- # survial plot and table ---- ggsurv <- ggsurvplot(fit1, data = tte, risk.table = TRUE, size = 1, # line size pval = TRUE, pval.size = 4, pval.method = TRUE, pval.method.size = 3, fontsize = 3, surv.median.line = "hv", tables.theme = theme_survminer() + theme( axis.text.x = element_text(size = 9, color = "gray30"), axis.text.y = element_text(size = 9, color = "gray30"), plot.title = element_text(size = 9), element_text(size = 9, color = "red") ) ) ## ----customize-risk-table----------------------------------------------------- # risk table ----- t <- ggsurv$table + scale_y_discrete(label = c("Treatment 3", "Treatment 2", "Treatment 1")) p1 <- ggsurvplot(fit1, data = tte, risk.table = TRUE) ## can not add to the gridify directly ## ----combine-plot-table------------------------------------------------------- # ggrance the survival plot and risk table ---- p1 <- ggarrange( ggsurv$plot + labs(x = "", y = "Survival Probability") + scale_color_discrete() + theme( axis.title.x = element_text(vjust = 0, size = 9), axis.title.y = element_text(vjust = -3, size = 9), # y axis label axis.text.y = element_text(size = 9, color = "gray30"), # tick values axis.text.x = element_text(size = 9, color = "gray30"), legend.title = element_blank() ), t + labs(y = "") + theme( axis.title.x = element_text(vjust = 0, size = 9), axis.text.x = element_text(size = 9, color = "gray30") ), heights = c(2, 1.0), ncol = 1, nrow = 2, align = "v" ) ## ----gridify-basic------------------------------------------------------------ ## --- use gridify to annotate the figure --- fig <- gridify( p1, layout = pharma_layout_base( margin = grid::unit(c(1, 1, 1.23, 1), "inches"), global_gpar = grid::gpar(fontfamily = "Courier") ) ) |> set_cell("header_left_1", "UCB") |> set_cell("header_left_2", "Drug X / Unspecified") |> set_cell("header_left_3", "STUDY001") |> set_cell("header_right_1", "CONFIDENTIAL") |> set_cell("header_right_2", "Final") |> set_cell("header_right_3", paste0("Data Cut-Off Date")) |> set_cell("output_num", "Figure F01") |> set_cell("title_1", "The Kaplan-Meier Curves of Progression-Free Survival Among Treatment Groups") |> set_cell("title_2", "Population: Safety Set") |> set_cell("title_3", "") |> set_cell( "note", paste0( "The synthetic oncology ADTTE was generated by CDISC Dataset Generator, ", "with 3 treatment arms and 500 subjects.\n", "Note: The Kaplan-Meier estimate of survival probability at a given time ", "is the product of these conditional probabilities up until that given time." ), mchar = 132 ) |> set_cell("footer_left", "Program: f_surv_gridify.R, Source(s): ADTTE") |> set_cell("footer_right", paste0("Page ", 1, " of ", 1)) ## ----km-plot, dev='png', dpi=300, fig.width=10, fig.height=8, out.width='95%'---- print(fig) ## ----tflmetar-load-meta------------------------------------------------------- ## --- tflmetaR related code ---- # read headers, titles, and footnotes excel spreadsheet file_name <- system.file("extdata", "st_titles.xls", package = "tflmetaR") title_file <- tflmetaR::read_tfile(filename = file_name, sheetname = "Sheet1") header_file <- tflmetaR::read_tfile(filename = file_name, sheetname = "Headr", validate = FALSE) fig_number <- "Figure F01" ## ----tflmetar-extract--------------------------------------------------------- ulheader <- tflmetaR::get_ulheader(header_file)[1, ] urheader <- tflmetaR::get_urheader(header_file)[1, ] titles <- tflmetaR::get_title(title_file, tnumber = fig_number) footnotes <- tflmetaR::get_footnote(title_file, tnumber = fig_number, add_footr_tstamp = FALSE) pgmname <- tflmetaR::get_pgmname(title_file, tnumber = fig_number) source <- tflmetaR::get_source(title_file, tnumber = fig_number) # convert footnote list to string footnote_str <- paste(unlist(footnotes), collapse = "\n") ## ----final-figure------------------------------------------------------------- ## --- re-draw graph with pulled titles and footnotes ---- fig2 <- gridify( p1, layout = pharma_layout_base( margin = grid::unit(c(0.5, 1, 0.25, 1), "inches"), global_gpar = grid::gpar(fontfamily = "Courier") ) ) |> set_cell("header_left_1", ulheader[[1]]) |> set_cell("header_left_2", ulheader[[2]]) |> set_cell("header_left_3", ulheader[[3]]) |> set_cell("header_right_1", urheader[[1]]) |> set_cell("header_right_2", urheader[[2]]) |> set_cell("header_right_3", urheader[[3]]) |> set_cell("output_num", titles[[1]]) |> set_cell("title_1", "") |> set_cell("title_2", titles[[2]]) |> set_cell("title_3", titles[[3]]) |> set_cell("note", footnote_str, mch = 120) |> set_cell("footer_left", paste0( "Program: ", pgmname, ", ", "Source(s): ", source )) |> set_cell("footer_right", sprintf("Page %d of %d", 1, 1)) ## ----km-plot-tflmetaR, dev='png', dpi=300, fig.width=10, fig.height=8, out.width='95%'---- print(fig2)