在没有插值的情况下计算 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
据我了解,在 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