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
相关产品推荐
相关产品推荐

