Рассчитать квантили в 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
Другие вопросы по тегам