tests/testthat/test-marginal_effects.R

smk_net <- set_agd_arm(smoking,
                       study = studyn,
                       trt = trtc,
                       r = r,
                       n = n,
                       trt_ref = "No intervention")

# Only test gradients, no sampling
smk_fit_RE <- nma(smk_net,
                  trt_effects = "random",
                  prior_intercept = normal(scale = 100),
                  prior_trt = normal(scale = 100),
                  prior_het = normal(scale = 5),
                  test_grad = TRUE)

test_that("all_contrasts argument", {
  m <- "should be TRUE or FALSE"
  expect_error(marginal_effects(smk_fit_RE, all_contrasts = "a"), m)
  expect_error(marginal_effects(smk_fit_RE, all_contrasts = 1), m)
  expect_error(marginal_effects(smk_fit_RE, all_contrasts = list()), m)
  expect_error(marginal_effects(smk_fit_RE, all_contrasts = NA), m)
  expect_error(marginal_effects(smk_fit_RE, all_contrasts = NULL), m)
})

test_that("trt_ref argument", {
  m <- "does not match a treatment in the network"
  expect_error(marginal_effects(smk_fit_RE, trt_ref = "a"), m)
  expect_error(marginal_effects(smk_fit_RE, trt_ref = 1), m)
  expect_error(marginal_effects(smk_fit_RE, trt_ref = list("a")), m)
  expect_error(marginal_effects(smk_fit_RE, trt_ref = NA), m)

  # expect_warning(marginal_effects(smk_fit_RE, all_contrasts = TRUE, trt_ref = "Self-help"), "Ignoring `trt_ref`")
})

test_that("probs argument", {
  m <- "numeric vector of probabilities"
  expect_error(marginal_effects(smk_fit_RE, probs = "a"), m)
  expect_error(marginal_effects(smk_fit_RE, probs = -1), m)
  expect_error(marginal_effects(smk_fit_RE, probs = 1.5), m)
  expect_error(marginal_effects(smk_fit_RE, probs = Inf), m)
  expect_error(marginal_effects(smk_fit_RE, probs = list()), m)
  expect_error(marginal_effects(smk_fit_RE, probs = NA), m)
  expect_error(marginal_effects(smk_fit_RE, probs = NULL), m)
})

test_that("summary argument", {
  m <- "should be TRUE or FALSE"
  expect_error(marginal_effects(smk_fit_RE, summary = "a"), m)
  expect_error(marginal_effects(smk_fit_RE, summary = 1), m)
  expect_error(marginal_effects(smk_fit_RE, summary = list()), m)
  expect_error(marginal_effects(smk_fit_RE, summary = NA), m)
  expect_error(marginal_effects(smk_fit_RE, summary = NULL), m)
})

test_that("newdata argument", {
  m <- "not a data frame"
  expect_error(marginal_effects(smk_fit_RE, newdata = "a"), m)
  expect_error(marginal_effects(smk_fit_RE, newdata = 1), m)
  expect_error(marginal_effects(smk_fit_RE, newdata = list()), m)
  expect_error(marginal_effects(smk_fit_RE, newdata = NA), m)
})


skip_on_cran()  # Reduce CRAN check time


# Binary AgD only --------------------------------------------------------------

# Only small number of samples to test
smk_fit_RE <- suppressWarnings(nma(smk_net,
                                   trt_effects = "random",
                                   prior_intercept = normal(scale = 100),
                                   prior_trt = normal(scale = 100),
                                   prior_het = normal(scale = 5),
                                   iter = 10))

