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")
Дополнительные ресурсы
Руководство по apply(), lapply(), sapply() и tapply() в R
Создайте новые переменные в R с помощью mutate() и case_when()