You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:02:18