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

Hodges-Lehmann估计量使用疑问及R代码报错解决咨询

问题解答

一、Hodges-Lehmann估计量是不是两列合并后的中位数?

当然不是。针对你这种before/after的配对数据,Hodges-Lehmann估计量的计算逻辑是:

  • 先算出每一行配对的差值(比如after - before);
  • 生成所有满足i ≤ j的Walsh平均值,也就是每两个差值(包括同一个差值自己)的平均:(d_i + d_j)/2;
  • 最后取这些Walsh平均值的中位数,才是Hodges-Lehmann估计量。

而直接把before和after两列合并后取中位数,只是混合所有数据的中位数,和前者的计算逻辑完全不一样,结果通常也差很多。

二、R代码错误修正

你碰到的unused argument (after = NULL)错误,是因为HodgesLehmann函数(来自DescTools包)根本没有after这个参数,它的参数是x和y(用来传两组数据),或者你可以直接传入配对差值的向量。

正确写法参考

方式1:先算配对差值再传入(更适合配对数据)

library(DescTools)
library(dplyr)

# 先取消行分组(你的数据是rowwise_df,可能影响后续操作)
df <- df %>% ungroup()

# 计算after减before的差值,过滤掉有NA的行
df_clean <- df %>%
  mutate(diff = after - before) %>%
  filter(!is.na(diff))

# 计算Hodges-Lehmann估计量
HodgesLehmann(df_clean$diff, conf.level = NA, na.rm = FALSE)

方式2:直接传入两组数据(适合独立样本,配对样本更推荐方式1)

library(DescTools)
library(dplyr)

# 取消行分组+过滤NA行
df_clean <- df %>%
  ungroup() %>%
  filter(!is.na(before) & !is.na(after))

# 传入before和after列计算
HodgesLehmann(x = df_clean$before, y = df_clean$after, conf.level = NA, na.rm = FALSE)

注意点

  • 先安装DescTools包:install.packages("DescTools");
  • na.rm = FALSE会因为NA值导致计算失败,实际用的时候可以改成TRUE,或者提前像上面那样过滤NA行;
  • 你的数据是rowwise_df,一定要先ungroup(),不然分组状态下很多操作会出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:44:56