如何用R的gtsummary包计算非平衡面板数据的样本汇总统计?
解决gtsummary面板数据个体均值汇总问题
要得到先按PersonID计算个体均值,再跨个体取整体汇总均值的结果,不需要直接在gtsummary前分组,而是先预处理数据生成个体层面的汇总数据集,再用gtsummary处理这个新数据集:
生成个体层面汇总数据集
用dplyr对原面板数据按PersonID分组,计算每个个体各变量的均值(按需处理缺失值),得到每个个体一行的数据集:library(dplyr) library(gtsummary) # 替换your_panel_data为你的实际数据集名 individual_level_data <- your_panel_data %>% group_by(PersonID) %>% summarize( # 为每个需要汇总的变量计算个体均值 annual_income = mean(annual_income, na.rm = TRUE), age = mean(age, na.rm = TRUE), # 其他变量依此类推添加 ) %>% ungroup() # 必须取消分组,避免后续gtsummary按个体拆分结果用gtsummary生成个体均值的整体汇总表
基于上面的个体层面数据集,调用gtsummary的tbl_summary(),此时计算的就是所有个体均值的汇总统计:final_summary_table <- individual_level_data %>% tbl_summary( include = c(annual_income, age), # 指定要展示的变量 # 自定义统计量格式,按需调整 statistic = list(all_continuous() ~ "{mean} ({sd})") ) %>% # 可选:调整表头和表标题 modify_header(label ~ "变量名称") %>% modify_caption("2003-2021年工人个体层面变量均值汇总")
关键说明
- 原面板数据中每个个体有多条时间维度记录,gtsummary默认对所有行计算均值,会偏离个体层面的真实平均水平;
- 先通过
group_by()+summarize()得到个体均值数据集后,gtsummary的统计结果就是你需要的「个体均值的整体平均」,比如年收入会得到$51,125而非$51,725。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

