## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>", message = FALSE, warning = FALSE)

## ----setup--------------------------------------------------------------------
library(gtregression)
library(dplyr)

data("data_birthwt", package = "gtregression")

birthwt <- data_birthwt |>
  mutate(
    race = factor(race, levels = c(1, 2, 3), labels = c("White", "Black", "Other")),
    smoke = factor(smoke, levels = c(0, 1), labels = c("No", "Yes")),
    ht = factor(ht, levels = c(0, 1), labels = c("No", "Yes")),
    ui = factor(ui, levels = c(0, 1), labels = c("No", "Yes")),
    low = factor(low, levels = c(0, 1), labels = c("Normal BW", "Low BW"))
  )

attr(birthwt$age, "label") <- "Maternal age (years)"
attr(birthwt$lwt, "label") <- "Maternal weight (lb)"
attr(birthwt$race, "label") <- "Race"
attr(birthwt$smoke, "label") <- "Smoking during pregnancy"
attr(birthwt$ht, "label") <- "History of hypertension"
attr(birthwt$ui, "label") <- "Uterine irritability"

exposures <- c("age", "lwt", "race", "smoke", "ht", "ui")

## ----build--------------------------------------------------------------------
desc <- descriptive_table(
  birthwt,
  exposures = exposures,
  by = "low",
  show_dichotomous = "all_levels"
)

crude <- uni_reg(
  birthwt,
  outcome = "low",
  exposures = exposures,
  approach = "logit",
  show_ref = TRUE
)

adjusted <- multi_reg(
  birthwt,
  outcome = "low",
  exposures = exposures,
  approach = "logit",
  show_ref = TRUE
)

## ----merge-two----------------------------------------------------------------
crude_adjusted <- merge_tables(
  crude,
  adjusted,
  spanners = c("Crude", "Adjusted")
)

crude_adjusted$table

## ----merge-three--------------------------------------------------------------
table_2 <- merge_tables(
  desc,
  crude,
  adjusted,
  spanners = c("Low birth weight", "Crude", "Adjusted")
)

table_2$table

## ----sensitivity--------------------------------------------------------------
primary <- multi_reg(
  birthwt,
  outcome = "low",
  exposures = c("smoke", "race", "ui"),
  adjust_for = c("age", "lwt"),
  approach = "logit",
  show_ref = TRUE
)

no_hypertension <- multi_reg(
  filter(birthwt, ht == "No"),
  outcome = "low",
  exposures = c("smoke", "race", "ui"),
  adjust_for = c("age", "lwt"),
  approach = "logit",
  show_ref = TRUE
)

fewer_covariates <- multi_reg(
  birthwt,
  outcome = "low",
  exposures = c("smoke", "race", "ui"),
  adjust_for = "age",
  approach = "logit",
  show_ref = TRUE
)

sensitivity <- merge_tables(
  primary,
  no_hypertension,
  fewer_covariates,
  spanners = c("Primary analysis", "Without hypertension", "Age-adjusted only")
)

sensitivity$table

## ----survival-----------------------------------------------------------------
data("data_lungcancer", package = "gtregression")

lung <- data_lungcancer |>
  mutate(
    trt = factor(trt, levels = c(1, 2), labels = c("Standard", "Test")),
    celltype = factor(celltype)
  )

cox_crude <- cox_reg(
  lung,
  time = "time",
  event = "status",
  exposures = c("trt", "celltype", "karno"),
  show_ref = TRUE
)

cox_adjusted <- cox_reg(
  lung,
  time = "time",
  event = "status",
  exposures = c("trt", "celltype", "karno"),
  multivariable = TRUE,
  show_ref = TRUE
)

survival_table <- merge_tables(
  cox_crude,
  cox_adjusted,
  spanners = c("Unadjusted HR", "Adjusted HR")
)

survival_table$table

## ----modify-------------------------------------------------------------------
table_2_final <- modify_table(
  table_2,
  variable_labels = c(lwt = "Weight at last menstrual period (lb)"),
  level_labels = list(smoke = c(Yes = "Smoker", No = "Non-smoker")),
  caption = "Table 2. Factors associated with low birth weight",
  caveat = "Odds ratios from logistic regression; adjusted estimates include all listed characteristics."
)

table_2_final$table

## ----themes-------------------------------------------------------------------
jama_table <- merge_tables(
  crude,
  adjusted,
  spanners = c("Crude", "Adjusted"),
  theme = "jama"
)

jama_table$table

custom_theme_table <- merge_tables(
  crude,
  adjusted,
  spanners = c("Crude", "Adjusted"),
  theme = c("zebra", "compact", "labels_bold")
)

custom_theme_table$table

## ----flextable----------------------------------------------------------------
library(flextable)

ft <- table_2_final$table

ft <- ft |>
  font(fontname = "Arial", part = "all") |>
  fontsize(size = 9, part = "all") |>
  color(color = "#0F5C5F", part = "header") |>
  bg(bg = "#EEF6F6", part = "header") |>
  align(j = 2:ncol_keys(ft), align = "center", part = "all") |>
  autofit()

ft

## ----flextable-keys-----------------------------------------------------------
ft$col_keys

## ----flextable-highlight------------------------------------------------------
adjusted_p <- ft$col_keys[startsWith(ft$col_keys, "p.value") & endsWith(ft$col_keys, "_p3")]
p_values <- suppressWarnings(as.numeric(sub("<", "", ft$body$dataset[[adjusted_p]])))

ft <- bold(ft, i = which(p_values < 0.05), j = adjusted_p, part = "body")
ft

## ----save, eval = FALSE-------------------------------------------------------
# save_table(table_2_final, filename = "table-2", format = "docx")
# save_table(ft, filename = "table-2-styled", format = "docx")
# save_table(table_2_final, filename = "table-2", format = "html")

## ----save-docx, eval = FALSE--------------------------------------------------
# save_docx(
#   tables = list(table_2_final, primary),
#   filename = "results",
#   titles = c("Table 2. Low birth weight", "Table 3. Sensitivity analyses")
# )

