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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:25:29