test_that("Binary AgD: .trta, .trtb columns are correct", {
  re1.1 <- tibble::as_tibble(marginal_effects(smk_fit_RE, mtype = "difference"))
  expect_identical(paste0("marg[", re1.1$.study, ": ", re1.1$.trtb, "]"),
                   re1.1$parameter)
  expect_identical(as.character(re1.1$.trta), rep("No intervention", times = nrow(re1.1)))

  re1.2 <- tibble::as_tibble(marginal_effects(smk_fit_RE, mtype = "ratio"))
  expect_identical(paste0("marg[", re1.1$.study, ": ", re1.2$.trtb, "]"),
                   re1.2$parameter)
  expect_identical(as.character(re1.2$.trta), rep("No intervention", times = nrow(re1.2)))

  re1.3 <- tibble::as_tibble(marginal_effects(smk_fit_RE, mtype = "link"))
  expect_identical(paste0("marg[", re1.1$.study, ": ", re1.3$.trtb, "]"),
                   re1.3$parameter)
  expect_identical(as.character(re1.3$.trta), rep("No intervention", times = nrow(re1.3)))


  re2.1 <- tibble::as_tibble(marginal_effects(smk_fit_RE, all_contrasts = TRUE, mtype = "difference"))
  expect_identical(paste0("marg[", re2.1$.study, ": ", re2.1$.trtb, " vs. ", re2.1$.trta, "]"),
                   re2.1$parameter)

  re2.2 <- tibble::as_tibble(marginal_effects(smk_fit_RE, all_contrasts = TRUE, mtype = "ratio"))
  expect_identical(paste0("marg[", re2.1$.study, ": ", re2.2$.trtb, " vs. ", re2.2$.trta, "]"),
                   re2.2$parameter)

  re2.3 <- tibble::as_tibble(marginal_effects(smk_fit_RE, all_contrasts = TRUE, mtype = "link"))
  expect_identical(paste0("marg[", re2.1$.study, ": ", re2.3$.trtb, " vs. ", re2.3$.trta, "]"),
                   re2.3$parameter)


  re3.1 <- tibble::as_tibble(marginal_effects(smk_fit_RE, trt_ref = "Self-help", mtype = "difference"))
  expect_identical(paste0("marg[", re1.1$.study, ": ", re3.1$.trtb, "]"),
                   re3.1$parameter)
  expect_identical(as.character(re3.1$.trta), rep("Self-help", times = nrow(re3.1)))

  re3.2 <- tibble::as_tibble(marginal_effects(smk_fit_RE, trt_ref = "Self-help", mtype = "ratio"))
  expect_identical(paste0("marg[", re1.1$.study, ": ", re3.2$.trtb, "]"),
                   re3.2$parameter)
  expect_identical(as.character(re3.2$.trta), rep("Self-help", times = nrow(re3.2)))

  re3.3 <- tibble::as_tibble(marginal_effects(smk_fit_RE, trt_ref = "Self-help", mtype = "link"))
  expect_identical(paste0("marg[", re3.1$.study, ": ", re3.3$.trtb, "]"),
                   re3.3$parameter)
  expect_identical(as.character(re3.3$.trta), rep("Self-help", times = nrow(re3.3)))
})


