TLG Catalog - Stable
  • Stable
    • Dev
  1. Graphs
  2. Efficacy
  3. MMRMG01
  • Introduction

  • Tables
    • ADA
      • ADAT01
      • ADAT02
      • ADAT03
      • ADAT04A
      • ADAT04B
    • Adverse Events
      • AET01
      • AET01_AESI
      • AET02
      • AET02_SMQ
      • AET03
      • AET04
      • AET04_PI
      • AET05
      • AET05_ALL
      • AET06
      • AET06_SMQ
      • AET07
      • AET09
      • AET09_SMQ
      • AET10
    • Concomitant Medications
      • CMT01
      • CMT01A
      • CMT01B
      • CMT02_PT
    • Deaths
      • DTHT01
    • Demography
      • DMT01
    • Disclosures
      • DISCLOSUREST01
      • EUDRAT01
      • EUDRAT02
    • Disposition
      • DST01
      • PDT01
      • PDT02
    • ECG
      • EGT01
      • EGT02
      • EGT03
      • EGT04
      • EGT05_QTCAT
    • Efficacy
      • AOVT01
      • AOVT02
      • AOVT03
      • CFBT01
      • CMHT01
      • COXT01
      • COXT02
      • DORT01
      • LGRT02
      • MMRMT01
      • ONCT05
      • RATET01
      • RBMIT01
      • RSPT01
      • TTET01
    • Exposure
      • EXT01
    • Lab Results
      • LBT01
      • LBT02
      • LBT03
      • LBT04
      • LBT05
      • LBT06
      • LBT07
      • LBT08
      • LBT09
      • LBT10
      • LBT10_BL
      • LBT11
      • LBT11_BL
      • LBT12
      • LBT12_BL
      • LBT13
      • LBT14
      • LBT15
    • Medical History
      • MHT01
    • Pharmacokinetic
      • PKCT01
      • PKPT02
      • PKPT03
      • PKPT04
      • PKPT05
      • PKPT06
      • PKPT07
      • PKPT08
      • PKPT11
    • Risk Management Plan
      • RMPT01
      • RMPT03
      • RMPT04
      • RMPT05
      • RMPT06
    • Safety
      • ENTXX
    • Vital Signs
      • VST01
      • VST02
  • Listings
    • ADA
      • ADAL02
    • Adverse Events
      • AEL01
      • AEL01_NOLLT
      • AEL02
      • AEL02_ED
      • AEL03
      • AEL04
    • Concomitant Medications
      • CML01
      • CML02A_GL
      • CML02B_GL
    • Development Safety Update Report
      • DSUR4
    • Disposition
      • DSL01
      • DSL02
    • ECG
      • EGL01
    • Efficacy
      • ONCL01
    • Exposure
      • EXL01
    • Lab Results
      • LBL01
      • LBL01_RLS
      • LBL02A
      • LBL02A_RLS
      • LBL02B
    • Medical History
      • MHL01
    • Pharmacokinetic
      • ADAL01
      • PKCL01
      • PKCL02
      • PKPL01
      • PKPL02
      • PKPL04
    • Vital Signs
      • VSL01
  • Graphs
    • Efficacy
      • FSTG01
      • FSTG02
      • KMG01
      • MMRMG01
      • MMRMG02
    • Other
      • BRG01
      • BWG01
      • CIG01
      • IPPG01
      • LTG01
      • MNG01
    • Pharmacokinetic
      • PKCG01
      • PKCG02
      • PKCG03
      • PKPG01
      • PKPG02
      • PKPG03
      • PKPG04
      • PKPG06

  • Appendix
    • Reproducibility

  • Index

