rstatix包wilcox_test配对检验如何识别个体样本列?
rstatix::wilcox_test 配对样本的识别逻辑
在你提供的示例中,wilcox_test能正确识别配对样本,核心原因是长格式数据的行顺序严格对应了个体的配对观测,具体逻辑如下:
1. 原数据的结构基础
datarium包的mice2是宽格式数据:每行代表1只小鼠(个体),包含before(给药前体重)和after(给药后体重)两列。当你用gather转成长格式时,每只小鼠的两个观测(before/after)会被转换成连续的两行,且所有个体的before在前、after在后,行顺序完全匹配个体配对关系。
2. wilcox_test(paired=TRUE)的默认配对规则
当未指定id参数时,wilcox_test会默认按照数据的行索引顺序一一配对:
- 第1行与第2行配对
- 第3行与第4行配对
- ……
- 第2n-1行与第2n行配对
这要求长格式数据满足两个前提:
- 两组(
group中的两个水平)的样本量完全相等 - 同一配对的两个观测必须在数据中相邻排列,顺序一致
3. 验证:打乱顺序会导致配对错误
如果打乱mice2.long的行顺序,再运行检验,结果会完全错误,因为配对关系被破坏了:
# 打乱行顺序 set.seed(123) mice2.long.shuffled <- mice2.long[sample(nrow(mice2.long)), ] # 运行检验,结果会和原结果不同 mice2.long.shuffled %>% wilcox_test(weight ~ group, paired = T)
4. 更严谨的做法:显式指定id列
为了避免行顺序带来的配对错误,更稳妥的方式是显式指定个体id列,让函数明确识别配对关系:
# 转长格式时保留id列(原mice2数据默认有id列) mice2.long <- mice2 %>% gather(key = "group", value = "weight", before, after) %>% arrange(id) # 确保按id排序 # 显式指定id参数 mice2.long %>% wilcox_test(weight ~ group, paired = T, id = id)
此时函数会根据id列分组,将同一id下的两个观测作为配对样本,不受行顺序影响。
内容的提问来源于stack exchange,提问作者Wandering_geek
相关产品推荐
相关产品推荐