test_that("Binary AgD: .trta, .trtb columns are correct in new populations", {
  re1.1 <- tibble::as_tibble(marginal_effects(smk_fit_RE, baseline = distr(qnorm, 0, 0.1), mtype = "difference"))
  expect_identical(paste0("marg[", re1.1$.trtb, "]"),
                   re1.1$parameter)
  expect_identical(as.character(re1.1$.trta), rep("No intervention", times = nrow(re1.1)))

  re1.2 <- tibble::as_tibble(marginal_effects(smk_fit_RE, baseline = distr(qnorm, 0, 0.1), mtype = "ratio"))
  expect_identical(paste0("marg[", re1.2$.trtb, "]"),
                   re1.2$parameter)
  expect_identical(as.character(re1.2$.trta), rep("No intervention", times = nrow(re1.2)))

  re1.3 <- tibble::as_tibble(marginal_effects(smk_fit_RE, baseline = distr(qnorm, 0, 0.1), mtype = "link"))
  expect_identical(paste0("marg[", re1.3$.trtb, "]"),
                   re1.3$parameter)
  expect_identical(as.character(re1.3$.trta), rep("No intervention", times = nrow(re1.3)))


  re2.1 <- tibble::as_tibble(marginal_effects(smk_fit_RE, baseline = distr(qnorm, 0, 0.1), all_contrasts = TRUE, mtype = "difference"))
  expect_identical(paste0("marg[", re2.1$.trtb, " vs. ", re2.1$.trta, "]"),
                   re2.1$parameter)

  re2.2 <- tibble::as_tibble(marginal_effects(smk_fit_RE, baseline = distr(qnorm, 0, 0.1), all_contrasts = TRUE, mtype = "ratio"))
  expect_identical(paste0("marg[", re2.2$.trtb, " vs. ", re2.2$.trta, "]"),
                   re2.2$parameter)

  re2.3 <- tibble::as_tibble(marginal_effects(smk_fit_RE, baseline = distr(qnorm, 0, 0.1), all_contrasts = TRUE, mtype = "link"))
  expect_identical(paste0("marg[", re2.3$.trtb, " vs. ", re2.3$.trta, "]"),
                   re2.3$parameter)


  re3.1 <- tibble::as_tibble(marginal_effects(smk_fit_RE, baseline = distr(qnorm, 0, 0.1), trt_ref = "Self-help", mtype = "difference"))
  expect_identical(paste0("marg[", re3.1$.trtb, "]"),
                   re3.1$parameter)
  expect_identical(as.character(re3.1$.trta), rep("Self-help", times = nrow(re3.1)))

  re3.2 <- tibble::as_tibble(marginal_effects(smk_fit_RE, baseline = distr(qnorm, 0, 0.1), trt_ref = "Self-help", mtype = "ratio"))
  expect_identical(paste0("marg[", re3.2$.trtb, "]"),
                   re3.2$parameter)
  expect_identical(as.character(re3.2$.trta), rep("Self-help", times = nrow(re3.2)))

  re3.3 <- tibble::as_tibble(marginal_effects(smk_fit_RE, baseline = distr(qnorm, 0, 0.1), trt_ref = "Self-help", mtype = "link"))
  expect_identical(paste0("marg[", re3.3$.trtb, "]"),
                   re3.3$parameter)
  expect_identical(as.character(re3.3$.trta), rep("Self-help", times = nrow(re3.3)))
})

blocker_net <- set_agd_arm(blocker, studyn, trtc, r = r, n = n)
blocker_fit <- suppressWarnings(nma(blocker_net,
                                    prior_intercept = normal(scale = 100),
                                    prior_trt = normal(scale = 100),
                                    iter = 10))

test_that("all_contrasts works with only two treatments", {
  expect_equal(
    dplyr::select(as.data.frame(marginal_effects(blocker_fit)), -"parameter"),
    dplyr::select(as.data.frame(marginal_effects(blocker_fit, all_contrasts = TRUE)) ,-"parameter"),
    check.attributes = FALSE
  )
  expect_identical(
    unname(as.array(marginal_effects(blocker_fit))),
    unname(as.array(marginal_effects(blocker_fit, all_contrasts = TRUE)))
  )
})


# Binary with IPD regression ---------------------------------------------------

library(dplyr)

pso_ipd <- mutate(plaque_psoriasis_ipd,
    bsa = bsa / 100,
    prevsys = as.numeric(prevsys),
    psa = as.numeric(psa),
    weight = weight / 10,
    durnpso = durnpso / 10,
    # Treatment classes
    trtclass = case_when(trtn == 1 ~ "Placebo",
                         trtn %in% c(2, 3, 5, 6) ~ "IL blocker",
                         trtn == 4 ~ "TNFa blocker"),
    # Check complete cases for covariates of interest
    complete = complete.cases(durnpso, prevsys, bsa, weight, psa)
  )

pso_agd <- mutate(plaque_psoriasis_agd,
    bsa_mean = bsa_mean / 100,
    bsa_sd = bsa_sd / 100,
    prevsys = prevsys / 100,
    psa = psa / 100,
    weight_mean = weight_mean / 10,
    weight_sd = weight_sd / 10,
    durnpso_mean = durnpso_mean / 10,
    durnpso_sd = durnpso_sd / 10,
    # Treatment classes
    trtclass = case_when(trtn == 1 ~ "Placebo",
                         trtn %in% c(2, 3, 5, 6) ~ "IL blocker",
                         trtn == 4 ~ "TNFa blocker")
  )

pso_net <- combine_network(
  set_ipd(filter(pso_ipd, complete),
          studyc, trtc,
          r = pasi75),
  set_agd_arm(pso_agd,
              study = studyc, trt = trtc,
              r = pasi75_r, n = pasi75_n))

