Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to get mean and sd statistics instead of median and iqr when using tbl_continuous from gtsummary

I am using the package gtsummary. To obtain descriptive results from ‘desg’ and ‘group’ variables crossed, I have used the tbl_continuous function.

I got ‘median’ and ‘iqr’ as result measures but I wanted instead mean and sd, as I wanted.

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(gtsummary)

# Sample data
data <- data.frame(
  desg = c('a', 'b', 'c', 'a', 'b', 'c'),
  group = c('before', 'before', 'before', 'after', 'after', 'after'),
  values = c(10, 15, 12, 18, 22, 20)
)

data %>%
  select(desg, group, values) %>%
  tbl_continuous(variable = values, by = group) %>%
  modify_spanning_header(all_stat_cols() ~ "**Treatment Assignment**")
Characteristic  Treatment Assignment
after, N = 31   before, N = 31
desg        
    a   18.0 (18.0, 18.0)   10.0 (10.0, 10.0)
    b   22.0 (22.0, 22.0)   15.0 (15.0, 15.0)
    c   20.0 (20.0, 20.0)   12.0 (12.0, 12.0)
1 values: Median (IQR)
Created on 2023-10-07 with reprex v2.0.2

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You need to provide the appropriate statistic parameter. The docs state:

statistic: List of formulas specifying types of summary statistics to display for each variable. The default is everything() ~ {median} ({p25}, {p75})

I have to say, the format for providing this list is not entirely clear to me from this, but fortunately the tbl_summary() docs are little more helpful:

The default is list(all_continuous() ~ "{median} ({p25}, {p75})", all_categorical() ~ "{n} ({p}%)")

In our case that means:

data %>%
    select(desg, group, values) %>%
    tbl_continuous(
        variable = values, by = group,
        statistic = list(
            everything() ~ "{mean} ({sd})"
        )
    ) %>%
    modify_spanning_header(all_stat_cols() ~ "**Treatment Assignment**")
# Characteristic    Treatment Assignment
# after, N = 31 before, N = 31
# desg
#     a 18.0 (NA)   10.0 (NA)
#     b 22.0 (NA)   15.0 (NA)
#     c 20.0 (NA)   12.0 (NA)
# 1 values: Mean (SD)

Your sample data only has one observation per group which is why the sd() is NA here.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading