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

转换数据集计算配对样本Wilcoxon符号秩检验:代码正确性及格式疑问

问题分析与解决方案

首先明确你的核心需求:比较服用Drug_1和Drug_2的独立人群的得分差值(Difference),这属于独立样本的非参数检验场景,你的原代码存在参数误用问题,以下是具体说明和修正方案:

原代码的错误点

你使用了paired = TRUE参数,但这个参数仅适用于配对样本(比如同一患者的前后测数据、配对的受试者组)。而你的数据中,Drug_1和Drug_2是互斥的独立人群(每个患者只服用一种药物),因此配对检验完全不适用,必须去掉这个参数。

无需转长格式的直接解法

你的数据当前是宽格式,已经可以直接用于分析:Drug_1列的1代表服用Drug_1的患者,0代表服用Drug_2的患者(因为两列互斥)。直接用非配对的Wilcoxon秩和检验(即Mann-Whitney U检验)即可:

wilcox.test(Difference ~ Drug_1, data = dt, paired = FALSE)

paired = FALSE是默认值,也可以省略不写,效果一致。

转长格式的优化解法(可选)

虽然宽格式能直接分析,但转成长格式可以让分组逻辑更直观,避免0/1变量的歧义。用tidyr包转换后,数据结构会更清晰:

library(tidyr)
# 转换为长格式,筛选出实际服用的药物
dt_long <- dt %>%
  pivot_longer(cols = c(Drug_1, Drug_2), 
               names_to = "Drug_Type", 
               values_to = "Taken") %>%
  filter(Taken == 1) %>%
  select(-Taken)

# 执行检验
wilcox.test(Difference ~ Drug_Type, data = dt_long)

转换后的dt_long中,Drug_Type列直接显示每个患者服用的药物,代码可读性更强,检验结果和宽格式的解法完全一致。

总结

  • 原代码的关键错误是误用paired = TRUE,必须移除该参数;
  • 宽格式可以直接完成分析,转长格式不是必须,但能提升代码的可读性和直观性;
  • 两种解法的统计检验逻辑完全相同,都是比较两组独立样本的差值分布差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:42:27