pso_net <- add_integration(pso_net,
                           durnpso = distr(qgamma, mean = durnpso_mean, sd = durnpso_sd),
                           prevsys = distr(qbern, prob = prevsys),
                           bsa = distr(qlogitnorm, mean = bsa_mean, sd = bsa_sd),
                           weight = distr(qgamma, mean = weight_mean, sd = weight_sd),
                           psa = distr(qbern, prob = psa),
                           n_int = 4)

# Only small number of samples to test
pso_fit <- suppressWarnings(nma(pso_net,
                                trt_effects = "fixed",
                                regression = ~(durnpso + prevsys + bsa + weight + psa)*.trt,
                                prior_intercept = normal(scale = 10),
                                prior_trt = normal(scale = 10),
                                prior_reg = normal(scale = 10),
                                init_r = 0.1,
                                iter = 10))

pso_new <- tibble(
  bsa_mean = 0.6,
  bsa_sd = 0.3,
  prevsys = 0.1,
  psa = 0.2,
  weight_mean = 10,
  weight_sd = 1,
  durnpso_mean = 3,
  durnpso_sd = 1,
  studyc = "NEW"
)

pso_new <- add_integration(pso_new,
                           durnpso = distr(qgamma, mean = durnpso_mean, sd = durnpso_sd),
                           prevsys = distr(qbern, prob = prevsys),
                           bsa = distr(qlogitnorm, mean = bsa_mean, sd = bsa_sd),
                           weight = distr(qgamma, mean = weight_mean, sd = weight_sd),
                           psa = distr(qbern, prob = psa),
                           cor = pso_net$int_cor,
                           n_int = 4)


test_that("newdata validation", {
  expect_error(marginal_effects(pso_fit, newdata = dplyr::select(pso_new, -".int_durnpso"), baseline = distr(qnorm, 0, 0.1)),
               'Regression variable "durnpso" not found in `newdata`')
  expect_error(marginal_effects(pso_fit, newdata = dplyr::select(pso_new, -".int_durnpso", -".int_weight"), baseline = distr(qnorm, 0, 0.1)),
               'Regression variables "durnpso" and "weight" not found in `newdata`')
})

test_that("baseline required when newdata specified", {
  m <- "Specify both `newdata` and `baseline`, or neither"
  expect_error(marginal_effects(pso_fit, newdata = pso_new), m)
  expect_error(marginal_effects(pso_fit, baseline = distr(qnorm, 0, 0.1)), m)
})

test_that("Binary IPD: .study, .trta, .trtb columns are correct", {
  re1 <- tibble::as_tibble(marginal_effects(pso_fit))
  expect_identical(paste0("marg[", re1$.study, ": ", re1$.trtb, "]"),
                   re1$parameter)
  expect_identical(as.character(re1$.trta), rep(levels(pso_net$treatments)[1], times = nrow(re1)))

  re2 <- tibble::as_tibble(marginal_effects(pso_fit, all_contrasts = TRUE))
  expect_identical(paste0("marg[", re2$.study, ": ", re2$.trtb, " vs. ", re2$.trta, "]"),
                   re2$parameter)

  re3 <- tibble::as_tibble(marginal_effects(pso_fit, trt_ref = "ETN"))
  expect_identical(paste0("marg[", re3$.study, ": ", re3$.trtb, "]"),
                   re3$parameter)
  expect_identical(as.character(re3$.trta), rep("ETN", times = nrow(re3)))

  re4 <- tibble::as_tibble(marginal_effects(pso_fit, baseline = distr(qnorm, 0, 0.1), newdata = pso_new, study = studyc))
  expect_identical(paste0("marg[", re4$.study, ": ", re4$.trtb, "]"),
                   re4$parameter)
  expect_identical(as.character(re4$.trta), rep(levels(pso_net$treatments)[1], times = nrow(re4)))

  re5 <- tibble::as_tibble(marginal_effects(pso_fit, all_contrasts = TRUE, baseline = distr(qnorm, 0, 0.1), newdata = pso_new, study = studyc))
  expect_identical(paste0("marg[", re5$.study, ": ", re5$.trtb, " vs. ", re5$.trta, "]"),
                   re5$parameter)

  re6 <- tibble::as_tibble(marginal_effects(pso_fit, trt_ref = "ETN", baseline = distr(qnorm, 0, 0.1), newdata = pso_new, study = studyc))
  expect_identical(paste0("marg[", re6$.study, ": ", re6$.trtb, "]"),
                   re6$parameter)
  expect_identical(as.character(re6$.trta), rep("ETN", times = nrow(re6)))
})


