R语言agricolae包Median.test报错:变量长度一致仍提示不匹配
问题描述
已确认两个测试变量长度均为34,但调用agricolae包的Median.test()时仍报错:
Error in chisq.test(B, correct, simulate.p.value) :
'x' and 'y' must have the same length
相关代码及输出如下:
library("agricolae") # 测量变量长度 length(df$X2019_Perkotaan.Perdesaan) length(df$X2020Perkotaan.Perdesaan) Median.test(df$X2019_Perkotaan.Perdesaan, df$X2020Perkotaan.Perdesaan)
运行输出:
[1] 34 [1] 34 Error in chisq.test(B, correct, simulate.p.value) : 'x' and 'y' must have the same length
即使手动构造向量测试,仍出现相同报错:
x <- c(65,69,70,76,71,66,67,69,75,88,93,78,67,31) y <- c(72,74,75,81,76,75,72,74,78,91,93,82,80,35) Median.test(x, y)
解决方法
问题核心是对Median.test()的参数逻辑理解错误:该函数并非直接接收两个独立数值向量进行中位数对比,它的参数规则是:
- 第一个参数
x:所有待分析的响应变量值(需将两组数据合并为一个长向量) - 第二个参数
g:与x长度一致的分组因子,标记每个值所属的组别
方法1:合并向量+构造分组因子
直接合并两组数据并生成对应分组标签:
library("agricolae") # 合并两组数值为单个向量 combined_data <- c(df$X2019_Perkotaan.Perdesaan, df$X2020Perkotaan.Perdesaan) # 生成分组因子,对应每个数值的来源年份 group_labels <- factor(c(rep("2019", 34), rep("2020", 34))) # 执行中位数检验 Median.test(combined_data, group_labels)
方法2:宽格式转长格式+公式调用
如果数据是宽格式(每列对应一个年份),可以先转为长格式再用公式调用函数:
library("agricolae") library(tidyr) # 将宽格式数据转为长格式 long_format_df <- pivot_longer(df, cols = c(X2019_Perkotaan.Perdesaan, X2020Perkotaan.Perdesaan), names_to = "year", values_to = "measurement") # 通过公式调用中位数检验 Median.test(measurement ~ year, data = long_format_df)
补充:配对样本中位数检验
如果你的数据是配对样本(比如同一观测对象在2019和2020年的两次测量值),更适合用配对 Wilcoxon 检验,而非Median.test():
wilcox.test(df$X2019_Perkotaan.Perdesaan, df$X2020Perkotaan.Perdesaan, paired = TRUE)
内容的提问来源于stack exchange,提问作者sean adam
相关产品推荐
相关产品推荐

