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

使用dplyr和rstatix筛选多组内可执行t检验的有效分组方法

解决方法

你需要在执行t检验前,先在group_1、group_2、variable的组合层级下过滤符合独立样本t检验要求的分组,满足两个条件:

  • 分组内同时存在男女两个性别类别
  • 每个性别的样本量均达到你设定的阈值(示例中为5)

核心过滤代码

# 按t检验的分组维度聚合,过滤符合条件的分组
g_long_filtered <- g_long %>%
  group_by(group_1, group_2, variable) %>%
  # 两个判断条件:性别有2个水平,且每个水平样本量≥5
  filter(n_distinct(gender) == 2, all(table(gender) >=5)) %>%
  ungroup()

完整可运行代码

#加载包
library(dplyr)
library(reshape2)
library(rstatix)
#构造数据集
group_1 <-c(rep("Group X", 40), rep("Group Y", 40), 
                      rep("Group Z", 60), rep("Group Y", 20),
                      rep("Group Z", 50), rep("Group Y", 10))
group_2 <- c(rep("A", 100), rep("B", 20), rep("C", 50), rep("A", 20), rep("B", 30))
var1 <- rnorm(n=220, mean=0, sd=1)
var2 <- rnorm(n = 220, mean = 1, sd=1.3)
gender <- c(rep("M", 30), rep("F", 30), rep("M", 40) , rep("F", 50), rep("M", 20), 
            rep("F", 20), rep("M", 30))
data <- as.data.frame(cbind(group_1, group_2, var1, var2, gender))

#转换长格式
g_long <- gather(data, variable, value, var1:var2)
g_long$value <- as.numeric(g_long$value)

#过滤符合t检验要求的分组
g_long_filtered <- g_long %>%
  group_by(group_1, group_2, variable) %>%
  filter(n_distinct(gender) == 2, all(table(gender) >=5)) %>%
  ungroup()

#执行t检验
g_test <- g_long_filtered %>%
  group_by(variable, group_1, group_2) %>%
  t_test(value ~ gender, p.adjust.method = "holm", paired=FALSE)

代码逻辑说明

  1. 先以t_test的分组维度group_1、group_2、variable为聚合单位,而非额外加入gender分层
  2. n_distinct(gender) == 2 保证当前分组内同时存在男女两个类别,避免单性别分组
  3. all(table(gender) >=5) 保证每个性别的样本量都达到预设阈值,避免样本量不足的情况
  4. 过滤后的数据集再执行t检验就会自动跳过不符合要求的分组,不会抛出报错

内容的提问来源于stack exchange,提问作者Armags

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:33:02