# Ordered categorical -----------------------------------------------------

ord_net <- set_agd_arm(plaque_psoriasis_agd,
                       studyc, trtc,
                       r = multi(r0 = pasi75_n,
                                 PASI75 = pasi75_r,
                                 PASI90 = pasi90_r,
                                 PASI100 = pasi100_r,
                                 type = "ordered", inclusive = TRUE))


# Only small number of samples to test
ord_fit <- suppressWarnings(nma(ord_net,
                                trt_effects = "random",
                                prior_intercept = normal(scale = 100),
                                prior_trt = normal(scale = 100),
                                prior_het = normal(scale = 5),
                                iter = 10))

test_that("Ordered categorical: .study, .trta, .trtb, .category columns are correct", {
  re1.1 <- tibble::as_tibble(marginal_effects(ord_fit, mtype = "difference"))
  expect_identical(paste0("marg[", re1.1$.study, ": ", re1.1$.trtb, ", ", re1.1$.category, "]"),
                   re1.1$parameter)
  expect_identical(as.character(re1.1$.trta), rep("SEC_300", times = nrow(re1.1)))

  re1.2 <- tibble::as_tibble(marginal_effects(ord_fit, mtype = "ratio"))
  expect_identical(paste0("marg[", re1.2$.study, ": ", re1.2$.trtb, ", ", re1.2$.category, "]"),
                   re1.2$parameter)
  expect_identical(as.character(re1.2$.trta), rep("SEC_300", times = nrow(re1.2)))

  re1.3 <- tibble::as_tibble(marginal_effects(ord_fit, mtype = "link"))
  expect_identical(paste0("marg[", re1.3$.study, ": ", re1.3$.trtb, ", ", re1.3$.category, "]"),
                   re1.3$parameter)
  expect_identical(as.character(re1.3$.trta), rep("SEC_300", times = nrow(re1.3)))


  re2.1 <- tibble::as_tibble(marginal_effects(ord_fit, all_contrasts = TRUE, mtype = "difference"))
  expect_identical(paste0("marg[", re2.1$.study, ": ", re2.1$.trtb, " vs. ", re2.1$.trta, ", ", re2.1$.category, "]"),
                   re2.1$parameter)

  re2.2 <- tibble::as_tibble(marginal_effects(ord_fit, all_contrasts = TRUE, mtype = "ratio"))
  expect_identical(paste0("marg[", re2.2$.study, ": ", re2.2$.trtb, " vs. ", re2.2$.trta, ", ", re2.2$.category, "]"),
                   re2.2$parameter)

  re2.3 <- tibble::as_tibble(marginal_effects(ord_fit, all_contrasts = TRUE, mtype = "link"))
  expect_identical(paste0("marg[", re2.3$.study, ": ", re2.3$.trtb, " vs. ", re2.3$.trta, ", ", re2.3$.category, "]"),
                   re2.3$parameter)


  re3.1 <- tibble::as_tibble(marginal_effects(ord_fit, trt_ref = "PBO", mtype = "difference"))
  expect_identical(paste0("marg[", re1.1$.study, ": ", re3.1$.trtb, ", ", re3.1$.category, "]"),
                   re3.1$parameter)
  expect_identical(as.character(re3.1$.trta), rep("PBO", times = nrow(re3.1)))

  re3.2 <- tibble::as_tibble(marginal_effects(ord_fit, trt_ref = "PBO", mtype = "ratio"))
  expect_identical(paste0("marg[", re1.1$.study, ": ", re3.2$.trtb, ", ", re3.2$.category, "]"),
                   re3.2$parameter)
  expect_identical(as.character(re3.2$.trta), rep("PBO", times = nrow(re3.2)))

  re3.3 <- tibble::as_tibble(marginal_effects(ord_fit, trt_ref = "PBO", mtype = "link"))
  expect_identical(paste0("marg[", re3.1$.study, ": ", re3.3$.trtb, ", ", re3.3$.category, "]"),
                   re3.3$parameter)
  expect_identical(as.character(re3.3$.trta), rep("PBO", times = nrow(re3.3)))
})


