Skip to contents

Adds difference to tables created by tbl_summary(). The difference between two groups (typically mean or rate difference) is added to the table along with the difference's confidence interval and a p-value (when applicable).

Usage

# S3 method for class 'tbl_summary'
add_difference(
  x,
  test = NULL,
  group = NULL,
  adj.vars = NULL,
  test.args = NULL,
  conf.level = 0.95,
  levels = NULL,
  include = everything(),
  pvalue_fun = label_style_pvalue(digits = 1),
  estimate_fun = list(c(all_continuous(), all_categorical(FALSE)) ~ label_style_sigfig(),
    all_dichotomous() ~ label_style_sigfig(scale = 100, suffix = "%"), all_tests("smd")
    ~ label_style_sigfig()),
  ...
)

Arguments

x

(tbl_summary)
table created with tbl_summary()

test

(formula-list-selector)
Specifies the tests/methods to perform for each variable, e.g. list(all_continuous() ~ "t.test", all_dichotomous() ~ "prop.test", all_categorical(FALSE) ~ "smd").

See below for details on default tests and ?tests for details on available tests and creating custom tests.

group

(tidy-select)
Variable name of an ID or grouping variable. The column can be used to calculate p-values with correlated data. Default is NULL. See tests for methods that utilize the group argument.

adj.vars

(tidy-select)
Variables to include in adjusted calculations (e.g. in ANCOVA models). Default is NULL.

test.args

(formula-list-selector)
Containing additional arguments to pass to tests that accept arguments. For example, add an argument for all t-tests, use test.args = all_tests("t.test") ~ list(var.equal = TRUE).

conf.level

(numeric)
a scalar in the interval (0, 1) indicating the confidence level. Default is 0.95

levels

(vector)
a length-two vector of the tbl_summary(by=) levels to compare. The difference is calculated as levels[1] minus levels[2]. This argument is required when the by variable has more than two levels, and allows the user to select which two groups to compare. When by has exactly two levels, this argument is optional and can be used to flip the direction of the difference (e.g. levels[2] minus levels[1]). Default is NULL.

include

(tidy-select)
Variables to include in output. Default is everything().

pvalue_fun

(function)
Function to round and format p-values. Default is label_style_pvalue(). The function must have a numeric vector input, and return a string that is the rounded/formatted p-value (e.g. pvalue_fun = label_style_pvalue(digits = 2)).

estimate_fun

(formula-list-selector)
List of formulas specifying the functions to round and format differences and confidence limits.

...

These dots are for future extensions and must be empty.

Value

a gtsummary table of class "tbl_summary"

Examples

# Example 1 ----------------------------------
trial |>
  select(trt, age, marker, response, death) %>%
  tbl_summary(
    by = trt,
    statistic =
      list(
        all_continuous() ~ "{mean} ({sd})",
        all_dichotomous() ~ "{p}%"
      ),
    missing = "no"
  ) |>
  add_n() |>
  add_difference()
Characteristic N Drug A
N = 98
1
Drug B
N = 102
1
Difference2 95% CI2 p-value2
Age 189 47 (15) 47 (14) -0.44 -4.6, 3.7 0.8
Marker Level (ng/mL) 190 1.02 (0.89) 0.82 (0.83) 0.20 -0.05, 0.44 0.12
Tumor Response 193 29% 34% -4.2% -18%, 9.9% 0.6
Patient Died 200 53% 59% -5.8% -21%, 9.0% 0.5
1 Mean (SD); %
2 Welch Two Sample t-test; 2-sample test for equality of proportions with continuity correction
Abbreviation: CI = Confidence Interval
# Example 2 ---------------------------------- # ANCOVA adjusted for grade and stage trial |> select(trt, age, marker, grade, stage) %>% tbl_summary( by = trt, statistic = list(all_continuous() ~ "{mean} ({sd})"), missing = "no", include = c(age, marker, trt) ) |> add_n() |> add_difference(adj.vars = c(grade, stage))
Characteristic N Drug A
N = 98
1
Drug B
N = 102
1
Adjusted Difference2 95% CI2 p-value2
Age 189 47 (15) 47 (14) -0.36 -4.5, 3.8 0.9
Marker Level (ng/mL) 190 1.02 (0.89) 0.82 (0.83) 0.19 -0.05, 0.43 0.12
1 Mean (SD)
2 ANCOVA
Abbreviation: CI = Confidence Interval
# Example 3 ---------------------------------- # Select two groups to compare when `by=` has 3+ levels trial |> tbl_summary( by = grade, statistic = all_continuous() ~ "{mean} ({sd})", include = c(age, marker), missing = "no" ) |> add_difference(levels = c("I", "III"))
Characteristic I
N = 68
1
II
N = 68
1
III
N = 64
1
Difference2,3 95% CI2,3 p-value2,3
Age 46 (15) 48 (14) 48 (14) -2.0 -7.1, 3.2 0.5
Marker Level (ng/mL) 1.07 (0.89) 0.68 (0.73) 1.00 (0.92) 0.07 -0.25, 0.39 0.7
1 Mean (SD)
2 Welch Two Sample t-test
3 Difference: I - III
Abbreviation: CI = Confidence Interval