Show the code
library(tidyverse)
library(BayesERtools)
library(here)
library(gt)
theme_set(theme_bw(base_size = 12))
This page showcase how to customize the covariate effect plots.
library(tidyverse)
library(BayesERtools)
library(here)
library(gt)
theme_set(theme_bw(base_size = 12))
data(d_sim_binom_cov)
<-
d_sim_binom_cov_2 |>
d_sim_binom_cov mutate(
AUCss_1000 = AUCss / 1000, BAGE_10 = BAGE / 10,
BWT_10 = BWT / 10, BHBA1C_5 = BHBA1C / 5
)
# Grade 2+ hypoglycemia
<- d_sim_binom_cov_2 |> filter(AETYPE == "hgly2")
df_er_ae_hgly2
<- "AEFLAG"
var_resp <- "AUCss_1000" var_exposure
set.seed(1234)
<- dev_ermod_bin(
ermod_bin_hgly2_cov data = df_er_ae_hgly2,
var_resp = var_resp,
var_cov = c("RACE", "BGLUC", "BHBA1C_5"),
var_exposure = var_exposure
)
By default, the covariate effect plots are generated for 5th and 95th percentiles of the continuous covariates and for each level of the categorical covariates (in the order of frequency in data).
<- sim_coveff(ermod_bin_hgly2_cov)
coveffsim plot_coveff(coveffsim)
You can modify the width of the quantile interval using the qi_width_cov
argument.
<- sim_coveff(ermod_bin_hgly2_cov, qi_width_cov = 0.8)
coveffsim_qicov_08 plot_coveff(coveffsim_qicov_08)
These covariate effect simulation (and plotting) can be customized by providing specifications to sim_coveff()
function.
First, we build the specification for the covariate effects with build_spec_coveff()
function.
<- build_spec_coveff(ermod_bin_hgly2_cov)
spec_coveff |>
spec_coveff gt() |>
fmt_number(n_sigfig = 3)|>
fmt_integer(columns = c("value_order", "var_order"))
var_order | var_name | var_label | value_order | value_annot | value_label | value_cont | value_cat | is_ref_value | show_ref_value | is_covariate |
---|---|---|---|---|---|---|---|---|---|---|
1 | AUCss_1000 | AUCss_1000 | 1 | 5th | 0.868 | 0.868 | NA | FALSE | NA | FALSE |
1 | AUCss_1000 | AUCss_1000 | 2 | median | 2.21 | 2.21 | NA | TRUE | TRUE | FALSE |
1 | AUCss_1000 | AUCss_1000 | 3 | 95th | 5.30 | 5.30 | NA | FALSE | NA | FALSE |
2 | RACE | RACE | 1 | 1st freq | White | NA | White | TRUE | TRUE | TRUE |
2 | RACE | RACE | 2 | 2nd freq | Asian | NA | Asian | FALSE | NA | TRUE |
2 | RACE | RACE | 3 | 3rd freq | Black | NA | Black | FALSE | NA | TRUE |
3 | BGLUC | BGLUC | 1 | 5th | 4.43 | 4.43 | NA | FALSE | NA | TRUE |
3 | BGLUC | BGLUC | 2 | median | 6.10 | 6.10 | NA | TRUE | TRUE | TRUE |
3 | BGLUC | BGLUC | 3 | 95th | 7.59 | 7.59 | NA | FALSE | NA | TRUE |
4 | BHBA1C_5 | BHBA1C_5 | 1 | 5th | 5.75 | 5.75 | NA | FALSE | NA | TRUE |
4 | BHBA1C_5 | BHBA1C_5 | 2 | median | 7.97 | 7.97 | NA | TRUE | TRUE | TRUE |
4 | BHBA1C_5 | BHBA1C_5 | 3 | 95th | 10.4 | 10.4 | NA | FALSE | NA | TRUE |
Let’s say we want to customize in a follwoing way:
<- build_spec_coveff_one_variable(
spec_new_bgluc "BGLUC", seq(4, 8, by = 0.1),
qi_width_cov = 0.8, show_ref_value = TRUE
)
<-
spec_new_bhba1c tibble(value_cont = c(30, 35, 45, 50) / 5) |>
mutate(
value_order = row_number(),
value_label = as.character(value_cont * 5),
var_name = "BHBA1C_5",
var_label = "BHBA1C",
value_annot = glue::glue("{value_label}mmol/mol"),
is_ref_value = FALSE,
show_ref_value = FALSE)
<-
spec_new_race |>
spec_coveff filter(var_name == "RACE") |>
mutate(
is_ref_value = c(FALSE, TRUE, FALSE),
show_ref_value = c(FALSE, TRUE, FALSE)
|>
) select(-var_order, -is_covariate)
<-
spec_coveff_new_1 replace_spec_coveff(spec_coveff, bind_rows(spec_new_bgluc, spec_new_bhba1c)) |>
# spec_new_race is separately provided as we want to change the reference level
replace_spec_coveff(spec_new_race, replace_ref_value = TRUE)
<-
d_new_var_order tibble(var_name = c("AUCss_1000", "BGLUC", "BHBA1C_5", "RACE")) |>
mutate(var_order = row_number())
<-
spec_coveff_new |>
spec_coveff_new_1 select(-var_order) |>
left_join(d_new_var_order, by = "var_name")
|>
spec_coveff_new gt() |>
fmt_number(n_sigfig = 3)|>
fmt_integer(columns = c("value_order", "var_order"))
var_name | value_order | value_annot | value_label | value_cont | value_cat | is_ref_value | show_ref_value | var_label | is_covariate | var_order |
---|---|---|---|---|---|---|---|---|---|---|
AUCss_1000 | 1 | 5th | 0.868 | 0.868 | NA | FALSE | NA | AUCss_1000 | FALSE | 1 |
AUCss_1000 | 2 | median | 2.21 | 2.21 | NA | TRUE | TRUE | AUCss_1000 | FALSE | 1 |
AUCss_1000 | 3 | 95th | 5.30 | 5.30 | NA | FALSE | NA | AUCss_1000 | FALSE | 1 |
RACE | 1 | 1st freq | White | NA | White | FALSE | FALSE | RACE | TRUE | 4 |
RACE | 2 | 2nd freq | Asian | NA | Asian | TRUE | TRUE | RACE | TRUE | 4 |
RACE | 3 | 3rd freq | Black | NA | Black | FALSE | FALSE | RACE | TRUE | 4 |
BGLUC | 1 | NA | 6.10 | 6.10 | NA | TRUE | FALSE | BGLUC | TRUE | 2 |
BGLUC | 2 | 10th | 4.40 | 4.40 | NA | FALSE | NA | BGLUC | TRUE | 2 |
BGLUC | 3 | median | 6.00 | 6.00 | NA | FALSE | NA | BGLUC | TRUE | 2 |
BGLUC | 4 | 90th | 7.60 | 7.60 | NA | FALSE | NA | BGLUC | TRUE | 2 |
BHBA1C_5 | 1 | NA | 7.97 | 7.97 | NA | TRUE | FALSE | BHBA1C | TRUE | 3 |
BHBA1C_5 | 2 | 30mmol/mol | 30 | 6.00 | NA | FALSE | NA | BHBA1C | TRUE | 3 |
BHBA1C_5 | 3 | 35mmol/mol | 35 | 7.00 | NA | FALSE | NA | BHBA1C | TRUE | 3 |
BHBA1C_5 | 4 | 45mmol/mol | 45 | 9.00 | NA | FALSE | NA | BHBA1C | TRUE | 3 |
BHBA1C_5 | 5 | 50mmol/mol | 50 | 10.0 | NA | FALSE | NA | BHBA1C | TRUE | 3 |
The customized covariate effect plots can be generated using the plot_coveff()
<- sim_coveff(ermod_bin_hgly2_cov, spec_coveff = spec_coveff_new)
coveffsim_spec plot_coveff(coveffsim_spec)