如何在R中仅将健康对照组与其他组做统计检验且不拆分数据?
在R中不拆分数据集完成健康对照组与多患者组的Wilcoxon检验及p值调整
核心思路
利用rstatix包的wilcox_test函数的ref.group参数,直接指定健康对照组(HC)为参考组,无需拆分数据集就能自动生成HC与每个患者组的对比结果,同时跳过患者组之间的检验。
步骤1:预处理数据集(若HC仅单个时间点)
如果HC组只有一个时间点的数据,需要先将其复制到P1/P2的所有时间点,确保每个时间点都有HC、P1、P2三组数据:
library(dplyr) library(rstatix) # 假设原始数据集名为df,包含列:Time, Group, Population1, ...其他指标 # 提取HC数据 hc_data <- df %>% filter(Group == "HC") # 提取P1/P2的患者数据 patient_data <- df %>% filter(Group %in% c("P1", "P2")) # 将HC数据复制到所有患者组的时间点 hc_expanded <- hc_data %>% slice(rep(1:n(), each = length(unique(patient_data$Time)))) %>% mutate(Time = rep(unique(patient_data$Time), each = nrow(hc_data))) # 合并为完整数据集 df_combined <- bind_rows(hc_expanded, patient_data) # 可选:将Group转为因子,指定HC为第一水平(非必需,但逻辑更清晰) df_combined <- df_combined %>% mutate(Group = factor(Group, levels = c("HC", "P1", "P2")))
步骤2:执行Wilcoxon检验并调整p值
按时间点内的检验调整p值
如果希望每个时间点的2组对比(HC-P1、HC-P2)单独调整p值:
# 针对Population1做检验 test_results <- df_combined %>% group_by(Time) %>% # ref.group指定仅与HC对比,自动跳过P1与P2的检验 wilcox_test(Population1 ~ Group, ref.group = "HC", paired = FALSE) %>% # 按每个时间点分组调整p值 adjust_pvalue(method = "fdr", group_by = "Time") %>% # 添加显著性标记 add_significance("p.adj") # 查看结果 print(test_results)
全局所有检验统一调整p值
如果希望把所有时间点的12组对比(6个时间点×2组)放在一起调整p值:
test_results_global <- df_combined %>% group_by(Time) %>% wilcox_test(Population1 ~ Group, ref.group = "HC", paired = FALSE) %>% ungroup() %>% # 取消时间点分组,所有检验一起调整 adjust_pvalue(method = "fdr") %>% add_significance("p.adj")
轻松切换检测指标
要切换到其他指标(比如Population2),只需修改wilcox_test中的响应变量即可:
# 切换到Population2的检验 test_results_pop2 <- df_combined %>% group_by(Time) %>% wilcox_test(Population2 ~ Group, ref.group = "HC", paired = FALSE) %>% adjust_pvalue(method = "fdr", group_by = "Time") %>% add_significance("p.adj")
关键说明
ref.group参数是核心:它告诉wilcox_test仅生成指定参考组与其他组的对比,自动排除组间的非目标对比(比如P1 vs P2)。- p值调整方式可根据研究需求选择:时间点内调整适合关注每个时间点的局部差异,全局调整适合控制整体的假阳性率。
内容的提问来源于stack exchange,提问作者rff234
相关产品推荐
相关产品推荐

