Biomarker Analysis Catalog - Dev
  • Dev
    • Stable
  1. Tables
  2. DT
  3. DT1
  4. DT1B
  • Index

  • Tables
    • CPMT
      • CPMT1
      • CPMT2
        • CPMT2A
      • CPMT3
    • DT
      • DT1
        • DT1A
        • DT1B
        • DT1C
      • DT2
        • DT2A
    • TET
      • TET1
        • TET1A

  • Graphs
    • AG
      • AG1
    • DG
      • DG1
        • DG1A
        • DG1B
      • DG2
      • DG3
        • DG3A
      • DG4
    • KG
      • KG1
        • KG1A
        • KG1B
      • KG2
        • KG2A
      • KG3
      • KG4
        • KG4A
        • KG4B
      • KG5
        • KG5A
        • KG5B
    • RFG
      • RFG1
        • RFG1A
      • RFG2
        • RFG2A
        • RFG2B
        • RFG2C
      • RFG3
    • RG
      • RG1
        • RG1A
        • RG1B
        • RG1C
      • RG2
        • RG2A
      • RG3
        • RG3A
        • RG3B
    • SPG
      • SPG1
      • SPG2
    • RNAG
      • RNAG1
      • RNAG2
      • RNAG3
      • RNAG4
      • RNAG5
      • RNAG6
      • RNAG7
      • RNAG8
      • RNAG9
      • RNAG10
    • SFG
      • SFG1
        • SFG1A
        • SFG1B
      • SFG2
        • SFG2A
        • SFG2B
        • SFG2C
        • SFG2D
      • SFG3
        • SFG3A
      • SFG4
      • SFG5
        • SFG5A
        • SFG5B
        • SFG5C
      • SFG6
        • SFG6A
        • SFG6B
        • SFG6C
  1. Tables
  2. DT
  3. DT1
  4. DT1B

DT1B

Combine Treatment Arms in Demographics Table

DT

  • Setup
  • Table
  • Session Info

The tables below compare the overall population (“All”) with the biomarker evaluable population (“BEP”) with regards to selected demographic variables.

We will use the cadsl data set from the random.cdisc.data package to illustrate the tables. We add a second artificial BEP flag variable BEP02FL.

In order to compare All with BEP, we need to define a list bep_groups defining these two groups. The reason is that these two groups are overlapping (BEP is a subset of All). Here, we refer in the list elements to the levels Y and N of the biomarker population flag variable BEP01FL from adsl which we will use below:

Code
library(tern)
library(dplyr)

set.seed(123)
adsl <- random.cdisc.data::cadsl %>%
  df_explicit_na() %>%
  mutate(BEP02FL = factor(sample(c("Y", "N"), size = n(), replace = TRUE)))

bep_groups <- list(
  "All" = c("Y", "N"),
  "BEP" = "Y"
)

This can then be used by the tern layout function split_cols_by_groups() below.

It is simple to omit the treatment arm split in the demographics table DT1, thus effectively combining the treatment arms.

Code
lyt <- basic_table() %>%
  split_cols_by_groups("BEP01FL", bep_groups) %>%
  analyze_vars(c("AGE", "SEX")) %>%
  add_colcounts()

build_table(lyt, adsl)
                  All           BEP    
                (N=400)       (N=197)  
———————————————————————————————————————
AGE                                    
  n               400           197    
  Mean (SD)   34.9 (7.4)    34.6 (7.7) 
  Median         34.0          34.0    
  Min - Max   20.0 - 69.0   21.0 - 69.0
SEX                                    
  n               400           197    
  F           231 (57.8%)    126 (64%) 
  M           169 (42.2%)    71 (36%)  
Code
sessionInfo()
R version 4.4.1 (2024-06-14)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 22.04.4 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so;  LAPACK version 3.10.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

time zone: Etc/UTC
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_1.1.4           tern_0.9.5.9022       rtables_0.6.9.9014   
[4] magrittr_2.0.3        formatters_0.5.9.9001

loaded via a namespace (and not attached):
 [1] Matrix_1.7-0                  gtable_0.3.5                 
 [3] jsonlite_1.8.8                compiler_4.4.1               
 [5] tidyselect_1.2.1              stringr_1.5.1                
 [7] tidyr_1.3.1                   splines_4.4.1                
 [9] scales_1.3.0                  yaml_2.3.10                  
[11] fastmap_1.2.0                 lattice_0.22-6               
[13] ggplot2_3.5.1                 R6_2.5.1                     
[15] generics_0.1.3                knitr_1.48                   
[17] forcats_1.0.0                 rbibutils_2.2.16             
[19] htmlwidgets_1.6.4             backports_1.5.0              
[21] checkmate_2.3.2               tibble_3.2.1                 
[23] munsell_0.5.1                 pillar_1.9.0                 
[25] rlang_1.1.4                   utf8_1.2.4                   
[27] broom_1.0.6                   stringi_1.8.4                
[29] xfun_0.47                     cli_3.6.3                    
[31] Rdpack_2.6.1                  digest_0.6.37                
[33] grid_4.4.1                    lifecycle_1.0.4              
[35] vctrs_0.6.5                   evaluate_0.24.0              
[37] glue_1.7.0                    codetools_0.2-20             
[39] survival_3.7-0                random.cdisc.data_0.3.15.9009
[41] fansi_1.0.6                   colorspace_2.1-1             
[43] purrr_1.0.2                   rmarkdown_2.28               
[45] tools_4.4.1                   pkgconfig_2.0.3              
[47] htmltools_0.5.8.1            

Reuse

Copyright 2023, Hoffmann-La Roche Ltd.
DT1A
DT1C
Source Code
---
title: DT1B
subtitle: Combine Treatment Arms in Demographics Table
categories: [DT]
---

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

::: panel-tabset
{{< include setup.qmd >}}

## Table

It is simple to omit the treatment arm split in the demographics table DT1, thus effectively combining the treatment arms.

```{r}
lyt <- basic_table() %>%
  split_cols_by_groups("BEP01FL", bep_groups) %>%
  analyze_vars(c("AGE", "SEX")) %>%
  add_colcounts()

build_table(lyt, adsl)
```

{{< include ../../misc/session_info.qmd >}}
:::

Made with ❤️ by the Statistical Engineering Team StatisticalEngineering

  • License

  • Edit this page
  • Report an issue
Cookie Preferences