Jak łatwo obliczyć percentyle w r (z przykładami)


N-ty percentyl zbioru danych to wartość, która odcina pierwsze n procent wartości danych, gdy wszystkie wartości są posortowane od najmniejszej do największej.

Na przykład 90. percentyl zbioru danych to wartość oddzielająca dolne 90% wartości danych od górnych 10% wartości danych.

Jednym z najczęściej używanych percentyli jest 50. percentyl, który reprezentuje medianę zbioru danych: jest to wartość, poniżej której spada 50% wszystkich wartości danych.

Percentyle można wykorzystać do odpowiedzi na pytania takie jak:

  • Ile uczeń musi zdobyć w konkretnym teście, aby znaleźć się w najlepszych 10%? Aby odpowiedzieć na to pytanie, znaleźlibyśmy 90. percentyl wszystkich wyników, czyli wartość oddzielającą 90% dolnych od 10% górnych.
  • Jaki wzrost obejmuje średnią połowę wzrostu uczniów w danej szkole? Aby odpowiedzieć na to pytanie, znaleźlibyśmy 75. percentyl wzrostu i 25. percentyl wzrostu, czyli dwie wartości określające górną i dolną granicę środkowych 50% wzrostu.

Jak obliczyć percentyle w R

Możemy łatwo obliczyć percentyle w R za pomocą funkcji quantile() , która wykorzystuje następującą składnię:

kwantyl (x, probs = seq(0, 1, 0,25))

  • x: wektor liczbowy, którego percentyle chcemy znaleźć
  • probs: numeryczny wektor prawdopodobieństw w [0,1] reprezentujący percentyle, które chcemy znaleźć

Znajdowanie percentyli wektora

Poniższy kod ilustruje, jak znaleźć różne percentyle dla danego wektora w 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 

Znajdowanie percentyli kolumny ramki danych

Aby zilustrować, jak znaleźć percentyle określonej kolumny ramki danych, użyjemy wbudowanego zbioru danych 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

Poniższy kod pokazuje, jak znaleźć 90. percentyl dla kolumny Sepal.Length :

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

#90% 
#6.9

Znajdowanie percentyli wielu kolumn ramki danych

Możemy także znaleźć percentyle wielu kolumn jednocześnie za pomocą funkcji 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

Wyszukiwanie percentyli według grup

Możemy także znaleźć percentyle według grup w R, korzystając z funkcji group_by() z biblioteki dplyr .

Poniższy kod ilustruje, jak znaleźć 90. percentyl Sepal.Length dla każdego z nich
trzy gatunki w zbiorze danych tęczówki:

 #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

Poniższy kod ilustruje, jak znaleźć 90. percentyl dla wszystkich zmiennych według gatunku:

 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 

Przeglądanie percentyli

W języku R nie ma wbudowanej funkcji umożliwiającej wizualizację percentyli zbioru danych, ale możemy stosunkowo łatwo utworzyć wykres umożliwiający wizualizację percentyli.

Poniższy kod ilustruje sposób tworzenia wykresu percentylowego dla wartości danych Sepal.Length ze zbioru danych tęczówki :

 n = length(iris$Sepal.Length)
plot((1:n - 1)/(n - 1), sort(iris$Sepal.Length), type="l",
  main = "Visualizing Percentiles",
  xlab = "Percentile",
  ylab = "Value")

Dodatkowe zasoby

Przewodnik po Apply(), lapply(), sapply() i tapply() w R
Utwórz nowe zmienne w R za pomocą mutate() i case_when()

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *