这两种计算加权中位数的方法有什么区别?

What's the difference between these two methods for calculating a weighted median?

提问人:Nate 提问时间:1/10/2023 更新时间:1/11/2023 访问量:64

问:

我正在尝试计算加权中位数,但不明白以下两种方法之间的区别。我从 weighted.median() 得到的答案与 (df, median(rep(value, count))) 不同,但我不明白为什么。有很多方法可以得到加权中位数吗?一个比另一个更可取吗?

df = read.table(text="row  count value

1             1.                      25.
2             2.                      26.
3             3.                      30.
4             2.                      32.
5             1.                      39.", header=TRUE)


# weighted median
with(df, median(rep(value, count)))
# [1] 30

library(spatstat)
weighted.median(df$value, df$count)
# [1] 28
中位 数加权

评论


答:

2赞 John Coleman 1/11/2023 #1

请注意,这仅对正整数的权重有意义( 将接受浮点值,但会强制为整数)。因此,这种方法并不是计算加权中位数的完整通用方法。 显示该函数尝试执行的操作是计算一个值,使以下数据的总权重为总权重的 50%。就您的样品而言,没有完全有效的方法。数据总权重的 28.5% 为 <= 26,61.9% 为 <= 30。在这种情况下,默认情况下(“类型 2”)它会对这 2 个值进行平均,以获得返回的 28。还有另外两种类型。 返回 30。我不完全确定这种类型是否总是同意您的其他方法。with(df, median(rep(value, count)))repcount?weighted.medianmmmweighted.median(df$value,df$count,type = 1)

评论

0赞 Nate 1/11/2023
另外,你是说 28 岁,对吧?
2赞 John Coleman 1/11/2023
@Nate 是的,那是个错别字。谢谢。