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


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

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

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

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

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

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

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

квантиль (x, пробы = seq(0, 1, 0,25))

  • x: числовой вектор, процентили которого мы хотим найти.
  • пробы: числовой вектор вероятностей в [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) %>%
  summarize (percent90 = quantile(Sepal.Length, probs = .9))

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

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

 iris %>%
  group_by (Species) %>%
  summarize (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")

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *