在R中复现带百分比与显著性差异的交叉表求助
在R中用expss复现带百分比与组间显著性的交叉表
问题描述
我之前在Power BI中制作了包含百分比及组间显著性差异的交叉表,现在需要在R中用expss包复现该表。尝试了一段代码但未成功,同时希望新增一列展示Wave2与Wave3每行的显著性差异。
原始尝试代码
library(expss) as.datatable_widget(base %>% group_by(CP1_TOTV2) %>% summarize(weight = sum(weight)) %>% tab_cells(weight / sum(weight)) %>% tab_cols(total(), BANNER3) %>% tab_stat_tpct(total_row_position = "above", total_label = "Total") %>% tab_pivot())
解决方案步骤
1. 数据导入(本地文件)
先确保数据正确导入,以CSV文件为例:
library(expss) library(readr) base <- read_csv("你的数据文件路径.csv") # 替换为实际本地文件路径
2. 正确构建带加权百分比的交叉表
原代码提前用group_by+summarize打乱了expss的统计逻辑,改用expss原生语法处理加权数据:
# 设置权重 base <- base %>% set_weight(weight) # 生成带行百分比的交叉表 cross_tab <- base %>% tab_cells(CP1_TOTV2) %>% tab_cols(total(), BANNER3) %>% tab_stat_tpct(total_row_position = "above", total_label = "Total") %>% tab_pivot()
3. 添加Wave2与Wave3的显著性检验
用tab_stat_sig做组间卡方检验,提取并合并显著性结果:
# 计算Wave2和Wave3的行显著性差异 sig_test <- base %>% tab_cells(CP1_TOTV2) %>% tab_cols(BANNER3) %>% tab_stat_sig(sig_labels = c("ns", "*", "**", "***"), p_adjust_method = "bonferroni") %>% tab_pivot() # 提取显著性列(适配你的列名,确保Wave2/Wave3对应正确) sig_col <- sig_test %>% select(CP1_TOTV2, `Wave2 vs Wave3` = sig) # 合并到交叉表 final_tab <- cross_tab %>% left_join(sig_col, by = "CP1_TOTV2") # 输出交互式表格 as.datatable_widget(final_tab)
关键说明
- 无需提前聚合数据,expss会自动处理加权统计
set_weight是expss处理加权样本的标准方法tab_stat_sig默认采用卡方检验,可通过参数调整检验类型与显著性标记规则
内容的提问来源于stack exchange,提问作者yefersonG
相关产品推荐
相关产品推荐