On this page

  • Least Squares Means:
    Estimates Within Groups
    • Considering the treatment variable in the model
    • Considering the treatment variable in the model, with lines
    • Considering the treatment variable in the model, with statistics table
  • Least Squares Means:
    Contrasts Between Groups
  • Model Diagnostics: Marginal
    Fitted Values vs. Residuals
  • Model Diagnostics: Normality
    of Marginal Residuals
  • Data Setup and
    Model Fitting
  • teal App
  • Reproducibility
    • Timestamp
    • Session Info
    • .lock file
  • Edit this page
  • Report an issue
  1. Graphs
  2. Efficacy
  3. MMRMG01

MMRMG01

Plots for Mixed-Effect Model Repeated Measures Analysis


Given an MMRM fitted with s_mmrm, g_mmrm_lsmeans displays for each visit the adjusted means within group and/or difference in adjusted means between groups. g_mmrm_diagnostic displays marginal residual plots for evaluating model fit.

Least Squares Means:
Estimates Within Groups

Considering the treatment variable in the model

Code
plot <- g_mmrm_lsmeans(
  mmrm_results,
  select = "estimates",
  xlab = "Visit"
)
plot

Considering the treatment variable in the model, with lines

Code
plot <- g_mmrm_lsmeans(
  mmrm_results,
  select = "estimates",
  xlab = "Visit",
  show_lines = TRUE
)
plot

Considering the treatment variable in the model, with statistics table

Code
plot <- g_mmrm_lsmeans(
  mmrm_results,
  select = "estimates",
  xlab = "Visit",
  table_stats = c("n", "estimate", "se", "ci"),
  table_font_size = 4,
  table_rel_height = 0.6
)
plot

Least Squares Means:
Contrasts Between Groups

Users can choose to display both estimates and contrasts together by running g_mmrm_lsmeans(mmrm_results).

Code
plot <- g_mmrm_lsmeans(
  mmrm_results,
  select = "contrasts",
  titles = c(contrasts = "Contrasts of FKSI-FWB means"),
  xlab = "Visit"
)
Coordinate system already present. Adding new coordinate system, which will
replace the existing one.
Code
plot

Model Diagnostics: Marginal
Fitted Values vs. Residuals

Code
plot <- g_mmrm_diagnostic(mmrm_results)
plot

Model Diagnostics: Normality
of Marginal Residuals

Code
plot <- g_mmrm_diagnostic(mmrm_results, type = "q-q-residual")
plot

Data Setup and
Model Fitting

Code
library(dplyr)
library(tern.mmrm)
library(nestcolor)

adsl <- random.cdisc.data::cadsl
adqs <- random.cdisc.data::cadqs

adqs_f <- adqs %>%
  dplyr::filter(PARAMCD == "FKSI-FWB" & !AVISIT %in% c("BASELINE")) %>%
  droplevels() %>%
  dplyr::mutate(ARM = factor(ARM, levels = c("B: Placebo", "A: Drug X", "C: Combination"))) %>%
  dplyr::mutate(AVISITN = rank(AVISITN) %>% as.factor() %>% as.numeric() %>% as.factor())

mmrm_results <- fit_mmrm(
  vars = list(
    response = "AVAL",
    covariates = c("STRATA2"),
    id = "USUBJID",
    arm = "ARM",
    visit = "AVISIT"
  ),
  data = adqs_f
)

teal App

Code
library(teal.modules.clinical)

## Data reproducible code
data <- teal_data()
data <- within(data, {
  library(dplyr)

  ADSL <- random.cdisc.data::cadsl
  ADQS <- random.cdisc.data::cadqs %>%
    filter(ABLFL != "Y" & ABLFL2 != "Y") %>%
    filter(AVISIT %in% c("WEEK 1 DAY 8", "WEEK 2 DAY 15", "WEEK 3 DAY 22")) %>%
    mutate(
      AVISIT = as.factor(AVISIT),
      AVISITN = rank(AVISITN) %>%
        as.factor() %>%
        as.numeric() %>%
        as.factor() # making consecutive numeric factor
    )
})
datanames <- c("ADSL", "ADQS")
datanames(data) <- datanames
Warning: `datanames<-()` was deprecated in teal.data 0.7.0.
ℹ invalid to use `datanames()<-` or `names()<-` on an object of class
  `teal_data`. See ?names.teal_data
