如何让survey与gtsummary报告因子变量的全部水平
解决方案
要保留因子变量v1.fac的全部水平(包括无观测的“Green”),只需在tbl_strata()函数中添加keep_factors = TRUE参数即可,该参数会强制保留所有预定义的因子水平,即使对应层没有观测数据。
修改后的完整代码
library(survey) library(gtsummary) library(dplyr) df <- data.frame(v1 = c(1,1,4,4,4,4,2,4,1,1,1,2,2,2,4,2,1,2,1,4), v2 = c(3,2,1,2,3,2,3,2,3,1,1,3,3,2,1,3,2,2,1,2), agecat = c(1,3,1,2,3,2,3,2,3,1,2,3,1,2,1,3,1,2,1,NA), str = c(1,4,1,2,3,6,5,1,4,6,3,4,5,6,1,5,3,2,1,4), wgts = c(1.28,1.77,1.28,1.40,1.44,1.71,1.04,1.28,1.77,1.71,1.44,1.77,1.04,1.71,1.28,1.04,1.44,1.40,1.28,1.77)) df <- df %>% mutate(v1.fac = factor(v1, levels = c(1,2,3,4), labels = c('Red','Blue','Green','Black')), v2.fac = factor(v2, levels = c(1,2,3), labels = c('Small','Medium','Large')), agecat.fac = factor(agecat, levels = c(1,2,3), labels = c('<18','18-54','54+'))) tabl <- svydesign(id = ~1, strata = ~str, weights = ~wgts, data = df) %>% tbl_strata(strata = c('v1.fac'), keep_factors = TRUE, # 关键改动:保留所有因子水平 .combine_with = c('tbl_merge'), .tbl_fun = ~ .x %>% tbl_svysummary(include='agecat.fac', by='v2.fac', missing='no', label=agecat.fac~'Age', statistic=agecat.fac~'{n}') %>% modify_header(all_stat_cols() ~ '{level}') %>% modify_footnote(all_stat_cols() ~ NA)) tabl
说明
keep_factors = TRUE是核心参数,它会忽略层内是否有观测数据,强制保留v1.fac所有预定义的因子水平。- 生成的表格中“Green”层的统计值会显示为0(因为无对应观测),符合期望的展示效果。
内容的提问来源于stack exchange,提问作者seehorse
相关产品推荐
相关产品推荐

