如何在R中自动完成多组配对Wilcoxon符号秩检验两两比较并获取统计量
自动批量执行配对Wilcoxon符号秩检验并提取V统计量
针对被试内设计的两两Wilcoxon符号秩检验,以下是两种高效自动化实现方式,分别适配长格式和宽格式数据,可直接提取V统计量、p值,还能按需添加p值校正:
一、长格式数据处理
假设你的长格式数据包含三列:subject(被试ID)、direction(分组变量,取值l2l/r2r/r2l/l2r)、count(因变量)。用tidyverse工具链批量生成配对组合并执行检验:
library(tidyverse) # 模拟长格式数据(替换为你的真实数据) long_data <- tibble( subject = rep(1:20, 4), direction = rep(c("l2l", "r2r", "r2l", "l2r"), each = 20), count = rpois(80, lambda = 5) ) # 生成所有两两分组配对 pair_combs <- combn(unique(long_data$direction), 2, simplify = FALSE) # 批量执行配对Wilcoxon检验并整理结果 results_long <- map_dfr(pair_combs, function(comb) { # 筛选当前配对组并转宽格式(适配配对检验输入要求) data_sub <- long_data %>% filter(direction %in% comb) %>% pivot_wider(names_from = direction, values_from = count) # 执行配对Wilcoxon检验 test_res <- wilcox.test(data_sub[[comb[1]]], data_sub[[comb[2]]], paired = TRUE) # 输出结果:分组对、V统计量、原始p值 tibble( group1 = comb[1], group2 = comb[2], V_statistic = as.numeric(test_res$statistic), p_value = test_res$p.value ) }) # 可选:添加校正后的p值(这里用Bonferroni,可替换为holm/fdr等) results_long <- results_long %>% mutate(p_adj = p.adjust(p_value, method = "bonferroni")) print(results_long)
二、宽格式数据处理
如果你的数据是宽格式(每个分组对应一列,每行是一个被试),直接对列名生成配对组合即可:
# 从长格式转宽格式示例(替换为你的真实宽数据) wide_data <- long_data %>% pivot_wider(names_from = direction, values_from = count) # 获取所有分组列名(排除被试ID列) group_cols <- setdiff(colnames(wide_data), "subject") # 生成两两配对组合 pair_combs_wide <- combn(group_cols, 2, simplify = FALSE) # 批量执行检验 results_wide <- map_dfr(pair_combs_wide, function(comb) { test_res <- wilcox.test(wide_data[[comb[1]]], wide_data[[comb[2]]], paired = TRUE) tibble( group1 = comb[1], group2 = comb[2], V_statistic = as.numeric(test_res$statistic), p_value = test_res$p.value, p_adj = p.adjust(test_res$p.value, method = "bonferroni") ) }) print(results_wide)
说明
- 两种方法都会输出所有6组两两配对的结果,包含分组名称、V统计量、原始p值和校正后p值(可选)。
as.numeric(test_res$statistic)是为了把V统计量从带名称的向量转为数值,方便后续分析。- p值校正方法可根据需求替换,比如
method = "holm"比Bonferroni更宽松,适合多组比较。
内容的提问来源于stack exchange,提问作者Linda Jasmine Hoffman
相关产品推荐
相关产品推荐

