วิธีการคำนวณเปอร์เซ็นต์ไทล์ใน r ได้อย่างง่ายดาย (พร้อมตัวอย่าง)


เปอร์เซ็นต์ไทล์ ที่ n ของชุดข้อมูลคือค่าที่ตัด n เปอร์เซ็นต์แรกของค่าข้อมูลออกเมื่อค่าทั้งหมดจัดเรียงจากน้อยไปหามาก

ตัวอย่างเช่น เปอร์เซ็นไทล์ที่ 90 ของชุดข้อมูลคือค่าที่แยกค่าข้อมูล 90% ล่างสุดออกจาก 10% แรกของค่าข้อมูล

เปอร์เซ็นต์ไทล์ที่ใช้กันมากที่สุดอย่างหนึ่งคือเปอร์เซ็นไทล์ที่ 50 ซึ่งแสดงถึงค่ามัธยฐานของชุดข้อมูล นี่คือค่าที่ 50% ของค่าข้อมูลทั้งหมดอยู่ต่ำกว่า

เปอร์เซ็นต์สามารถใช้เพื่อตอบคำถามเช่น:

  • นักเรียนต้องทำคะแนนในการทดสอบนั้นๆ เท่าไรจึงจะติด 10% แรกได้ เพื่อตอบคำถามนี้ เราจะหาเปอร์เซ็นไทล์ที่ 90 ของคะแนนทั้งหมด ซึ่งเป็นค่าที่แยก 90% ล่างสุดจาก 10% แรก
  • ความสูงใดที่รวมความสูงเฉลี่ยครึ่งหนึ่งของนักเรียนในโรงเรียนแห่งใดแห่งหนึ่ง เพื่อตอบคำถามนี้ เราจะหาเปอร์เซ็นไทล์ที่ 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) %>%
  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()

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *