“Trên con đường thành công không có dấu chân của kẻ lười biếng.”
Lỗ Tấn

Các đặc trưng đo lường khuynh hướng tập trung

Xét tập dữ liệu 2, 4.4, 3, 3, 2, 2.2, 2, 4. Để tính trung bình của tập dữ liệu chúng ta dùng hàm mean().

x <- c(2, 4.4, 3, 3, 2, 2.2, 2, 4)
mean(x)
## [1] 2.825

Để tính trung vị của tập dữ liệu chúng ta dùng hàm median().

median(x)
## [1] 2.6

Để tìm yếu vị (mode) của tập dữ liệu, chúng ta dùng hàm table() để đếm tần số xuất hiện của các giá trị.

table(x)
## x
##   2 2.2   3   4 4.4 
##   3   1   2   1   1

Khi đó yếu vị là giá trị có tần số cao nhất. Ở đây ta thấy 2 là yếu vị vì nó là giá trị có tần số cao nhất.

Để tìm giá trị nhỏ nhất và lớn nhất của tập dữ liệu chúng ta dùng hàm min()max() tương ứng.

min(x)
## [1] 2
max(x)
## [1] 4.4

Để xác định khoảng biến thiên (khoảng giá trị, phạm vi) chúng ta dùng hàm range().

range(x)
## [1] 2.0 4.4

Nếu dữ liệu có chứa NA hoặc NaN thì chúng ta cần loại bỏ hoặc thay thế chúng trước khi tính toán với các hàm trên.

mean(c(1,4,NA))
## [1] NA
mean(c(1,4,NaN))
## [1] NaN
mean(c(1,4,NA), na.rm=TRUE)
## [1] 2.5
mean(c(1,4,NaN), na.rm=TRUE)
## [1] 2.5
median(c(1,4,NA), na.rm = T)
## [1] 2.5

Xét tập dữ liệu sẵn có trong R là chickwts.

chickwts
##    weight      feed
## 1     179 horsebean
## 2     160 horsebean
## 3     136 horsebean
## 4     227 horsebean
## 5     217 horsebean
## 6     168 horsebean
## 7     108 horsebean
## 8     124 horsebean
## 9     143 horsebean
## 10    140 horsebean
## 11    309   linseed
## 12    229   linseed
## 13    181   linseed
## 14    141   linseed
## 15    260   linseed
## 16    203   linseed
## 17    148   linseed
## 18    169   linseed
## 19    213   linseed
## 20    257   linseed
## 21    244   linseed
## 22    271   linseed
## 23    243   soybean
## 24    230   soybean
## 25    248   soybean
## 26    327   soybean
## 27    329   soybean
## 28    250   soybean
## 29    193   soybean
## 30    271   soybean
## 31    316   soybean
## 32    267   soybean
## 33    199   soybean
## 34    171   soybean
## 35    158   soybean
## 36    248   soybean
## 37    423 sunflower
## 38    340 sunflower
## 39    392 sunflower
## 40    339 sunflower
## 41    341 sunflower
## 42    226 sunflower
## 43    320 sunflower
## 44    295 sunflower
## 45    334 sunflower
## 46    322 sunflower
## 47    297 sunflower
## 48    318 sunflower
## 49    325  meatmeal
## 50    257  meatmeal
## 51    303  meatmeal
## 52    315  meatmeal
## 53    380  meatmeal
## 54    153  meatmeal
## 55    263  meatmeal
## 56    242  meatmeal
## 57    206  meatmeal
## 58    344  meatmeal
## 59    258  meatmeal
## 60    368    casein
## 61    390    casein
## 62    379    casein
## 63    260    casein
## 64    404    casein
## 65    318    casein
## 66    352    casein
## 67    359    casein
## 68    216    casein
## 69    222    casein
## 70    283    casein
## 71    332    casein
  1. Chúng ta sẽ tìm min, max, range, mean, median cho trọng lượng gà trong tập dữ liệu.
min(chickwts$weight)
## [1] 108
max(chickwts$weight)
## [1] 423
range(chickwts$weight)
## [1] 108 423
mean(chickwts$weight)
## [1] 261.3099
median(chickwts$weight)
## [1] 258
  1. Chúng ta sẽ tính trung bình trọng lượng gà theo từng loại thức ăn.
mean(chickwts$weight[chickwts$feed=="casein"])
## [1] 323.5833
mean(chickwts$weight[chickwts$feed=="horsebean"])
## [1] 160.2
mean(chickwts$weight[chickwts$feed=="linseed"])
## [1] 218.75
mean(chickwts$weight[chickwts$feed=="meatmeal"])
## [1] 276.9091
mean(chickwts$weight[chickwts$feed=="soybean"])
## [1] 246.4286
mean(chickwts$weight[chickwts$feed=="sunflower"])
## [1] 328.9167
tapply(chickwts$weight,INDEX=chickwts$feed,FUN=mean)
##    casein horsebean   linseed  meatmeal   soybean sunflower 
##  323.5833  160.2000  218.7500  276.9091  246.4286  328.9167

Tần số, tần suất và tỷ lệ

Ở mục này chúng chủ yếu đề cập đến biến định tính. Trong tập dữ liệu chickwts thì feed là biến định tính. Để lập bảng phân phối tần số cho biến này chúng ta cũng dùng hàm table().

table(chickwts$feed)
## 
##    casein horsebean   linseed  meatmeal   soybean sunflower 
##        12        10        12        11        14        12

Để lập bảng phân phối tần suất chúng ta dùng hàm prop.table().

