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

DT2A

Demographics Table Allowing Testing to Compare Demographic Variables Between Non-BEP vs. 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 DT2A splits the columns by treatment arm and by BEP vs. non-BEP, summarizes selected demographic variables in the rows and performs tests to compare demographic variables between Non-BEP vs. BEP population. Note that p-values can be NA when the test could not be performed due to row counts being all zero, e.g.

Code
lyt <- basic_table() %>%
  split_cols_by("ARM") %>%
  add_colcounts() %>%
  split_cols_by("BEP01FL", labels_var = "BEP_label", ref_group = "Y") %>%
  compare_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)
  p-value (t-test)                            0.1384                    0.6846                    0.6139  
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%)
  p-value (chi-squared test)                  0.2309                    0.2951                    0.1165  
Code
sessionInfo()
R version 4.4.2 (2024-10-31)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 24.04.1 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.26.so;  LAPACK version 3.12.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.7        rtables_0.6.11    magrittr_2.0.3   
[5] formatters_0.5.10

loaded via a namespace (and not attached):
 [1] Matrix_1.7-2             gtable_0.3.6             jsonlite_1.9.0          
 [4] compiler_4.4.2           tidyselect_1.2.1         stringr_1.5.1           
 [7] tidyr_1.3.1              splines_4.4.2            scales_1.3.0            
[10] yaml_2.3.10              fastmap_1.2.0            lattice_0.22-6          
[13] ggplot2_3.5.1            R6_2.6.1                 generics_0.1.3          
[16] knitr_1.49               forcats_1.0.0            rbibutils_2.3           
[19] htmlwidgets_1.6.4        backports_1.5.0          checkmate_2.3.2         
[22] tibble_3.2.1             munsell_0.5.1            pillar_1.10.1           
[25] rlang_1.1.5              broom_1.0.7              stringi_1.8.4           
[28] xfun_0.51                cli_3.6.4                Rdpack_2.6.2            
[31] digest_0.6.37            grid_4.4.2               lifecycle_1.0.4         
[34] vctrs_0.6.5              evaluate_1.0.3           glue_1.8.0              
[37] nestcolor_0.1.3          codetools_0.2-20         survival_3.8-3          
[40] random.cdisc.data_0.3.16 colorspace_2.1-1         rmarkdown_2.29          
[43] purrr_1.0.4              tools_4.4.2              pkgconfig_2.0.3         
[46] htmltools_0.5.8.1       

Reuse

Copyright 2023, Hoffmann-La Roche Ltd.
DT2
TET
Source Code
---
title: DT2A
subtitle: Demographics Table Allowing Testing to Compare Demographic Variables Between Non-BEP vs. BEP population
categories: [DT]
---

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

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

## Table

The demographics table DT2A splits the columns by treatment arm and by BEP vs. non-BEP, summarizes selected demographic variables in the rows and performs tests to compare demographic variables between Non-BEP vs. BEP population.
Note that p-values can be `NA` when the test could not be performed due to row counts being all zero, e.g.

```{r}
lyt <- basic_table() %>%
  split_cols_by("ARM") %>%
  add_colcounts() %>%
  split_cols_by("BEP01FL", labels_var = "BEP_label", ref_group = "Y") %>%
  compare_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