Рассчитать квантили в R без интерполяции - округлить в большую или меньшую сторону до фактического значения
Насколько я понимаю, при расчете квантилей в R сканируется весь набор данных и определяется значение для каждого квантиля.
Например, если вы попросите 0,8, это даст вам значение, которое будет в этом квантиле. Даже если такого значения не существует, R тем не менее даст вам значение, которое произошло бы в этом квантиле. Это делается с помощью линейной интерполяции.
Однако что, если кто-то хочет рассчитать квантили, а затем перейти к округлению вверх / вниз до ближайшего фактического значения?
Например, если квантиль в.80 дает значение 53, когда реальный набор данных имеет только 50 и 54, то как можно получить R для перечисления любого из этих значений?
2 ответа
Попробуй это:
#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