Skip to contents

AE Mocks

Reusable tfrmt base layer:

ae_mock_table <- function(tfrmt_obj){
  tfrmt(
    title = "Table Name",
    subtitle = "Study ID: GSK12345",
    body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = ".default",
                   frmt_combine(
                     "{count} {percent}",
                     count = frmt("XXX"),
                     percent = frmt_when("==100"~ frmt(""),
                                         "==0"~ "",
                                         "TRUE" ~ frmt("(XX.X%)")))),
    frmt_structure(group_val = ".default", label_val = ".default",
                   frmt_combine(
                     "{num} ({lower}, {upper})",
                     num = frmt("XX.X"),
                     lower = frmt_when("==100"~ frmt(""),
                                       "==0"~ "",
                                       "TRUE" ~ frmt("XX.X%")),
                     upper = frmt_when("==100"~ frmt(""),
                                       "==0"~ "",
                                       "TRUE" ~ frmt("XX.X%"))))
    ),
  col_plan = col_plan(
    T1, T2, `T1&T2`, PL,
    everything(),
    -starts_with("ord")
    )
  )
}

Example 1: mock table with no groups

df <- bind_rows(
  crossing(label = c("label 1", "label 2", "label 3"),
           column = c("T1", "T2", "T1&T2", "PL"),
           param = c("count", "percent")) %>%
    mutate(ord1 = rep(seq(1:length(unique(.$label))), each = nrow(.)/length(unique(.$label)) )),
  crossing(label = c("label 1", "label 2", "label 3"),
           column = c("risk T1-PL", "risk T2-PL", "risk T1&T2-PL"),
           param = c("num", "lower", "upper")) %>%
    mutate(ord1 = rep(seq(1:length(unique(.$label))), each = nrow(.)/length(unique(.$label)) ))
  ) %>% arrange_all()

ae_mock_table() %>%
  tfrmt(
    label = "label",
    param = "param",
    column = "column",
    value = value,
    sorting_cols = vars(ord1)
    ) %>%
  print_mock_gt(df)
Table Name
Study ID: GSK12345
T1 T2 T1&T2 PL risk T1&T2-PL risk T1-PL risk T2-PL
label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
label 3 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)

Example 2: mock table with one level of grouping, indented labels

df <- bind_rows(
  crossing(group = c("grp1", "grp2"),
           label = c("label 1", "label 2", "label 3"),
           column = c("T1", "T2", "T1&T2", "PL"),
           param = c("count", "percent")),
  crossing(group = c("grp1", "grp2"),
           label = c("label 1", "label 2", "label 3"),
           column = c("risk T1-PL", "risk T2-PL", "risk T1&T2-PL"),
           param = c("num", "lower", "upper"))
  ) %>% arrange_all()

ae_mock_table() %>%
  tfrmt(
    group = group,
    label = "label",
    param = "param",
    column = "column",
    value = value,
    row_grp_plan = row_grp_plan( row_grp_structure(group_val = ".default", element_block(post_space = "   ")) ),
    
    col_plan = col_plan(
      T1, T2, `T1&T2`, PL, `risk T1-PL`, `risk T2-PL`, `risk T1&T2-PL`,
      everything(),
      -starts_with("ord"))
    ) %>%
  print_mock_gt(df)
Table Name
Study ID: GSK12345
T1 T2 T1&T2 PL risk T1-PL risk T2-PL risk T1&T2-PL
grp1






  label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
  label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
  label 3 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
                 
grp2






  label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
  label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
  label 3 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
                 

Example 3: mock table with two levels of grouping, indented labels

df <- bind_rows(
  crossing(grp1 = c("group 1.1", "group 1.2"),
           grp2 = c("group 2.1", "group 2.2"),
           label = c("label 1", "label 2"),
           column = c("T1", "T2", "T1&T2", "PL"),
           param = c("count", "percent")),
  crossing(grp1 = c("group 1.1", "group 1.2"),
           grp2 = c("group 2.1", "group 2.2"),
           label = c("label 1", "label 2"),
           column = c("risk T1-PL", "risk T2-PL", "risk T1&T2-PL"),
           param = c("num", "lower", "upper"))
  ) %>% arrange_all()

ae_mock_table() %>%
  tfrmt(
    group = c(grp1, grp2),
    label = "label",
    param = "param",
    column = "column",
    value = value,
    row_grp_plan = row_grp_plan( row_grp_structure(group_val = ".default", element_block(post_space = "   ")) ),
    
    col_plan = col_plan(
      T1, T2, `T1&T2`, PL, `risk T1-PL`, `risk T2-PL`, `risk T1&T2-PL`,
      everything(),
      -starts_with("ord"))
    ) %>%
  print_mock_gt(df)
Table Name
Study ID: GSK12345
T1 T2 T1&T2 PL risk T1-PL risk T2-PL risk T1&T2-PL
group 1.1






  group 2.1






    label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
    label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
                   
  group 2.2






    label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
    label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
                   
group 1.2






  group 2.1






    label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
    label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
                   
  group 2.2






    label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
    label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
                   

Example 4: mock table with two levels of grouping, column separated labels

ae_mock_table() %>%
  tfrmt(
    group = c(grp1, grp2),
    label = "label",
    param = "param",
    column = "column",
    value = value,
    row_grp_plan = row_grp_plan(label_loc = element_row_grp_loc(location = "column")),    
    
    col_plan = col_plan(
      T1, T2, `T1&T2`, PL, `risk T1-PL`, `risk T2-PL`, `risk T1&T2-PL`,
      everything(),
      -starts_with("ord"))
    ) %>%
  print_mock_gt(df)
Table Name
Study ID: GSK12345
T1 T2 T1&T2 PL risk T1-PL risk T2-PL risk T1&T2-PL
group 1.1 group 2.1






  label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
  label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
group 2.2






  label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
  label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
group 1.2 group 2.1






  label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
  label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
group 2.2






  label 1 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)
  label 2 XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XXX (XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%) XX.X (XX.X%, XX.X%)

Example 5: mock table with combined columns, using data_ae

fmt_spec <- tfrmt(
  group = AEBODSYS,
  label = AETERM,
  param = param,
  column = c(col2, col1),
  value = value,
  row_grp_plan = row_grp_plan(),
  body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = ".default",
            frmt_combine("{n} {pct}",
                        n = frmt("XXX"),
                        pct = frmt_when(
                          "==100" ~ "",
                          "==0" ~ "",
                          TRUE ~ frmt("(xx.x %)")))),
    frmt_structure(group_val = ".default", label_val = ".default", 
                   AEs = frmt("[XXX]")),
    frmt_structure(group_val = ".default", label_val = ".default", 
                   pval = frmt_when(">0.99" ~ ">0.99",
                                    "<0.001" ~ "<0.001",
                                    "<0.05" ~ frmt("x.xxx*"),
                                    TRUE ~ frmt("x.xxx", missing = "--")))
  ), col_plan = col_plan(-starts_with("ord")))

#
data_ae2 <- data_ae %>% 
  group_by(AEBODSYS, AETERM) %>% 
  mutate(pct_high = value[col2=="Xanomeline High Dose" & param=="pct"]) %>% 
  ungroup %>% 
  filter(pct_high >10) %>% 
  select(-pct_high)

data_ae2 %>%  
  select(-value) %>% 
  arrange(ord1, ord2 ) %>% 
  print_mock_gt(fmt_spec, . )
Placebo Xanomeline Low Dose Xanomeline High Dose fisher_pval
n_pct AEs n_pct AEs n_pct AEs p_low p_high
ANY BODY SYSTEM XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
CARDIAC DISORDERS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
GASTROINTESTINAL DISORDERS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
GENERAL DISORDERS AND ADMINISTRATION SITE CONDITIONS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
  APPLICATION SITE PRURITUS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
  APPLICATION SITE ERYTHEMA XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
  APPLICATION SITE IRRITATION XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
INFECTIONS AND INFESTATIONS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
NERVOUS SYSTEM DISORDERS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
  DIZZINESS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
RESPIRATORY, THORACIC AND MEDIASTINAL DISORDERS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
SKIN AND SUBCUTANEOUS TISSUE DISORDERS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
  PRURITUS XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
  ERYTHEMA XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx
  RASH XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] XXX (xx.x %) [XXX] x.xxx x.xxx

Demography Mocks

