在没有插值的情况下计算 R 中的分位数 - 向上或向下舍入到实际值

Calculate quantiles in R without interpolation - round up or down to actual value

据我了解,在 R 中计算分位数时,会扫描整个数据集并确定每个分位数的值。

例如,如果您要求 .8,它会给您一个出现在该分位数的值。即使不存在这样的值,R 仍然会为您提供 出现在该分位数的值。它通过线性插值来实现。

但是,如果希望计算分位数然后继续将 up/down 舍入到最接近的 实际 值怎么办?

例如,如果 .80 处的分位数给出的值为 53,而实际数据集只有一个 50 和一个 54,那么如何让 R 列出这两个值中的任何一个?

试试这个:

#dummy data
x <- c(1,1,1,1,10,20,30,30,40,50,55,70,80)

#get quantile at 0.8
q <- quantile(x, 0.8)
q
# 80% 
# 53 

#closest match - "round up"
min(x[ x >= q ])
#[1] 55

#closest match - "round down"
max(x[ x <= q ])
#[1] 50

R的quantile函数中实现了很多估计方法。您可以选择要与 type 参数一起使用的类型,如 https://stat.ethz.ch/R-manual/R-devel/library/stats/html/quantile.html.

中所述
x <- c(1, 1, 1, 1, 10, 20, 30, 30, 40, 50, 55, 70, 80)

quantile(x, c(.8)) # default, type = 7
# 80%
# 53

quantile(x, c(.8), FALSE, TRUE, 7) # equivalent to the previous invocation
# 80%
# 53

quantile(x, c(.8), FALSE, TRUE, 3) # type = 3, nearest sample
# 80%
# 50