R Studio - Как получить процентиль, для которого лежит тест - PullRequest
1 голос
/ 24 апреля 2020

у меня ниже фрейма данных. Я хочу выяснить, какой процентиль «значения» делает каждый «эталон» l ie. Например, «эталон», равный 100, составляет около 75-го процентиля от «значения».

enter image description here

group <- c(1,1,1,2,2,2)
benchmark <- c(100,100,100,200,200,200)
value <- c(50,80,120,150,230,250)
d_f <- data.frame(group,benchmark, value)

d_f %>%
  group_by(group, benchmark) %>%
  summarise(q25 = quantile(value, 0.25),
            q50 = quantile(value, 0.50),
            q75 = quantile(value, 0.75)
            # can add more percentile
            )

Другой способ - я перечислю из 100 процентилей, (1-100 процентили). Если «эталон» похож на любой процентиль, установите выходной результат в этот процентиль.

Спасибо!

1 Ответ

0 голосов
/ 25 апреля 2020

Я думаю, вам нужно ecdf. Остается вопрос (для меня), если ваше эмпирическое совокупное распределение приходится на группу или на целое.

На группу:

d_f %>%
  group_by(group, benchmark) %>%
  mutate(bench_pctile = ecdf(value)(benchmark) * 100)
# # A tibble: 6 x 4
# # Groups:   group, benchmark [2]
#   group benchmark value bench_pctile
#   <dbl>     <dbl> <dbl>        <dbl>
# 1     1       100    50         66.7
# 2     1       100    80         66.7
# 3     1       100   120         66.7
# 4     2       200   150         33.3
# 5     2       200   230         33.3
# 6     2       200   250         33.3

Или на весь столбец, где нам нужно ecdf вызов перед группировкой:

valecdf <- ecdf(d_f$value)
d_f %>%
  group_by(group, benchmark) %>%
  mutate(bench_pctile = valecdf(benchmark) * 100)
# # A tibble: 6 x 4
# # Groups:   group, benchmark [2]
#   group benchmark value bench_pctile
#   <dbl>     <dbl> <dbl>        <dbl>
# 1     1       100    50         33.3
# 2     1       100    80         33.3
# 3     1       100   120         33.3
# 4     2       200   150         66.7
# 5     2       200   230         66.7
# 6     2       200   250         66.7

Один из способов подтвердить это с помощью аппроксимации:

### grouped
mean(100 <= d_f$value[1:3])
# [1] 0.3333333
mean(200 <= d_f$value[4:6])
# [1] 0.6666667

### ungrouped
mean(100 <= d_f$value)
# [1] 0.6666667
mean(200 <= d_f$value)
# [1] 0.3333333
...