test_that("Ordered categorical: .trta, .trtb, .category columns are correct in new populations", {
  re1.1 <- tibble::as_tibble(marginal_effects(ord_fit, baseline = distr(qnorm, 0, 0.1), mtype = "difference"))
  expect_identical(paste0("marg[", re1.1$.trtb, ", ", re1.1$.category, "]"),
                   re1.1$parameter)
  expect_identical(as.character(re1.1$.trta), rep("SEC_300", times = nrow(re1.1)))

  re1.2 <- tibble::as_tibble(marginal_effects(ord_fit, baseline = distr(qnorm, 0, 0.1), mtype = "ratio"))
  expect_identical(paste0("marg[", re1.2$.trtb, ", ", re1.2$.category, "]"),
                   re1.2$parameter)
  expect_identical(as.character(re1.2$.trta), rep("SEC_300", times = nrow(re1.2)))

  re1.3 <- tibble::as_tibble(marginal_effects(ord_fit, baseline = distr(qnorm, 0, 0.1), mtype = "link"))
  expect_identical(paste0("marg[", re1.3$.trtb, ", ", re1.3$.category, "]"),
                   re1.3$parameter)
  expect_identical(as.character(re1.3$.trta), rep("SEC_300", times = nrow(re1.3)))


  re2.1 <- tibble::as_tibble(marginal_effects(ord_fit, baseline = distr(qnorm, 0, 0.1), all_contrasts = TRUE, mtype = "difference"))
  expect_identical(paste0("marg[", re2.1$.trtb, " vs. ", re2.1$.trta, ", ", re2.1$.category, "]"),
                   re2.1$parameter)

  re2.2 <- tibble::as_tibble(marginal_effects(ord_fit, baseline = distr(qnorm, 0, 0.1), all_contrasts = TRUE, mtype = "ratio"))
  expect_identical(paste0("marg[", re2.2$.trtb, " vs. ", re2.2$.trta, ", ", re2.2$.category, "]"),
                   re2.2$parameter)

  re2.3 <- tibble::as_tibble(marginal_effects(ord_fit, baseline = distr(qnorm, 0, 0.1), all_contrasts = TRUE, mtype = "link"))
  expect_identical(paste0("marg[", re2.3$.trtb, " vs. ", re2.3$.trta, ", ", re2.3$.category, "]"),
                   re2.3$parameter)


  re3.1 <- tibble::as_tibble(marginal_effects(ord_fit, baseline = distr(qnorm, 0, 0.1), trt_ref = "PBO", mtype = "difference"))
  expect_identical(paste0("marg[", re3.1$.trtb, ", ", re3.1$.category, "]"),
                   re3.1$parameter)
  expect_identical(as.character(re3.1$.trta), rep("PBO", times = nrow(re3.1)))

  re3.2 <- tibble::as_tibble(marginal_effects(ord_fit, baseline = distr(qnorm, 0, 0.1), trt_ref = "PBO", mtype = "ratio"))
  expect_identical(paste0("marg[", re3.2$.trtb, ", ", re3.2$.category, "]"),
                   re3.2$parameter)
  expect_identical(as.character(re3.2$.trta), rep("PBO", times = nrow(re3.2)))

  re3.3 <- tibble::as_tibble(marginal_effects(ord_fit, baseline = distr(qnorm, 0, 0.1), trt_ref = "PBO", mtype = "link"))
  expect_identical(paste0("marg[", re3.3$.trtb, ", ", re3.3$.category, "]"),
                   re3.3$parameter)
  expect_identical(as.character(re3.3$.trta), rep("PBO", times = nrow(re3.3)))
})


# Survival ----------------------------------------------------------------

surv_net <- set_ipd(ndmm_agd, study, trt, Surv = Surv(eventtime, status))

# Only small number of samples to test
surv_fit <- suppressWarnings(nma(surv_net,
                                 likelihood = "weibull",
                                 prior_intercept = normal(scale = 100),
                                 prior_trt = normal(scale = 100),
                                 prior_aux = normal(scale = 5),
                                 iter = 10))

test_that("Survival: .study, .trta, .trtb columns are correct", {
  re1.1 <- tibble::as_tibble(marginal_effects(surv_fit, type = "median", mtype = "difference"))
  expect_identical(paste0("marg[", re1.1$.study, ": ", re1.1$.trtb, "]"),
                   re1.1$parameter)
  expect_identical(as.character(re1.1$.trta), rep("Pbo", times = nrow(re1.1)))

  re1.2 <- tibble::as_tibble(marginal_effects(surv_fit, type = "hazard", mtype = "ratio")) %>%
    group_by(.study, .trtb, .trta) %>%
    mutate(.id = 1:n())
  expect_identical(paste0("marg[", re1.2$.study, ": ", re1.2$.trtb, ", ", re1.2$.id, "]"),
                   re1.2$parameter)
  expect_identical(as.character(re1.2$.trta), rep("Pbo", times = nrow(re1.2)))

  re1.3 <- tibble::as_tibble(marginal_effects(surv_fit, type = "quantile", mtype = "difference"))
  expect_identical(paste0("marg[", re1.3$.study, ": ", re1.3$.trtb, ", ", re1.3$.quantile, "]"),
                   re1.3$parameter)
  expect_identical(as.character(re1.3$.trta), rep("Pbo", times = nrow(re1.3)))


  re2.1 <- tibble::as_tibble(marginal_effects(surv_fit, all_contrasts = TRUE, type = "median", mtype = "difference"))
  expect_identical(paste0("marg[", re2.1$.study, ": ", re2.1$.trtb, " vs. ", re2.1$.trta, "]"),
                   re2.1$parameter)

  re2.2 <- tibble::as_tibble(marginal_effects(surv_fit, all_contrasts = TRUE, type = "hazard", mtype = "ratio")) %>%
    group_by(.study, .trtb, .trta) %>%
    mutate(.id = 1:n())
  expect_identical(paste0("marg[", re2.2$.study, ": ", re2.2$.trtb, " vs. ", re2.2$.trta, ", ", re2.2$.id, "]"),
                   re2.2$parameter)

  re2.3 <- tibble::as_tibble(marginal_effects(surv_fit, all_contrasts = TRUE, type = "quantile", mtype = "difference"))
  expect_identical(paste0("marg[", re2.3$.study, ": ", re2.3$.trtb, " vs. ", re2.3$.trta, ", ", re2.3$.quantile, "]"),
                   re2.3$parameter)


  re3.1 <- tibble::as_tibble(marginal_effects(surv_fit, trt_ref = "Len", type = "median", mtype = "difference"))
  expect_identical(paste0("marg[", re3.1$.study, ": ", re3.1$.trtb, "]"),
                   re3.1$parameter)
  expect_identical(as.character(re3.1$.trta), rep("Len", times = nrow(re3.1)))

  re3.2 <- tibble::as_tibble(marginal_effects(surv_fit, trt_ref = "Len", type = "hazard", mtype = "ratio")) %>%
    group_by(.study, .trtb, .trta) %>%
    mutate(.id = 1:n())
  expect_identical(paste0("marg[", re3.2$.study, ": ", re3.2$.trtb, ", ", re3.2$.id, "]"),
                   re3.2$parameter)
  expect_identical(as.character(re3.2$.trta), rep("Len", times = nrow(re3.2)))

  re3.3 <- tibble::as_tibble(marginal_effects(surv_fit, trt_ref = "Len", type = "quantile", mtype = "difference"))
  expect_identical(paste0("marg[", re3.3$.study, ": ", re3.3$.trtb, ", ", re3.3$.quantile, "]"),
                   re3.3$parameter)
  expect_identical(as.character(re3.3$.trta), rep("Len", times = nrow(re3.3)))
})
dmphillippo/multinma documentation built on April 12, 2025, 11:41 a.m.