prop.table(table(chickwts$feed))
## 
##    casein horsebean   linseed  meatmeal   soybean sunflower 
## 0.1690141 0.1408451 0.1690141 0.1549296 0.1971831 0.1690141

Để tính tỷ lệ (mẫu) gà ăn thức ăn soybean chúng ta có thể dùng một trong hai cách sau.

sum(chickwts$feed == "soybean")/nrow(chickwts)
## [1] 0.1971831
mean(chickwts$feed == "soybean")
## [1] 0.1971831

Tượng tự như vậy ta có thể tính tỷ lệ gà ăn các loại thức ăn còn lại. Ở đây ta thấy tỷ lệ chính là tần suất.

Để làm tròn kết quả tính toán chúng ta dùng hàm round().

round(0.1971831, digits = 3)
## [1] 0.197
round(mean(chickwts$feed == "soybean"), digits = 3)
## [1] 0.197

Bài tập 8.1

  1. Xét tập dữ liệu chickwts.

    1. Hãy tính tỷ lệ gà có trọng lượng trên 300 và làm tròn đến 2 chữ số thập phân.
    2. Hãy tính trung bình và trung vị của trọng lượng những con gà đạt trọng lượng trên 300.
  2. Xét tập dữ liệu sẵn có InsectSprays. Mở cửa sổ trợ giúp để xem thông tin về tập dữ liệu này.

    1. Xác định kiểu dữ liệu của các biến trong tập dữ liệu này.
    2. Tìm yếu vị của biến count.
    3. Dùng hàm tapply() để tính tổng số côn trùng cho từng loại thuốc trừ sâu bọ.
    4. Hãy tính tỷ lệ ít có nhất 5 côn trùng cho mỗi loại thuốc trừ sâu bọ. Nếu có thể hãy dùng hàm tapply().

Bách phân vị và 6 giá trị tóm tắt dữ liệu

Để tính bách phân vị của tập dữ liệu chúng ta dùng hàm quantile().

x <- c(2,4.4,3,3,2,2.2,2,4)

Bách phân vị thứ 80:

quantile(x, prob = 0.8)
## 80% 
## 3.6

Tứ phân vị:

quantile(x, prob = c(0.25, 0.50, 0.75))
##  25%  50%  75% 
## 2.00 2.60 3.25

Thập phân vị:

quantile(x, prob = seq(0.1, 0.9, by = 0.1))
##  10%  20%  30%  40%  50%  60%  70%  80%  90% 
## 2.00 2.00 2.02 2.16 2.60 3.00 3.00 3.60 4.12

Để tìm 6 giá trị tóm tắt dữ liệu chúng ta dùng hàm summary().

summary(x)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.000   2.000   2.600   2.825   3.250   4.400

Các đặc trưng đo lường độ phân tán.

Để tính phương sai của tập dữ liệu chúng ta dùng hàm var().

x <- c(2,4.4,3,3,2,2.2,2,4)
var(x)
## [1] 0.9078571
var(chickwts$weight)
## [1] 6095.503

Để tính độ lệch chuẩn của tập dữ liệu chúng ta dùng hàm sd().

sd(x)
## [1] 0.9528154
sd(chickwts$weight)
## [1] 78.0737

Để tính độ trải giữa của tập dữ liệu chúng ta dùng hàm IQR().

IQR(x)
## [1] 1.25
IQR(chickwts$weight)
## [1] 119

Bài tập 8.2.

  1. Sử dụng dữ liệu chickwts để tính phân vị thứ 10, 30 và 90 cho trọng lượng gà. Sử dụng hàm tapply() để xác định loại thức ăn nào có phương sai trọng lượng lớn nhất.
  2. Sử dụng dữ liệu quakes sẵn có trong R để thực hiện các câu sau:
    1. Tìm độ trải giữa của biến depth.
    2. Tìm sáu giá trị tóm tắt dữ liệu cho tất cả các giá trị của biến mag mà có depth sâu hơn hoặc bằng 400km.
    3. Sử dụng hàm cut() để tạo factor tên depthcut từ biến depth có các mức độ là \([40, 200), [200, 360), [360, 520), [520, 680]\).
    4. Tính trung bình và độ lệch chuẩn của biến mag theo từng mức độ depthcut.
    5. Sử dụng hàm tapply()để tính phân vị thứ 80 của biến mag theo từng mức độ depthcut.

Hiệp phương sai và hệ số tương quan

Trong R hàm cov() dùng để tính hiệp phương sai mẫu.

x <- c(2, 4.4, 3, 3, 2, 2.2, 2, 4)
y <- c(1, 4.4, 1, 3, 2, 2.2, 2, 7)
cov(x,y)
## [1] 1.479286

Để tính hệ số tương quan mẫu chúng ta dùng hàm cor().

cor(x,y)
## [1] 0.7713962

Tóm tắt

Hàm/Toán tử Ý nghĩa
mean() Trung bình
median() Trung vị
table() Bảng tần số
prop.table() Bảng tần suất
min() Giá trị nhỏ nhất
max() Giá trị lớn nhất
range() Khoảng biến thiên (khoảng giá trị, phạm vi)
round() Làm tròn số
tapply() Áp dụng hàm cho từng nhóm giá trị
quantile() Bách phân vị
summary() Sáu giá trị tóm tắt dữ liệu
var() Phương sai
sd() Độ lệch chuẩn
IQR() Độ trải giữa
cov() Hiệp phương sai
cor() Hệ số tương quan

Tài liệu tham khảo

Davies, Tilman M. 2016. The Book of R: A First Course in Programming and Statistics. No Starch Press.