Как рассчитать квантили по группам в R (с примерами)


В статистике квантили — это значения, которые делят ранжированный набор данных на равные группы.

Для вычисления квантилей, сгруппированных по определенной переменной в R, мы можем использовать следующие функции из пакета dplyr в R:

library(dplyr)

#define quantiles of interest
q = c(.25, .5, .75)

#calculate quantiles by grouping variable
df %>%
 group_by(grouping_variable) %>%
 summarize(quant25 = quantile (numeric_variable, probs = q[1]), 
 quant50 = quantile (numeric_variable, probs = q[2]),
 quant75 = quantile (numeric_variable, probs = q[3]))

В следующих примерах показано, как использовать этот синтаксис на практике.

Примеры: квантили по группам в R

В следующем коде показано, как вычислить квантили для количества побед, сгруппированных по командам, для набора данных в R:

library(dplyr)

#create data
df <- data.frame(team=c('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B',
 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'),
 wins=c(2, 4, 4, 5, 7, 9, 13, 13, 15, 15, 14, 13,
 11, 9, 9, 8, 8, 16, 19, 21, 24, 20, 19, 18))

#view first six rows of data
head(df)

 team wins
1 A 2
2 A 4
3 A 4
4 A 5
5 A 7
6 A 9

#define quantiles of interest
q = c(.25, .5, .75)

#calculate quantiles by grouping variable
df %>%
 group_by(team) %>%
 summarize(quant25 = quantile (wins, probs = q[1]), 
 quant50 = quantile (wins, probs = q[2]),
 quant75 = quantile (wins, probs = q[3]))

 team quant25 quant50 quant75 
1 A 4 6 10 
2 B 9 12 14.2
3 C 17.5 19 20.2

Обратите внимание, что мы также можем указать любое количество квантилей, которое нам нужно:

#define quantiles of interest
q = c(.2, .4, .6, .8)

#calculate quantiles by grouping variable
df %>%
 group_by(team) %>%
 summarize(quant20 = quantile (wins, probs = q[1]), 
 quant40 = quantile (wins, probs = q[2]),
 quant60 = quantile (wins, probs = q[3]),
 quant80 = quantile (wins, probs = q[4]))

 team quant20 quant40 quant60 quant80

1 A 4 4.8 7.4 11.4
2 B 9 10.6 13.2 14.6
3 C 16.8 18.8 19.2 20.6

Мы также можем выбрать расчет только одного квантиля по группе. Например, вот как рассчитать 90-й процентиль количества побед для каждой команды:

#calculate 90th percentile of wins by team
df %>%
 group_by(team) %>%
 summarize(quant90 = quantile (wins, probs = 0.9 ))

 team quant90

1 A 13 
2 B 15 
3 C 21.9

Дополнительные ресурсы

Как рассчитать квартили в R
Как рассчитать децили в R
Как рассчитать процентили в R