Skip to contents

[Stable]

Summarize results of ANCOVA. This can be used to analyze multiple endpoints and/or multiple timepoints within the same response variable .var.

Usage

h_ancova(.var, .df_row, variables)

s_ancova(df, .var, .df_row, variables, .ref_group, .in_ref_col, conf_level)

a_ancova(df, .var, .df_row, variables, .ref_group, .in_ref_col, conf_level)

summarize_ancova(
  lyt,
  vars,
  var_labels,
  ...,
  show_labels = "visible",
  table_names = vars,
  .stats = NULL,
  .formats = NULL,
  .labels = NULL,
  .indent_mods = NULL
)

Arguments

.var

(string)
single variable name that is passed by rtables when requested by a statistics function.

.df_row

(data frame)
data set that includes all the variables that are called in .var and variables.

variables

(named list of strings)
list of additional analysis variables, with expected elements:

  • arm: (string)
    group variable, for which the covariate adjusted means of multiple groups will be summarized. Specifically, the first level of arm variable is taken as the reference group.

  • covariates: (character)
    a vector that can contain single variable names (such as "X1"), and/or interaction terms indicated by "X1 * X2".

df

(data frame)
data set containing all analysis variables.

.ref_group

(data frame or vector)
the data corresponding to the reference group.

.in_ref_col

(logical)
TRUE when working with the reference level, FALSE otherwise.

conf_level

(proportion)
confidence level of the interval.

lyt

(layout)
input layout where analyses will be added to.

vars

(character)
variable names for the primary analysis variable to be iterated over.

var_labels

character for label.

...

additional arguments for the lower level functions.

show_labels

label visibility: one of "default", "visible" and "hidden".

table_names

(character)
this can be customized in case that the same vars are analyzed multiple times, to avoid warnings from rtables.

.stats

(character)
statistics to select for the table.

.formats

(named character or list)
formats for the statistics.

.labels

(named character)
labels for the statistics (without indent).

.indent_mods

(named integer)
indent modifiers for the labels.

Value

A named list of 5 statistics:

  • n: count of complete sample size for the group.

  • lsmean: estimated marginal means in the group.

  • lsmean_diff: difference in estimated marginal means in comparison to the reference group. If working with the reference group, this will be empty.

  • lsmean_diff_ci: confidence level for difference in estimated marginal means in comparison to the reference group.

  • pval: p-value (not adjusted for multiple comparisons).

Functions

  • h_ancova(): Helper function to return results of a linear model.

  • s_ancova(): Statistics function that produces a named list of results of the investigated linear model.

  • a_ancova(): Formatted Analysis function which can be further customized by calling rtables::make_afun() on it. It is used as afun in rtables::analyze().

  • summarize_ancova(): Layout creating function which can be be used for creating summary tables for analysis of covariance (ANCOVA).

Examples

h_ancova(
  .var = "Sepal.Length",
  .df_row = iris,
  variables = list(arm = "Species", covariates = c("Petal.Length * Petal.Width", "Sepal.Width"))
)
#>  Species    emmean     SE  df lower.CL upper.CL
#>  setosa       6.15 0.3371 143     5.49     6.82
#>  versicolor   5.72 0.0668 143     5.59     5.85
#>  virginica    5.41 0.1488 143     5.11     5.70
#> 
#> Confidence level used: 0.95 

library(scda)
library(dplyr)

adsl <- synthetic_cdisc_data("latest")$adsl
adqs <- synthetic_cdisc_data("latest")$adqs

adqs_single <- adqs %>%
  filter(
    AVISIT == "WEEK 1 DAY 8", # single time point
    PARAMCD == "FKSI-FWB" # single end point
  ) %>%
  mutate(CHG = ifelse(BMEASIFL == "Y", CHG, NA)) # only analyze evaluable population

df <- adqs_single %>%
  filter(ARMCD == "ARM B")
.var <- "CHG"
.df_row <- adqs_single
variables <- list(arm = "ARMCD", covariates = "SEX * AGE")
.ref_group <- adqs_single %>%
  filter(ARMCD == "ARM A")
conf_level <- 0.95

# Internal function - s_ancova
if (FALSE) {
s_ancova(df, .var, .df_row, variables, .ref_group, .in_ref_col = FALSE, conf_level)
}

# Internal function - a_ancova
if (FALSE) {
a_ancova(df, .var, .df_row, variables, .ref_group, .in_ref_col = FALSE, conf_level)
}


library(scda)
library(rtables)
library(dplyr)

adsl <- synthetic_cdisc_data("latest")$adsl
adqs <- synthetic_cdisc_data("latest")$adqs
adqs_single <- adqs %>%
  filter(
    AVISIT == "WEEK 1 DAY 8", # single time point
    PARAMCD == "FKSI-FWB" # single end point
  ) %>%
  mutate(CHG = ifelse(BMEASIFL == "Y", CHG, NA)) # only analyze evaluable population
adqs_multi <- adqs %>%
  filter(AVISIT == "WEEK 1 DAY 8")

basic_table() %>%
  split_cols_by("ARMCD", ref_group = "ARM A") %>%
  add_colcounts() %>%
  summarize_ancova(
    vars = "CHG",
    variables = list(arm = "ARMCD", covariates = NULL),
    table_names = "unadj",
    conf_level = 0.95, var_labels = "Unadjusted comparison",
    .labels = c(lsmean = "Mean", lsmean_diff = "Difference in Means")
  ) %>%
  summarize_ancova(
    vars = "CHG",
    variables = list(arm = "ARMCD", covariates = c("BASE", "STRATA1")),
    table_names = "adj",
    conf_level = 0.95, var_labels = "Adjusted comparison (covariates BASE and STRATA1)"
  ) %>%
  build_table(adqs_single, alt_counts_df = adsl)
#>                                                      ARM A        ARM B           ARM C    
#>                                                     (N=134)      (N=134)         (N=132)   
#> ———————————————————————————————————————————————————————————————————————————————————————————
#> Unadjusted comparison                                                                      
#>   n                                                   68           73              62      
#>   Mean                                               3.68         5.07            3.09     
#>   Difference in Means                                             1.38            -0.59    
#>     95% CI                                                    (-2.76, 5.53)   (-4.91, 3.73)
#>     p-value                                                      0.5113          0.7873    
#> Adjusted comparison (covariates BASE and STRATA1)                                          
#>   n                                                   68           73              62      
#>   Adjusted Mean                                      4.06         3.57            3.34     
#>   Difference in Adjusted Means                                    -0.49           -0.72    
#>     95% CI                                                    (-3.28, 2.29)   (-3.57, 2.12)
#>     p-value                                                      0.7277          0.6165    
if (FALSE) {
basic_table() %>%
  split_cols_by("ARMCD", ref_group = "ARM A") %>%
  split_rows_by("PARAMCD") %>%
  summarize_ancova(
    vars = "CHG",
    variables = list(arm = "ARMCD", covariates = c("BASE", "STRATA1")),
    conf_level = 0.95, var_labels = "Adjusted mean"
  ) %>%
  build_table(adqs_multi, alt_counts_df = adsl)
}