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

按站点分组执行Wilcoxon双侧检验结果异常,求问题排查

问题排查与修正方案

你的核心问题出在**wilcox.test里指定了整个数据集data=data.frame**,而不是使用group_by后每个分组的子数据集。这就导致每个站点的检验其实都在跑全量数据,结果自然完全相同。另外还有两个小参数错误需要修正,下面一步步来:

1. 核心错误修正

在do()函数内部,wilcox.test默认会使用当前分组后的子数据,不需要手动指定data=data.frame。如果非要指定,应该用.或者.data(dplyr的内置变量,代表当前分组的数据)。

2. 参数错误修正

  • equal.var=FALSE是t.test的参数,Wilcoxon检验不需要这个,因为它是非参数检验,不依赖方差齐性假设,直接删掉即可。
  • na.rm=TRUE不是wilcox.test的参数,要处理缺失值应该用na.action=na.omit,或者先在数据预处理阶段移除NA。

修正后的代码

方法一:使用dplyr::do()

library(dplyr)
library(broom)

t2 <- data.frame %>%
  group_by(Site) %>%
  do(tidy(wilcox.test(Conc ~ Scenario, data = ., na.action = na.omit)))

这里的.代表当前分组的子数据集,和.data效果一致。

方法二:更现代的nest() + map()(推荐)

dplyr现在更推荐用嵌套数据框的方式处理分组分析,代码更清晰易读:

library(dplyr)
library(tidyr)
library(purrr)
library(broom)

t2 <- data.frame %>%
  drop_na(Conc) %>%  # 先移除缺失值,避免后续检验报错
  nest(data = -Site) %>%  # 按Site嵌套对应的数据
  mutate(test_result = map(data, ~ tidy(wilcox.test(Conc ~ Scenario, data = .x)))) %>%
  unnest(test_result) %>%
  select(-data)  # 移除不需要的嵌套数据列

验证结果

运行修正后的代码后,每个站点的statistic和p.value应该会根据各自的样本数据产生不同的结果,不再完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:17:41