spatstat 中的 weighted.median()
函数当我通过 10、11 和 12 的均匀加权分数时,包返回“10.5”。我期待“11”的响应(这是 stats::median()
和 matrixStats::weightedMedian()
的输出)。
加权中位数的概念对我来说不太自然。输出是否不正确,或者我误解了该函数的目的?
x <- c(10, 11, 12)
w <- c( 1, 1, 1)
spatstat::weighted.median(x, w)
#> [1] 10.5
spatstat::weighted.quantile(x, w, probs = .5)
#> 50%
#> 10.5
matrixStats::weightedMedian(x, w)
#> [1] 11
median(x)
#> [1] 11
由reprex package于2020年2月23日创建(v0.3.0)
最佳答案
这里有一个更基本的问题,关于小有限样本中的分位数(包括中位数)的定义。
R 基本函数的帮助文件 quantile.default
说有一个争论 type
,有7个不同的选项,会给出不同的答案。 Rob Hyndman 的一篇精彩文章详细描述了这些内容,并在帮助文件中引用。默认为 quantile.default
是 type=7
。
spatstat::weighted.quantile
中的算法执行类似于 type=4
的操作(根据其帮助文件);即累积分布函数F(x)
进行线性插值,然后计算反函数。 该算法在 spatstat 代码中正确实现。
您提到的其他包中的加权中位数正在计算加权中位数的不同定义。
非常感谢您提请我们注意这个示例。这可能会促使我们延长 spatstat::weighted.median
的实现拥抱其他类型。
顺便说一句,CRAN 包的错误报告应发布在包的错误报告页面上,如 CRAN 上所示。很幸运我看到了这篇文章。但非常感谢你们两位发现了这个问题。
关于r - spatstat 包中的加权中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60366677/