Code
join_keys(data) <- default_cdisc_join_keys[datanames]

arm_ref_comp <- list(
  ARMCD = list(
    ref = "ARM A",
    comp = c("ARM B", "ARM C")
  )
)

## Reusable Configuration For Modules
ADQS <- data[["ADQS"]]

## Setup App
app <- init(
  data = data,
  modules = modules(
    tm_a_mmrm(
      label = "MMRM",
      dataname = "ADQS",
      aval_var = choices_selected(c("AVAL", "CHG"), "AVAL"),
      id_var = choices_selected(c("USUBJID", "SUBJID"), "USUBJID"),
      arm_var = choices_selected(c("ARM", "ARMCD"), "ARMCD"),
      visit_var = choices_selected(c("AVISIT", "AVISITN"), "AVISIT"),
      arm_ref_comp = arm_ref_comp,
      paramcd = choices_selected(
        choices = value_choices(ADQS, "PARAMCD", "PARAM"),
        selected = "FKSI-FWB"
      ),
      cov_var = choices_selected(c("BASE", "AGE", "SEX", "BASE:AVISIT"), NULL),
      conf_level = choices_selected(c(0.95, 0.9, 0.8), 0.95)
    )
  )
)

shinyApp(app$ui, app$server)

Reproducibility

Timestamp

[1] "2025-07-05 17:58:35 UTC"

Session Info

─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.5.0 (2025-04-11)
 os       Ubuntu 24.04.2 LTS
 system   x86_64, linux-gnu
 ui       X11
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       Etc/UTC
 date     2025-07-05
 pandoc   3.7.0.2 @ /usr/bin/ (via rmarkdown)
 quarto   1.7.32 @ /usr/local/bin/quarto

