如何用gtsummary::tbl_svysummary复现survey::svyby(svymean)的结果?
用gtsummary的tbl_svysummary复现survey::svyby(svymean)结果的解决方法
你需要调整tbl_svysummary()的参数配置,以下是正确的实现代码和说明:
核心问题分析
你之前的代码存在两个关键问题:
by和include参数颠倒了——svyby(~both, ~stype, ...)是按stype分组计算both的均值,对应tbl_svysummary应该设置by = stype、include = both- 统计量模板用了
sd,但抽样调查中需要的是标准误(std.error),而非普通标准差
正确代码实现
library(survey) library(gtsummary) data(api) dclus1 <- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) # 原svyby生成的结果 svyby(~both, ~stype, dclus1, svymean) # 用tbl_svysummary复现相同结果 dclus1 %>% tbl_svysummary( by = stype, # 指定分组变量为stype,对应svyby的~stype include = both, # 指定分析变量为both,对应svyby的~both statistic = all_dichotomous() ~ "{mean} ({std.error})", # 输出均值(比例)+标准误 digits = all_dichotomous() ~ c(3, 3) # 设置小数位数,和svyby结果匹配 ) %>% modify_header(label = "变量", stat_by = "**{level}**") # 优化表头可读性
说明
all_dichotomous()专门针对二分变量(both是0/1变量),比all_categorical()更精准{mean}对应svymean计算的比例值,{std.error}对应抽样标准误,和svyby输出的结果完全匹配- 通过
digits参数可以调整小数位数,和原结果的格式保持一致
内容的提问来源于stack exchange,提问作者r_rabbit
相关产品推荐
相关产品推荐

