Biomarker Analysis Catalog - Dev
  • Dev
    • Stable
  1. Tables
  2. DT
  3. DT2
  • 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. DT2

DT2

Demographics Tables Comparing BEP vs. non-BEP Population

DT

  • Setup
  • Table
  • Session Info

The tables below compare the biomarker evaluable population (BEP, below in the table “BEP Yes”) with the remainder non-BEP (“BEP No”) within each treatment arm with regards to selected demographic variables.

We will use the cadsl data set from the random.cdisc.data package to illustrate the tables.

In order to compare the BEP with the non-BEP, we only need to split columns on the BEP flag variable BEP01FL that categorises the evaluable and non evaluable subgroups. For readability in the tables, we define a separate label variable BEP_label below which is parallel to the original flag variable.

Code
library(tern)
library(dplyr)

adsl <- random.cdisc.data::cadsl %>%
  df_explicit_na() %>%
  mutate(
    BEP_label = case_when(
      BEP01FL == "Y" ~ "BEP Yes",
      BEP01FL == "N" ~ "BEP No"
    )
  )

This can then be used by the rtables layout function split_cols_by() below.

The demographics table DT2 splits the columns by treatment arm and by the biomarker population (Yes vs. No), and summarizes selected demographic variables in the rows. You can see here how we use the separate labels variable to specify the labels used in the column headers.

Code
lyt <- basic_table() %>%
  split_cols_by("ARM") %>%
  add_colcounts() %>%
  split_cols_by("BEP01FL", labels_var = "BEP_label") %>%
  analyze_vars(c("AGE", "SEX"))

build_table(lyt, adsl)
                      A: Drug X                  B: Placebo                C: Combination      
                BEP Yes       BEP No        BEP Yes       BEP No        BEP Yes       BEP No   
                (N=68)        (N=66)        (N=63)        (N=71)        (N=66)        (N=66)   
———————————————————————————————————————————————————————————————————————————————————————————————
AGE                                                                                            
  n               68            66            63            71            66            66     
  Mean (SD)   32.9 (6.6)    34.6 (6.5)    35.7 (8.3)    35.2 (7.6)    35.1 (8.1)    35.8 (7.3) 
  Median         32.0          34.0          35.0          35.0          34.0          35.0    
  Min - Max   21.0 - 50.0   24.0 - 48.0   23.0 - 62.0   21.0 - 58.0   21.0 - 69.0   20.0 - 64.0
SEX                                                                                            
  n               68            66            63            71            66            66     
  F           44 (64.7%)     35 (53%)     42 (66.7%)    40 (56.3%)    40 (60.6%)    30 (45.5%) 
  M           24 (35.3%)     31 (47%)     21 (33.3%)    31 (43.7%)    26 (39.4%)    36 (54.5%) 
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.
DT1C
DT2A
Source Code
---
title: DT2
subtitle: Demographics Tables Comparing BEP vs. non-BEP Population
categories: [DT]
---

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

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

## Table

The demographics table DT2 splits the columns by treatment arm and by the biomarker population (Yes vs. No), and summarizes selected demographic variables in the rows.
You can see here how we use the separate labels variable to specify the labels used in the column headers.

```{r}
lyt <- basic_table() %>%
  split_cols_by("ARM") %>%
  add_colcounts() %>%
  split_cols_by("BEP01FL", labels_var = "BEP_label") %>%
  analyze_vars(c("AGE", "SEX"))

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