─ Packages ───────────────────────────────────────────────────────────────────
 package               * version  date (UTC) lib source
 backports               1.5.0    2024-05-23 [1] RSPM
 brio                    1.1.5    2024-04-24 [1] RSPM
 broom                   1.0.8    2025-03-28 [1] RSPM
 bslib                   0.9.0    2025-01-30 [1] RSPM
 cachem                  1.1.0    2024-05-16 [1] RSPM
 callr                   3.7.6    2024-03-25 [1] RSPM
 checkmate               2.3.2    2024-07-29 [1] RSPM
 chromote                0.5.1    2025-04-24 [1] RSPM
 cli                     3.6.5    2025-04-23 [1] RSPM
 coda                    0.19-4.1 2024-01-31 [1] CRAN (R 4.5.0)
 codetools               0.2-20   2024-03-31 [2] CRAN (R 4.5.0)
 cowplot                 1.1.3    2024-01-22 [1] RSPM
 curl                    6.4.0    2025-06-22 [1] RSPM
 dichromat               2.0-0.1  2022-05-02 [1] CRAN (R 4.5.0)
 digest                  0.6.37   2024-08-19 [1] RSPM
 dplyr                 * 1.1.4    2023-11-17 [1] RSPM
 emmeans                 1.11.1   2025-05-04 [1] RSPM
 estimability            1.5.1    2024-05-12 [1] RSPM
 evaluate                1.0.4    2025-06-18 [1] RSPM
 farver                  2.1.2    2024-05-13 [1] RSPM
 fastmap                 1.2.0    2024-05-15 [1] RSPM
 fontawesome             0.5.3    2024-11-16 [1] RSPM
 formatR                 1.14     2023-01-17 [1] CRAN (R 4.5.0)
 formatters            * 0.5.11   2025-04-09 [1] RSPM
 geepack                 1.3.12   2024-09-23 [1] RSPM
 generics                0.1.4    2025-05-09 [1] RSPM
 ggplot2                 3.5.2    2025-04-09 [1] RSPM
 glue                    1.8.0    2024-09-30 [1] RSPM
 gtable                  0.3.6    2024-10-25 [1] RSPM
 htmltools               0.5.8.1  2024-04-04 [1] RSPM
 htmlwidgets             1.6.4    2023-12-06 [1] RSPM
 httpuv                  1.6.16   2025-04-16 [1] RSPM
 jquerylib               0.1.4    2021-04-26 [1] RSPM
 jsonlite                2.0.0    2025-03-27 [1] RSPM
 knitr                   1.50     2025-03-16 [1] RSPM
 labeling                0.4.3    2023-08-29 [1] RSPM
 later                   1.4.2    2025-04-08 [1] RSPM
 lattice                 0.22-7   2025-04-02 [2] CRAN (R 4.5.0)
 lifecycle               1.0.4    2023-11-07 [1] RSPM
 logger                  0.4.0    2024-10-22 [1] RSPM
 magrittr              * 2.0.3    2022-03-30 [1] RSPM
 MASS                    7.3-65   2025-02-28 [2] CRAN (R 4.5.0)
 Matrix                  1.7-3    2025-03-11 [1] CRAN (R 4.5.0)
 memoise                 2.0.1    2021-11-26 [1] RSPM
 mime                    0.13     2025-03-17 [1] RSPM
 mmrm                    0.3.15   2025-06-10 [1] RSPM
 multcomp                1.4-28   2025-01-29 [1] RSPM
 mvtnorm                 1.3-3    2025-01-10 [1] RSPM
 nestcolor             * 0.1.3    2025-01-21 [1] RSPM
 nlme                    3.1-168  2025-03-31 [2] CRAN (R 4.5.0)
 parallelly              1.45.0   2025-06-02 [1] RSPM
 pillar                  1.11.0   2025-07-04 [1] RSPM
 pkgcache                2.2.4    2025-05-26 [1] RSPM
 pkgconfig               2.0.3    2019-09-22 [1] RSPM
 processx                3.8.6    2025-02-21 [1] RSPM
 promises                1.3.3    2025-05-29 [1] RSPM
 ps                      1.9.1    2025-04-12 [1] RSPM
 purrr                   1.0.4    2025-02-05 [1] RSPM
 R6                      2.6.1    2025-02-15 [1] RSPM
 random.cdisc.data       0.3.16   2024-10-10 [1] RSPM
 rbibutils               2.3      2024-10-04 [1] RSPM
 RColorBrewer            1.1-3    2022-04-03 [1] RSPM
 Rcpp                    1.1.0    2025-07-02 [1] RSPM
 Rdpack                  2.6.4    2025-04-09 [1] RSPM
 rlang                   1.1.6    2025-04-11 [1] RSPM
 rmarkdown               2.29     2024-11-04 [1] RSPM
 rtables               * 0.6.13   2025-06-19 [1] RSPM
 sandwich                3.1-1    2024-09-15 [1] RSPM
 sass                    0.4.10   2025-04-11 [1] RSPM
 scales                  1.4.0    2025-04-24 [1] RSPM
 sessioninfo             1.2.3    2025-02-05 [1] any (@1.2.3)
 shiny                 * 1.11.1   2025-07-03 [1] RSPM
 shinycssloaders         1.1.0    2024-07-30 [1] RSPM
 shinyjs                 2.1.0    2021-12-23 [1] RSPM
 shinyvalidate           0.1.3    2023-10-04 [1] RSPM
 shinyWidgets            0.9.0    2025-02-21 [1] RSPM
 stringi                 1.8.7    2025-03-27 [1] RSPM
 stringr                 1.5.1    2023-11-14 [1] RSPM
 survival                3.8-3    2024-12-17 [2] CRAN (R 4.5.0)
 teal                  * 0.16.0   2025-02-23 [1] RSPM
 teal.code             * 0.6.1    2025-02-14 [1] RSPM
 teal.data             * 0.7.0    2025-01-28 [1] RSPM
 teal.logger             0.3.2    2025-02-14 [1] RSPM
 teal.modules.clinical * 0.10.0   2025-02-28 [1] RSPM
 teal.reporter           0.4.0    2025-01-24 [1] RSPM
 teal.slice            * 0.6.0    2025-02-03 [1] RSPM
 teal.transform        * 0.6.0    2025-02-12 [1] RSPM
 teal.widgets            0.4.3    2025-01-31 [1] RSPM
 tern                  * 0.9.9    2025-06-20 [1] RSPM
 tern.gee                0.1.5    2024-08-23 [1] RSPM
 tern.mmrm             * 0.3.3    2025-07-04 [1] RSPM
 testthat                3.2.3    2025-01-13 [1] RSPM
 TH.data                 1.1-3    2025-01-17 [1] RSPM
 tibble                  3.3.0    2025-06-08 [1] RSPM
 tidyr                   1.3.1    2024-01-24 [1] RSPM
 tidyselect              1.2.1    2024-03-11 [1] RSPM
 TMB                     1.9.17   2025-03-10 [1] RSPM
 vctrs                   0.6.5    2023-12-01 [1] RSPM
 webshot                 0.5.5    2023-06-26 [1] CRAN (R 4.5.0)
 webshot2                0.1.2    2025-04-23 [1] RSPM
 websocket               1.4.4    2025-04-10 [1] RSPM
 withr                   3.0.2    2024-10-28 [1] RSPM
 xfun                    0.52     2025-04-02 [1] RSPM
 xtable                  1.8-4    2019-04-21 [1] RSPM
 yaml                    2.3.10   2024-07-26 [1] RSPM
 zoo                     1.8-14   2025-04-10 [1] RSPM

 [1] /usr/local/lib/R/site-library
 [2] /usr/local/lib/R/library
 [3] /github/home/R/x86_64-pc-linux-gnu-library/4.5
 * ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────

