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


N -й процентиль набора данных — это значение, которое отсекает первые n процентов значений данных, когда все значения отсортированы от наименьшего к наибольшему.

Например, 90-й процентиль набора данных — это значение, которое отсекает нижние 90 % значений данных от верхних 10 % значений данных.

Одним из наиболее часто используемых процентилей является 50-й процентиль, который представляет собой медианное значение набора данных: это значение, ниже которого 50% всех значений данных.

Процентили можно использовать для ответа на такие вопросы, как:

  • Какой балл должен набрать учащийся по конкретному тесту, чтобы попасть в 10% лучших? Чтобы ответить на этот вопрос, мы должны найти 90-й процентиль всех оценок, то есть значение, которое отделяет нижние 90% значений от верхних 10%.
  • Какой рост охватывает средние 50% роста учащихся в конкретной школе? Чтобы ответить на этот вопрос, мы должны найти 75-й процентиль роста и 25-й процентиль роста, которые являются двумя значениями, определяющими верхнюю и нижнюю границы для средних 50% роста.

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

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

квантиль (x, probs = seq(0, 1, 0,25))

  • x: числовой вектор, процентили которого мы хотим найти
  • probs: числовой вектор вероятностей в [0,1], который представляет процентили, которые мы хотим найти

Нахождение процентилей вектора

Следующий код иллюстрирует, как найти различные процентили для заданного вектора в R:

#create vector of 100 random values uniformly distributed between 0 and 500
data <- runif(100, 0, 500)

#Find the quartiles (25th, 50th, and 75th percentiles) of the vector
quantile (data, probs = c(.25, .5, .75))

# 25% 50% 75% 
# 97.78961 225.07593 356.47943 

#Find the deciles (10th, 20th, 30th, ..., 90th percentiles) of the vector
quantile (data, probs = seq(.1, .9, by = .1))

# 10% 20% 30% 40% 50% 60% 70% 80% 
# 45.92510 87.16659 129.49574 178.27989 225.07593 300.79690 337.84393 386.36108 
# 90% 
#423.28070

#Find the 37th, 53rd, and 87th percentiles
quantile (data, probs = c(.37, .53, .87))

# 37% 53% 87% 
#159.9561 239.8420 418.4787

Поиск процентилей столбца фрейма данных

Чтобы проиллюстрировать, как найти процентили определенного столбца фрейма данных, мы будем использовать встроенный набор данных iris :

#view first six rows of *iris* dataset
head(iris)

 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

В следующем коде показано, как найти значение 90-го процентиля для столбца Sepal.Length :

quantile (iris$Sepal.Length, probs = 0.9)

#90% 
#6.9 

Нахождение процентилей нескольких столбцов фрейма данных

Мы также можем найти процентили сразу для нескольких столбцов с помощью функции apply() :

#define columns we want to find percentiles for
small_iris<- iris[ , c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width')]

#use *apply()* function to find 90th percentile for every column
apply (small_iris, 2, function(x) quantile(x, probs = .9))

#Sepal.Length Sepal.Width Petal.Length Petal.Width 
# 6.90 3.61 5.80 2.20 

Поиск процентилей по группам

Мы также можем найти процентили по группам в R, используя функцию group_by() из библиотеки dplyr .

В следующем коде показано, как найти 90-й процентиль Sepal.Length для каждого из
три вида в наборе данных ириса:

#load *dplyr* library
library(dplyr)

#find 90th percentile of *Sepal.Length* for each of the three species
iris %>%
 group_by(Species) %>%
 summarise (percent90 = quantile(Sepal.Length, probs = .9))

# A tibble: 3 x 2
# Species percent90
# 
#1 setosa 5.41
#2 versicolor 6.7 
#3 virginica 7.61

В следующем коде показано, как найти 90-й процентиль для всех переменных по видам:

iris %>%
 group_by(Species) %>%
 summarise (percent90_SL = quantile(Sepal.Length, probs = .9),
 percent90_SW = quantile(Sepal.Width, probs = .9),
 percent90_PL = quantile(Petal.Length, probs = .9),
 percent90_PW = quantile(Petal.Width, probs = .9))

# A tibble: 3 x 5
# Species percent90_SL percent90_SW percent90_PL percent90_PW
# 
#1 setosa 5.41 3.9 1.7 0.4 
#2 versicolor 6.7 3.11 4.8 1.51
#3 virginica 7.61 3.31 6.31 2.4

Визуализация процентилей

В R нет встроенной функции для визуализации процентилей набора данных, но мы можем относительно легко создать график для визуализации процентилей.

В следующем коде показано, как создать график процентилей для значений данных Sepal.Length из набора данных радужной оболочки :

n = length(iris$Sepal.Length)
plot((1:n - 1)/(n - 1), sort(iris$Sepal.Length), type="l",
 main = "Visualizing Percentiles",
 xlab = "Percentile",
 ylab = "Value") 
Процентильный график в R

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

Руководство по apply(), lapply(), sapply() и tapply() в R
Создайте новые переменные в R с помощью mutate() и case_when()

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.