tfrmt(
  # specify columns in the data
  group = c(rowlbl1,grp),
  label = rowlbl2,
  column = column, 
  param = param,
  value = value,
  sorting_cols = c(ord1, ord2),
  
  # Specify body plan
  body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = ".default", frmt_combine("{n} {pct}", 
                                                                                n = frmt("xxx"),
                                                                                pct = frmt_when("==100" ~ "",
                                                                                                "==0" ~ "",
                                                                                                TRUE ~ frmt("(xx.x %)")))),
    frmt_structure(group_val = ".default", label_val = "n", frmt("xxx")),
    frmt_structure(group_val = ".default", label_val = c("Mean", "Median", "Min","Max"), frmt("xxx.x")),
    frmt_structure(group_val = ".default", label_val = "SD", frmt("xxx.xx")),
    frmt_structure(group_val = ".default", label_val = ".default", p = frmt("")),
    frmt_structure(group_val = ".default", label_val = c("n","<65 yrs","<12 months","<25"), p = frmt_when(">0.99" ~ ">0.99",
                                                                                 "<0.001" ~ "<0.001",
                                                                                 TRUE ~ frmt("x.xxx", missing = "")))
  ),
  
  # Specify row group plan
  row_grp_plan = row_grp_plan(
    row_grp_structure(group_val = ".default", element_block(post_space = " ")),
    label_loc = element_row_grp_loc(location = "column")
  ),
  
  # Specify column styling plan
  col_style_plan = col_style_plan(
    col_style_structure(align = c(".",","," "), col = vars(everything()))
  ),
  
  # remove extra cols
  col_plan = col_plan(-grp, 
                      -starts_with("ord") )
) %>% 
  print_mock_gt(data_demog %>% select(-value))
Placebo Xanomeline Low Dose Xanomeline High Dose Total p-value
Age (y)         n         xxx          xxx          xxx          xxx          x.xxx
     Mean         xxx.x        xxx.x        xxx.x        xxx.x             
       SD         xxx.xx       xxx.xx       xxx.xx       xxx.xx            
   Median         xxx.x        xxx.x        xxx.x        xxx.x             
      Min         xxx.x        xxx.x        xxx.x        xxx.x             
      Max         xxx.x        xxx.x        xxx.x        xxx.x             
                                                                           
      <65 yrs     xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) x.xxx
    65-80 yrs     xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
      >80 yrs     xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
                                                                           
Sex         n         xxx          xxx          xxx          xxx          x.xxx
     Male         xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
   Female         xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
                                                                           
Race (Origin)         n         xxx          xxx          xxx          xxx          x.xxx
Caucasian         xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
  African Descent xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
 Hispanic         xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
    Other         xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
                                                                           
MMSE         n         xxx          xxx          xxx          xxx          x.xxx
     Mean         xxx.x        xxx.x        xxx.x        xxx.x             
       SD         xxx.xx       xxx.xx       xxx.xx       xxx.xx            
   Median         xxx.x        xxx.x        xxx.x        xxx.x             
      Min         xxx.x        xxx.x        xxx.x        xxx.x             
      Max         xxx.x        xxx.x        xxx.x        xxx.x             
                                                                           
Duration of disease         n         xxx          xxx          xxx          xxx          x.xxx
     Mean         xxx.x        xxx.x        xxx.x        xxx.x             
       SD         xxx.xx       xxx.xx       xxx.xx       xxx.xx            
   Median         xxx.x        xxx.x        xxx.x        xxx.x             
      Min         xxx.x        xxx.x        xxx.x        xxx.x             
      Max         xxx.x        xxx.x        xxx.x        xxx.x             
                                                                           
      <12 months  xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) x.xxx
     >=12 months  xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
                                                                           
Years of education         n         xxx          xxx          xxx          xxx          x.xxx
     Mean         xxx.x        xxx.x        xxx.x        xxx.x             
       SD         xxx.xx       xxx.xx       xxx.xx       xxx.xx            
   Median         xxx.x        xxx.x        xxx.x        xxx.x             
      Min         xxx.x        xxx.x        xxx.x        xxx.x             
      Max         xxx.x        xxx.x        xxx.x        xxx.x             
                                                                           
Baseline weight(kg)         n         xxx          xxx          xxx          xxx          x.xxx
     Mean         xxx.x        xxx.x        xxx.x        xxx.x             
       SD         xxx.xx       xxx.xx       xxx.xx       xxx.xx            
   Median         xxx.x        xxx.x        xxx.x        xxx.x             
      Min         xxx.x        xxx.x        xxx.x        xxx.x             
      Max         xxx.x        xxx.x        xxx.x        xxx.x             
                                                                           
