R - Trung bình, Trung vị và Phân phối

Xin chào các bạn học lập trình R! Hôm nay, chúng ta sẽ cùng nhau khám phá thế giới thống kê mô tả bằng R. Như một người giáo viên khoa học máy tính gần gũi, tôi sẽ hướng dẫn các bạn qua các khái niệm về trung bình, trung vị và phân phối. Đừng lo lắng nếu bạn chưa bao giờ viết một dòng mã trước đây - chúng ta sẽ bắt đầu từ những điều cơ bản và cùng nhau tiến hóa.

R - Mean, Median & Mode

Trung bình

Hãy bắt đầu với trung bình, có lẽ là biện pháp köz tâm phổ biến nhất. Nói đơn giản, nó là cái chúng ta thường gọi là "giá trị trung bình".

Cách tính Trung bình Cơ bản

Để tính trung bình trong R, chúng ta sử dụng hàm mean(). Dưới đây là một ví dụ đơn giản:

numbers <- c(10, 20, 30, 40, 50)
result <- mean(numbers)
print(result)

Điều này sẽ выводить: 30

Hãy phân tích điều này:

  1. Chúng ta tạo một vector叫做 numbers sử dụng hàm c().
  2. Chúng ta sử dụng hàm mean() để tính giá trị trung bình của các số này.
  3. Chúng ta lưu kết quả vào một biến叫做 result.
  4. Cuối cùng, chúng ta in kết quả.

Trung bình với Giá trị NA

Bây giờ, điều gì sẽ xảy ra nếu chúng ta có dữ liệu bị thiếu, được đại diện bởi NA trong R? Hãy xem:

numbers_with_na <- c(10, 20, NA, 40, 50)
result_with_na <- mean(numbers_with_na)
print(result_with_na)

Điều này sẽ выводить: NA

Ồ! R trả về NA vì nó không biết cách xử lý giá trị bị thiếu. Nhưng đừng lo lắng, chúng ta có giải pháp!

Áp dụng Tùy chọn NA

Chúng ta có thể nói R bỏ qua các giá trị NA bằng cách sử dụng tùy chọn na.rm:

numbers_with_na <- c(10, 20, NA, 40, 50)
result_na_removed <- mean(numbers_with_na, na.rm = TRUE)
print(result_na_removed)

Điều này sẽ выводить: 30

Tuyệt vời! Bằng cách đặt na.rm = TRUE, chúng ta đang nói với R để loại bỏ các giá trị NA trước khi tính trung bình.

Áp dụng Tùy chọn Trim

Đôi khi, chúng ta muốn loại bỏ các giá trị cực đoan khỏi phép toán trung bình. Đó là khi tùy chọn trim rất hữu ích. Nó cho phép chúng ta loại bỏ một百分比 của các giá trị từ cả hai đầu của dữ liệu trước khi tính trung bình.

numbers <- c(1, 2, 3, 4, 5, 100)  # Lưu ý giá trị ngoại lệ 100
result_trimmed <- mean(numbers, trim = 0.1)
print(result_trimmed)

Điều này sẽ выводить một giá trị gần 3.5

Bằng cách đặt trim = 0.1, chúng ta đang loại bỏ 10% dữ liệu từ mỗi đầu trước khi tính trung bình. Điều này giúp giảm tác động của các giá trị ngoại lệ.

Trung vị

Trung vị là giá trị giữa khi tập dữ liệu được sắp xếp từ nhỏ đến lớn. Nó ít bị ảnh hưởng bởi các giá trị ngoại lệ hơn trung bình.

numbers <- c(1, 3, 5, 7, 9, 11, 13)
result_median <- median(numbers)
print(result_median)

Điều này sẽ выводить: 7

Hàm median() hoạt động tương tự như mean(). Nó cũng có tùy chọn na.rm để xử lý các giá trị NA:

numbers_with_na <- c(1, 3, NA, 7, 9, 11, 13)
result_median_na <- median(numbers_with_na, na.rm = TRUE)
print(result_median_na)

Điều này sẽ выводить: 8

Phân phối

Thú vị thay, R không có hàm内置 để tính phân phối (giá trị xuất hiện nhiều nhất). Nhưng đừng lo lắng! Chúng ta có thể tạo ra hàm của riêng mình:

get_mode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}

numbers <- c(1, 2, 2, 3, 3, 3, 4, 4, 5)
result_mode <- get_mode(numbers)
print(result_mode)

Điều này sẽ выводить: 3

Hãy phân tích hàm tùy chỉnh này:

  1. unique(v) lấy các giá trị duy nhất trong vector.
  2. match(v, uniqv) tìm vị trí của các giá trị khớp.
  3. tabulate() đếm số lần xuất hiện.
  4. which.max() tìm vị trí của số đếm lớn nhất.
  5. Chúng ta trả về giá trị tại vị trí đó.

Tóm tắt các Hàm

Dưới đây là bảng tóm tắt các hàm chúng ta đã học:

Biểu thị Hàm Tùy chọn
Trung bình mean() na.rm, trim
Trung vị median() na.rm
Phân phối Custom function N/A

Nhớ rằng, thực hành là cách tốt nhất để thành thạo! Hãy thử các hàm này với các tập dữ liệu khác nhau và khám phá cách thay đổi các tùy chọn ảnh hưởng đến kết quả.

Khi chúng ta kết thúc, tôi nhớ lại một câu chuyện từ những ngày đầu học R. Tôi đã từng花费几个小时试图 tính trung bình của một tập dữ liệu, chỉ để nhận ra rằng tôi quên bỏ qua các giá trị NA. Đừng như tôi - hãy kiểm tra dữ liệu của bạn và sử dụng na.rm = TRUE khi cần!

Chúc các bạn lập trình vui vẻ, và hy vọng các cuộc phiêu lưu thống kê của bạn trong R sẽ đầy ắp những phát hiện và những khoảnh khắc "aha"!

Credits: Image by storyset