Skip to content

Commit

Permalink
Fix and test brm_summary()
Browse files Browse the repository at this point in the history
  • Loading branch information
wlandau-lilly committed May 15, 2023
1 parent a2515e7 commit 3e9054f
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 5 deletions.
14 changes: 9 additions & 5 deletions R/brm_summary.R
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#' @export
#' @family results
#' @description Summarize a basic MMRM model fit.
#' @details Currently assumes the response variable is `CHG`
#' (change from baseline) and not `AVAL` (raw response).
#' @return A `tibble` with summary statistics of the marginal posterior.
#' @inheritParams brm_formula
#' @param model Fitted `brms` model object from [brm_model()]
Expand Down Expand Up @@ -91,7 +93,7 @@ brm_summary <- function(
data = data,
emmeans_response = emmeans_response
)
table_diff <- brm_summary_diff_change(
table_diff <- brm_summary_diff(
data = data,
emmeans_response = emmeans_response,
group = group,
Expand All @@ -117,23 +119,25 @@ brm_summary_response <- function(data, emmeans_response) {
out
}

brm_summary_diff_change <- function(
brm_summary_diff <- function(
data,
emmeans_response,
group,
time,
nuisance,
control
) {
contrasts_diff <- list()
reference <- tibble::as_tibble(emmeans_response)
contrasts_diff <- list()
for (level_group in setdiff(sort(unique(reference[[group]])), control)) {
for (level_time in sort(unique(reference[[time]]))) {
contrast_treatment <- as.integer(
reference[[group]] == group & reference[[time]] == level_time
(reference[[group]] == level_group) &
(reference[[time]] == level_time)
)
contrast_control <- as.integer(
reference[[group]] == control & reference[[time]] == level_time
(reference[[group]] == control) &
(reference[[time]] == level_time)
)
contrast <- contrast_treatment - contrast_control
contrasts_diff[[length(contrasts_diff) + 1L]] <- contrast
Expand Down
4 changes: 4 additions & 0 deletions man/brm_summary.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

62 changes: 62 additions & 0 deletions tests/testthat/test-brm_summary.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
test_that("brm_summary()", {
set.seed(0L)
sim <- brm_simulate(
n_group = 2L,
n_patient = 100L,
n_time = 4L,
hyper_beta = 1,
hyper_sigma = 1,
hyper_correlation = 1
)
data <- sim$data
formula <- brm_formula(
response = "response",
group = "group",
time = "time",
patient = "patient",
effect_base = FALSE,
interaction_base = FALSE
)
tmp <- utils::capture.output(
suppressMessages(
suppressWarnings(
model <- brm_model(
data = data,
formula = formula,
chains = 1,
iter = 100,
refresh = 0
)
)
)
)
out <- brm_summary(
model = model,
group = "group",
time = "time",
patient = "patient",
control = 1
)
cols <- c(
"time",
"group",
"response_mean",
"response_lower",
"response_upper",
"diff_mean",
"diff_lower",
"diff_upper"
)
expect_equal(sort(colnames(out)), sort(cols))
expect_equal(nrow(out), 8L)
expect_equal(as.integer(out$time), rep(seq_len(4), each = 2))
expect_equal(as.integer(out$group), rep(seq_len(2), times = 4))
expect_true(all(out$response_mean > out$response_lower))
expect_true(all(out$response_mean > out$response_upper))
expect_true(all(out$diff_mean > out$diff_lower))
expect_true(all(out$diff_mean > out$diff_upper))
expect_equal(
out$diff_mean[seq_len(4)],
out$response_mean[out$group == 2] - out$response_mean[out$group == 1]
)
})

0 comments on commit 3e9054f

Please sign in to comment.