R에서 백분위수를 쉽게 계산하는 방법(예제 포함)


데이터 세트의 n번째 백분위수 는 모든 값을 가장 작은 값에서 가장 큰 값으로 정렬할 때 데이터 값의 처음 n %를 잘라내는 값입니다.

예를 들어, 데이터 세트의 90번째 백분위수는 데이터 값의 하위 90%와 데이터 값의 상위 10%를 구분하는 값입니다.

가장 일반적으로 사용되는 백분위수 중 하나는 50번째 백분위수로, 이는 데이터 세트의 중앙값을 나타냅니다. 이는 모든 데이터 값의 50%가 아래에 속하는 값입니다.

백분위수는 다음과 같은 질문에 답하는 데 사용될 수 있습니다.

  • 상위 10%에 들기 위해서는 학생이 특정 시험에서 얼마나 많은 점수를 받아야 합니까? 이 질문에 대답하기 위해 우리는 모든 점수의 90번째 백분위수를 찾아야 합니다. 이는 하위 90%와 상위 10%를 구분하는 값입니다.
  • 특정 학교 학생들의 평균 키의 절반을 차지하는 키는 얼마입니까? 이 질문에 답하기 위해 우리는 높이의 중간 50%에 대한 상한과 하한을 결정하는 두 값인 높이의 75번째 백분위수와 높이의 25번째 백분위수를 찾을 것입니다.

R에서 백분위수를 계산하는 방법

다음 구문을 사용하는 Quantile() 함수를 사용하여 R에서 백분위수를 쉽게 계산할 수 있습니다.

분위수 (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

다음 코드는 Sepal.Length 열의 90번째 백분위수 값을 찾는 방법을 보여줍니다.

 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

그룹별 백분위수 검색

dplyr 라이브러리의 group_by() 함수를 사용하여 R에서 그룹별 백분위수를 찾을 수도 있습니다.

다음 코드는 각 항목에 대해 Sepal.Length 의 90번째 백분위수를 찾는 방법을 보여줍니다.
붓꽃 데이터세트의 세 가지 종:

 #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")

추가 리소스

R의 apply(), lapply(), sapply() 및 tapply()에 대한 가이드
mutate() 및 case_when()을 사용하여 R에서 새 변수를 만듭니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다