.lock file

Download the .lock file and use renv::restore() on it to recreate environment used to generate this website.

Download

KMG01
MMRMG02
Source Code
---
title: MMRMG01
subtitle: Plots for Mixed-Effect Model Repeated Measures Analysis
---

------------------------------------------------------------------------

{{< include ../../_utils/envir_hook.qmd >}}

```{r setup, echo = FALSE, warning = FALSE, message = FALSE}
library(dplyr)
library(tern.mmrm)
library(nestcolor)

adsl <- random.cdisc.data::cadsl
adqs <- random.cdisc.data::cadqs

adqs_f <- adqs %>%
  dplyr::filter(PARAMCD == "FKSI-FWB" & !AVISIT %in% c("BASELINE")) %>%
  droplevels() %>%
  dplyr::mutate(ARM = factor(ARM, levels = c("B: Placebo", "A: Drug X", "C: Combination"))) %>%
  dplyr::mutate(AVISITN = rank(AVISITN) %>% as.factor() %>% as.numeric() %>% as.factor())

mmrm_results <- fit_mmrm(
  vars = list(
    response = "AVAL",
    covariates = c("STRATA2"),
    id = "USUBJID",
    arm = "ARM",
    visit = "AVISIT"
  ),
  data = adqs_f
)
```

Given an MMRM fitted with `s_mmrm`, `g_mmrm_lsmeans` displays for each visit the adjusted means within group and/or difference in adjusted means between groups. `g_mmrm_diagnostic` displays marginal residual plots for evaluating model fit.

## Least Squares Means: <br/> Estimates Within Groups

### Considering the treatment variable in the model

```{r plot1, dev.args = list(pointsize = 6), test = list(plot_v1 = "plot")}
plot <- g_mmrm_lsmeans(
  mmrm_results,
  select = "estimates",
  xlab = "Visit"
)
plot
```

### Considering the treatment variable in the model, with lines

```{r plot2, dev.args = list(pointsize = 6), test = list(plot_v2 = "plot")}
plot <- g_mmrm_lsmeans(
  mmrm_results,
  select = "estimates",
  xlab = "Visit",
  show_lines = TRUE
)
plot
```

