Вычисление процентиля столбца набора данных
Быстрый для вас, дорогие R гуру:
Я выполняю задание, и в этом упражнении мне было предложено получить базовую статистику из набора данных infert
(встроенного) и, в частности, одного из его столбцов, infert$age
.
Для тех, кто не знаком с данным:
> table_ages # Which is just subset(infert, select=c("age"));
age
1 26
2 42
3 39
4 34
5 35
6 36
7 23
8 32
9 21
10 28
11 29
...
246 35
247 29
248 23
Мне приходилось находить медианные значения столбца, дисперсию, асимметрию, стандартное отклонение, все было в порядке, пока меня не попросили найти столбец "процентили" .
Я пока ничего не смог найти, и, может быть, я перевел его неправильно из греческого языка языка задания. Это был "ποσοστημόρια", Google Translate указывал, что английский термин "процентили".
Любые учебники или идеи по поиску этих "процентилей" infert$age
?
Ответы
Ответ 1
Если вы закажете вектор x
и найдите значения, которые находятся на полпути через вектор, вы просто обнаружили медиану, или 50-й процентиль. Такая же логика применяется для любого процента. Вот два примера.
x <- rnorm(100)
quantile(x, probs = c(0, 0.25, 0.5, 0.75, 1)) # quartile
quantile(x, probs = seq(0, 1, by= 0.1)) # decile
Ответ 2
Функция quantile()
сделает большую часть того, что вы, вероятно, хотите, но поскольку вопрос был неоднозначным, я предоставлю альтернативный ответ, который немного отличается от quantile()
.
ecdf(infert$age)(infert$age)
сгенерирует вектор такой же длины, что infert$age
в котором будет infert$age
доля infert$age
которая ниже каждого наблюдения. Вы можете прочитать документацию по ecdf
, но основная идея заключается в том, что ecdf()
даст вам функцию, которая возвращает эмпирическое кумулятивное распределение. Таким образом, ecdf(X)(Y)
- это значение кумулятивного распределения X в точках Y. Если вы хотите узнать только вероятность того, чтобы быть ниже 30 (то есть, какой процентиль 30 в выборке), вы могли бы сказать,
ecdf(infert$age)(30)
Основное различие между этим подходом и использованием функции quantile()
состоит в том, что quantile()
требует, чтобы вы вводили вероятности, чтобы выйти из уровней, и это требует, чтобы вы вставляли уровни, чтобы получить вероятности.
Ответ 3
table_ages <- subset(infert, select=c("age"))
summary(table_ages)
# age
# Min. :21.00
# 1st Qu.:28.00
# Median :31.00
# Mean :31.50
# 3rd Qu.:35.25
# Max. :44.00
Это, вероятно, то, что они ищут. summary(...)
, применяемый к числовому, возвращает минимальный, максимальный, средний, средний и 25-й и 75-й процентиль данных.
Обратите внимание, что
summary(infert$age)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 21.00 28.00 31.00 31.50 35.25 44.00
Номера одинаковы, но формат отличается. Это связано с тем, что table_ages
представляет собой кадр данных с одним столбцом (возрастом), тогда как infert$age
является числовым вектором. Попробуйте ввести summary(infert)
.
Ответ 4
Используя {dplyr}:
library(dplyr)
# percentiles
infert %>%
mutate(PCT = ntile(age, 100))
# quartiles
infert %>%
mutate(PCT = ntile(age, 4))
# deciles
infert %>%
mutate(PCT = ntile(age, 10))
Ответ 5
Вы также можете использовать пакет hmisc, который предоставит вам следующие процентили:
0,05, 0,1, 0,25, 0,5, 0,75, 0,9, 0,95.
Просто используйте описание (table_ages)
Ответ 6
Нужно ли упорядочивать вектор, который вы передаете функции квантиля, или же функция квантиля упорядочивает сам вектор?