pavanv
pavanv

Reputation: 13

Add frequency and % of missing values in gtsummary

df_nhpi %>%    
select(AGE, SEX, MAR_STAT, HEIGHT, WEIGHT, BMI, HTN, HTNMED, MI, Smoking, COPD, CANCER, DIABETES) %>%   
tbl_summary(by = SEX,               
           label = list(MAR_STAT ~ 'Marital Status',        
                        HTN ~ 'Hypertension',                            
                        HTNMED ~ 'Hypertension Medication',                            
                        MI ~ 'Heart Attack',                             
                        Smoking ~ 'Smoking Status',                             
                        COPD ~ 'Chronic Obstructive Pulmonary Disease'),               
           type = list(c("HTN","HTNMED", "MI", "COPD", "CANCER") ~ "categorical"),               
           missing = "ifany",               
           missing_text = "Unknown",               
           statistic = list(all_continuous() ~ "{mean} ({sd})",                                
                            all_categorical() ~ "{n} ({p}%)"),               
           digits = all_continuous() ~ 2, percent = "column") %>%   
add_stat_label() %>%   
add_p(test = all_continuous() ~ "t.test", pvalue_fun = 
           function(x) style_pvalue(x, digits = 3)) %>%   
bold_p() %>%   
modify_caption("**Table 1. Baseline Characteristics**") %>%   bold_labels()

I'm trying to generate a table one. But, the issue here is, I want % for missing values across columns (specifically for categorical variables) and at the same time, I don't want missing values to be included while calculating p-values. I'm trying to do this in single chunk of code. Is there anyway to do this or should I go for the conventional method?

I've been searching the whole internet for the past three days. But, I don't find anything that works in my case.

PS: mutate and forcats doesn't work as it skews my p-values.This was the table I generated

Upvotes: 1

Views: 2425

Answers (1)

Daniel D. Sjoberg
Daniel D. Sjoberg

Reputation: 11774

I prepared two solutions that both report the proportion of missing data. Hopefully one of them works for you!

library(gtsummary)
packageVersion("gtsummary")
#> [1] '1.5.2'

# add % missing in new column
tbl1 <-
  trial %>%
  tbl_summary(
    by = trt, 
    include = response, 
    type = all_dichotomous() ~ "categorical",
    missing = "no"
  ) %>%
  add_p() %>%
  add_n(statistic = "{n_miss} ({p_miss}%)") %>%
  modify_header(n = "**Missing**")

enter image description here

# prepare tbl_summary with rows for missing, then merge in p-values
tbl2 <-
  trial %>%
  dplyr::mutate(response = forcats::fct_explicit_na(factor(response))) %>%
  tbl_summary(
    by = trt, 
    include = response, 
    label = list(response = "Tumor Response")
  ) %>%
  list(tbl1 %>% modify_column_hide(c(n, all_stat_cols()))) %>%
  tbl_merge(tab_spanner = FALSE)

enter image description here Created on 2022-03-22 by the reprex package (v2.0.1)

Upvotes: 0

Related Questions