Baseline height(cm)         n         xxx          xxx          xxx          xxx          x.xxx
     Mean         xxx.x        xxx.x        xxx.x        xxx.x             
       SD         xxx.xx       xxx.xx       xxx.xx       xxx.xx            
   Median         xxx.x        xxx.x        xxx.x        xxx.x             
      Min         xxx.x        xxx.x        xxx.x        xxx.x             
      Max         xxx.x        xxx.x        xxx.x        xxx.x             
                                                                           
Baseline BMI         n         xxx          xxx          xxx          xxx          x.xxx
     Mean         xxx.x        xxx.x        xxx.x        xxx.x             
       SD         xxx.xx       xxx.xx       xxx.xx       xxx.xx            
   Median         xxx.x        xxx.x        xxx.x        xxx.x             
      Min         xxx.x        xxx.x        xxx.x        xxx.x             
      Max         xxx.x        xxx.x        xxx.x        xxx.x             
                                                                           
      <25         xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) x.xxx
   25-<30         xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
     >=30         xxx (xx.x %) xxx (xx.x %) xxx (xx.x %) xxx (xx.x %)      
                                                                           

Efficacy Mocks

tfrmt(
  group = group,
  label = label,
  column = column,
  param = param,
  value = value,
  sorting_cols = c(ord1, ord2),
  row_grp_plan = row_grp_plan(
    row_grp_structure(group_val = list(group="Change from Baseline"), element_block(post_space = " ")),
    row_grp_structure(group_val = list(group="p-value (Dose Response)"), element_block(post_space = " ")),
    row_grp_structure(group_val = list(group="p-value (Xan - Placebo)"), element_block(post_space = " "))
  ),
  body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = "n", frmt("xx")), 
    frmt_structure(group_val = ".default", label_val = "Median (Range)", frmt_combine("{median} ({min};{max})",
                                                                                      median = frmt("xx.x"),
                                                                                      min = frmt("xx"),
                                                                                      max = frmt("xx"), missing = " ")),
    frmt_structure(group_val = ".default", label_val = "Mean (SD)", frmt_combine("{mean} ({sd})",
                                                                                      mean = frmt("xx.x"),
                                                                                      sd = frmt("xx.xx"), missing = " ")),
    frmt_structure(group_val = ".default", label_val = "Diff of LS Means (SE)", frmt_combine("{diff} ({diff_se})",
                                                                                 diff = frmt("xx.x"),
                                                                                 diff_se = frmt("xx.xx"), missing = " ")),
    frmt_structure(group_val = ".default", label_val = "95% CI", frmt_combine("({diff_lcl};{diff_ucl})",
                                                                              diff_lcl = frmt("xx.x"),
                                                                              diff_ucl = frmt("xx.x"), missing = " ")),
    frmt_structure(group_val = ".default", label_val = ".default", p.value = frmt_when("<0.001" ~ "<0.001",
                                                                                       ">0.99" ~ ">0.99",
                                                                                       TRUE ~ frmt("x.xxx", missing = " ")))
  ),
  col_plan = col_plan(
    group, label,
    contains("Placebo"),
    contains("Low"),
    contains("High")
  )
) %>%
  print_mock_gt(data_efficacy %>% select(-value))
Placebo Xanomeline Low Dose Xanomeline High Dose ord1 ord2
Baseline




  n xx xx xx 1 1
  Mean (SD) xx.x (xx.xx) xx.x (xx.xx) xx.x (xx.xx) 1 2
  Median (Range) xx.x (xx;xx) xx.x (xx;xx) xx.x (xx;xx) 1 3
Week 24




  n xx xx xx 2 1
  Mean (SD) xx.x (xx.xx) xx.x (xx.xx) xx.x (xx.xx) 2 2
  Median (Range) xx.x (xx;xx) xx.x (xx;xx) xx.x (xx;xx) 2 3
Change from Baseline




  n xx xx xx 3 1
  Mean (SD) xx.x (xx.xx) xx.x (xx.xx) xx.x (xx.xx) 3 2
  Median (Range) xx.x (xx;xx) xx.x (xx;xx) xx.x (xx;xx) 3 3
          3 3
p-value (Dose Response) x.xxx 4 4
          4 4
p-value (Xan - Placebo) x.xxx x.xxx 5 4
  Diff of LS Means (SE) xx.x (xx.xx) xx.x (xx.xx) 5 5
  95% CI (xx.x;xx.x) (xx.x;xx.x) 5 6
          5 6
p-value (Xan High - Xan Low) x.xxx 6 4
  Diff of LS Means (SE) xx.x (xx.xx) 6 5
  95% CI (xx.x;xx.x) 6 6