Подтвердить что ты не робот

Вычисление процентиля столбца набора данных

Быстрый для вас, дорогие 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?

4b9b3361

Ответ 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

Нужно ли упорядочивать вектор, который вы передаете функции квантиля, или же функция квантиля упорядочивает сам вектор?