R でパーセンタイルを簡単に計算する方法 (例付き)


データセットのn 番目のパーセンタイルは、すべての値を最小値から最大値の順に並べ替えたときに、データ値の最初のnパーセントを切り捨てる値です。

たとえば、データ セットの 90 パーセンタイルは、データ値の下位 90% とデータ値の上位 10% を分ける値です。

最も一般的に使用されるパーセンタイルの 1 つは、データ セットの中央値を表す 50 パーセンタイルです。これは、すべてのデータ値の 50% が下回る値です。

パーセンタイルは、次のような質問に答えるために使用できます。

  • 学生が上位 10% に入るには、特定のテストでどのくらいの得点が必要ですか?この質問に答えるには、すべてのスコアの 90 パーセンタイルを見つけます。これは、下位 90% と上位 10% を分ける値です。
  • 特定の学校の生徒の平均身長の半分に相当する身長はどれくらいですか?この質問に答えるには、身長の 75 パーセンタイルと身長の 25 パーセンタイルを見つけます。これら 2 つの値は、身長の中間 50% の上限と下限を決定します。

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 パーセンタイルを見つける方法を示しています。
アヤメのデータセット内の 3 つの種:

 #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 にはデータセットのパーセンタイルを視覚化するための組み込み関数はありませんが、パーセンタイルを視覚化するためのプロットを比較的簡単に作成できます。

次のコードは、 irisデータセットから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 で新しい変数を作成する

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です