### Considering the treatment variable in the model, with statistics table

```{r plot3, dev.args = list(pointsize = 6), fig.height = 7, test = list(plot_v3 = "plot")}
plot <- g_mmrm_lsmeans(
  mmrm_results,
  select = "estimates",
  xlab = "Visit",
  table_stats = c("n", "estimate", "se", "ci"),
  table_font_size = 4,
  table_rel_height = 0.6
)
plot
```

## Least Squares Means: <br/> Contrasts Between Groups

Users can choose to display both estimates and contrasts together by running `g_mmrm_lsmeans(mmrm_results)`.

```{r plot4, dev.args = list(pointsize = 6), test = list(plot_v4 = "plot")}
plot <- g_mmrm_lsmeans(
  mmrm_results,
  select = "contrasts",
  titles = c(contrasts = "Contrasts of FKSI-FWB means"),
  xlab = "Visit"
)
plot
```

## Model Diagnostics: Marginal <br/> Fitted Values vs. Residuals

```{r plot5, dev.args = list(pointsize = 6), test = list(plot_v5 = "plot")}
plot <- g_mmrm_diagnostic(mmrm_results)
plot
```

## Model Diagnostics: Normality <br/> of Marginal Residuals

```{r plot6, dev.args = list(pointsize = 6), test = list(plot_v6 = "plot")}
plot <- g_mmrm_diagnostic(mmrm_results, type = "q-q-residual")
plot
```

## Data Setup and <br/> Model Fitting

```{r setup}
#| code-fold: show
```

{{< include ../../_utils/save_results.qmd >}}

## `teal` App

```{r teal, opts.label = c("skip_if_testing", "app")}
library(teal.modules.clinical)

## Data reproducible code
data <- teal_data()
data <- within(data, {
  library(dplyr)

  ADSL <- random.cdisc.data::cadsl
  ADQS <- random.cdisc.data::cadqs %>%
    filter(ABLFL != "Y" & ABLFL2 != "Y") %>%
    filter(AVISIT %in% c("WEEK 1 DAY 8", "WEEK 2 DAY 15", "WEEK 3 DAY 22")) %>%
    mutate(
      AVISIT = as.factor(AVISIT),
      AVISITN = rank(AVISITN) %>%
        as.factor() %>%
        as.numeric() %>%
        as.factor() # making consecutive numeric factor
    )
})
datanames <- c("ADSL", "ADQS")
datanames(data) <- datanames
join_keys(data) <- default_cdisc_join_keys[datanames]

arm_ref_comp <- list(
  ARMCD = list(
    ref = "ARM A",
    comp = c("ARM B", "ARM C")
  )
)

## Reusable Configuration For Modules
ADQS <- data[["ADQS"]]

## Setup App
app <- init(
  data = data,
  modules = modules(
    tm_a_mmrm(
      label = "MMRM",
      dataname = "ADQS",
      aval_var = choices_selected(c("AVAL", "CHG"), "AVAL"),
      id_var = choices_selected(c("USUBJID", "SUBJID"), "USUBJID"),
      arm_var = choices_selected(c("ARM", "ARMCD"), "ARMCD"),
      visit_var = choices_selected(c("AVISIT", "AVISITN"), "AVISIT"),
      arm_ref_comp = arm_ref_comp,
      paramcd = choices_selected(
        choices = value_choices(ADQS, "PARAMCD", "PARAM"),
        selected = "FKSI-FWB"
      ),
      cov_var = choices_selected(c("BASE", "AGE", "SEX", "BASE:AVISIT"), NULL),
      conf_level = choices_selected(c(0.95, 0.9, 0.8), 0.95)
    )
  )
)

shinyApp(app$ui, app$server)
```

{{< include ../../repro.qmd >}}

Made with ❤️ by the NEST Team

  • Edit this page
  • Report an issue
Cookie Preferences