Chuyển đến nội dung chính

Kiểm định Chi-Square trong R: Hướng dẫn toàn diện

Tìm hiểu cách tạo bảng chéo và thực hiện kiểm định chi-square trong R bằng hàm chisq.test(). Khám phá ứng dụng thực tiễn và diễn giải kết quả một cách tự tin.
Đã cập nhật 5 thg 6, 2026  · 8 phút đọc

Hiểu cách phân tích và diễn giải dữ liệu là một kỹ năng vô giá đối với các chuyên gia dữ liệu. Có nhiều phép kiểm định thống kê khác nhau dùng cho các mục đích khác nhau. Kiểm định chi-square là một phép kiểm định phổ biến dùng trong ngữ cảnh cụ thể: khi bạn cần xác định mối liên hệ giữa các biến phân loại. Đây là điều các nhà nghiên cứu thường phải biết, vì vậy kiểm định chi-square là một trong những phép kiểm định thống kê được sử dụng rộng rãi nhất.

Hướng dẫn này giới thiệu về kiểm định chi-square, các loại kiểm định và các bước thực hiện bằng ngôn ngữ R. Cuối bài, bạn sẽ có kiến thức và kỹ năng để tự tin áp dụng kiểm định chi-square cho dữ liệu của mình và diễn giải kết quả.

Nếu bạn mới làm quen với ngôn ngữ R, bạn có thể xem lộ trình nghề nghiệp thân thiện với người mới bắt đầu Data Analyst with R để làm quen với ngôn ngữ này thông qua các ví dụ phân tích dữ liệu thực hành.

Các bước chính: Cách thực hiện kiểm định Chi-Square trong R

Để thực hiện kiểm định chi-square trong R, hãy làm theo các bước sau:

  • Bước 1: Chuẩn bị dữ liệu ở định dạng bảng chéo (contingency table).

  • Bước 2: Sử dụng hàm chisq.test() để áp dụng kiểm định chi-square.

Dưới đây là ví dụ nhanh minh họa bằng dữ liệu mẫu:

# Step 1: Creating a contingency table
data <- matrix(c(10, 20, 30, 40), nrow = 2)

# Step 2: Applying the chi-square test function
result <- chisq.test(data)

# Viewing the result
print(result)

Đoạn mã này tạo một bảng chéo 2x2 và thực hiện kiểm định chi-square. Kết quả sẽ hiển thị thống kê kiểm định, bậc tự do và p-value.

Kiểm định Chi-Square là gì?

Kiểm định chi-square là một phép kiểm định thống kê dùng để xác định liệu có mối liên hệ có ý nghĩa giữa các biến phân loại hay không. Nó so sánh tần suất quan sát được ở các nhóm khác nhau với tần suất kỳ vọng nếu không có mối liên hệ giữa các biến.

Các loại kiểm định chi-square

Có hai loại kiểm định chi-square chính:

  1. Kiểm định Chi-Square về tính độc lập: Dùng để xác định liệu các biến có độc lập hay có mối quan hệ với nhau. Ví dụ, bạn có thể muốn biết liệu giới tính có ảnh hưởng đến sở thích bỏ phiếu hay không.
  2. Kiểm định Chi-Square độ phù hợp (Goodness of Fit): Kiểm tra xem dữ liệu mẫu có phù hợp với một phân phối quần thể hay không. Ví dụ, bạn có thể kiểm tra một con xúc xắc có công bằng không bằng cách so sánh tần suất quan sát của mỗi mặt với tần suất kỳ vọng nếu xúc xắc công bằng.

Các giả định của kiểm định chi-square

Để đảm bảo tính hợp lệ của kiểm định chi-square, cần đáp ứng một số giả định:

  • Dữ liệu phải ở dạng tần suất hoặc số đếm các trường hợp.
  • Các nhóm (hạng mục) phải loại trừ lẫn nhau.
  • Đối với kiểm định độc lập, tần suất kỳ vọng ở mỗi ô nên ít nhất là 5.
  • Đối với kiểm định độ phù hợp, tần suất kỳ vọng tối thiểu là 1, và không quá 20% tần suất kỳ vọng nhỏ hơn 5.

Ứng dụng thực tiễn của kiểm định chi-square

Kiểm định chi-square được sử dụng rộng rãi trong học thuật và công nghiệp, đặc biệt để kiểm định giả thuyết về tính độc lập của các biến phân loại. Một số ứng dụng thực tiễn gồm:

  • Nghiên cứu thị trường: Phân tích liệu sở thích của khách hàng đối với một sản phẩm có khác nhau giữa các nhóm tuổi và mức thu nhập hay không, hoặc xác định liệu các chiến dịch marketing khác nhau có hiệu quả tương đương giữa các phân khúc nhân khẩu học hay không.
  • Nghiên cứu y khoa: Các trường hợp sử dụng phổ biến gồm nghiên cứu mối liên hệ giữa các yếu tố lối sống (ví dụ: hút thuốc, tập thể dục) và tỷ lệ mắc bệnh (ví dụ: ung thư phổi, bệnh tim) hoặc đánh giá liệu các nhóm điều trị khác nhau có tỷ lệ hồi phục khác nhau trong thử nghiệm lâm sàng hay không.
  • Kiểm soát chất lượng: Thường dùng để xem xét liệu lỗi sản phẩm có độc lập với quy trình sản xuất hoặc các dây chuyền cụ thể hay không, và để so sánh chất lượng sản phẩm từ các nhà cung cấp khác nhau nhằm xác định liệu có sự khác biệt đáng kể về tỷ lệ lỗi không.
  • Giáo dục: Thường dùng để xác định liệu có sự khác biệt đáng kể về tỷ lệ đỗ giữa học sinh từ các trường hoặc phương pháp giảng dạy khác nhau, và để đánh giá liệu việc áp dụng chương trình học mới có cải thiện kết quả học tập của học sinh trên các môn hay không.

Lưu ý rằng đây chỉ là một số ứng dụng trong học thuật và công nghiệp; chúng còn có thể mở rộng sang nhiều lĩnh vực khác.

Thực hiện kiểm định Chi-Square trong R: Ví dụ minh họa

Cách tốt nhất để học cách thực hiện kiểm định chi-square là qua một ví dụ áp dụng kiểm định lên một tập dữ liệu. Chúng ta sẽ dùng bộ dữ liệu Anemia Levels in Nigeria, có thể tải từ Kaggle. Bộ dữ liệu đến từ Khảo sát Nhân khẩu và Sức khỏe Nigeria (NDHS) năm 2018. Nó khám phá tác động của độ tuổi của mẹ và các yếu tố kinh tế - xã hội đến mức độ thiếu máu của trẻ em từ 0–59 tháng tại 36 bang của Nigeria và Lãnh thổ Thủ đô Liên bang. 

Hãy nạp bộ dữ liệu vào R và xem một mẫu để hiểu rõ hơn dữ liệu. Để đọc tệp CSV trong R, bạn cần cài đặt gói readr.

# Load the necessary libraries
install.packages('readr')
library(readr)

# Load the dataset from the CSV file
dataset <- read_csv("children anemia.csv")

# Display the first few rows of the dataset
head(dataset)

# Rename a column
colnames(dataset)[colnames(dataset) == "Anemia level...8"] <- "Anemia level"

# Display the column names
colnames(dataset)

Ngoài mẫu dữ liệu, chúng ta sẽ thấy các cột của bộ dữ liệu như dưới đây:

Columns in a dataset in RCác cột trong bộ dữ liệu. Ảnh: Tác giả.

Trong số đó, chúng ta sẽ chọn hai cột sau để đánh giá liệu có mối quan hệ giữa chúng hay không.

  • Trình độ học vấn cao nhất: Cột này phân loại trình độ học vấn của người mẹ thành “Không học”, “Tiểu học”, “Trung học” và “Cao hơn”.

  • Mức độ thiếu máu: Cột này cho biết mức độ thiếu máu của trẻ, như “Vừa”, “Nặng” hoặc “Không thiếu máu”.

Bước 1: Tạo bảng chéo (contingency table)

Bảng chéo, còn gọi là bảng phân phối chéo (cross-tab), cho thấy cách các giá trị của hai hoặc nhiều biến phân loại được phân bổ qua các nhóm tương ứng. 

Chúng ta sẽ chọn hai cột đã chọn từ bộ dữ liệu và chuyển chúng về định dạng bảng chéo cần thiết. Ta sẽ dùng gói phổ biến dplyr cho các thao tác này.

# Install and load the package
install.packages('dplyr')

library(dplyr)

# Select the columns of interest
selected_data <- dataset %>% select(Highest educational level, Anemia level)

# Create a contingency table for Highest educational level and Anemia level
contingency_table <- table(selected_data$Highest educational level, selected_data$Anemia level)

# View the contingency table
print(contingency_table)

Bảng chéo thu được như sau:

Contingency table in R

Bảng chéo. Ảnh: Tác giả.

Bước 2: Áp dụng hàm kiểm định chi-square

Vì chúng ta đã có dữ liệu ở định dạng bảng chéo như mong muốn, ta chỉ cần áp dụng hàm chisq.test(). Không cần nạp thư viện vì hàm này có sẵn trong gói base của R.

# Perform chi-square test
chi_square_test <- chisq.test(contingency_table)

# View the results
print(chi_square_test)

Đầu ra sẽ trông như sau:

Pearson’s chi-square test results in R

Kết quả kiểm định chi-square của Pearson. Ảnh: Tác giả.

Vậy là xong! Chúng ta đã thực hiện kiểm định chi-square trong hai bước đơn giản. Tiếp theo, diễn giải kết quả như thế nào?

Xây dựng giả thuyết & Diễn giải kết quả

Giả thuyết nêu rõ điều chúng ta kiểm định và thiết lập khung để diễn giải kết quả. Nói đơn giản, giả thuyết đưa ra câu hỏi rõ ràng cần trả lời, và kiểm định chi-square giúp xác định liệu dữ liệu quan sát ủng hộ hay bác bỏ nhận định đó.

Giả thuyết cho kiểm định chi-square

Khi thực hiện kiểm định chi-square, ta thường thiết lập hai giả thuyết:

  • Giả thuyết không (H0): Không có mối liên hệ giữa hai biến phân loại được kiểm định. Mọi khác biệt quan sát được là do ngẫu nhiên chứ không phải quan hệ thật sự.
  • Giả thuyết đối (H1): Có mối liên hệ có ý nghĩa giữa hai biến. Điều này gợi ý rằng các khác biệt quan sát được không phải do ngẫu nhiên và tồn tại mối quan hệ giữa các biến.

Áp dụng khái niệm giả thuyết không và giả thuyết đối cho các biến ta đã kiểm định chi-square, có thể phát biểu giả thuyết như sau:

  • Giả thuyết không (H0): Không có mối liên hệ giữa trình độ học vấn cao nhất của mẹ và mức độ thiếu máu của trẻ. Điều này có nghĩa ta giả định khả năng trẻ bị thiếu máu là độc lập với trình độ học vấn của mẹ.
  • Giả thuyết đối (H1): Có mối liên hệ giữa trình độ học vấn cao nhất của mẹ và mức độ thiếu máu của trẻ. Điều này ngụ ý rằng trình độ học vấn của mẹ ảnh hưởng đến khả năng trẻ bị thiếu máu.

Diễn giải đầu ra của kiểm định chi-square

Sau khi đã xây dựng giả thuyết, ta có thể diễn giải kết quả trong bối cảnh giả thuyết:

  • Thống kê Chi-Square (X-squared): Giá trị thống kê chi-square là 142.86. Giá trị này đo độ chênh lệch giữa tần suất quan sát trong bảng chéo và tần suất kỳ vọng nếu không có mối liên hệ giữa các biến.

  • Bậc tự do (df): Bậc tự do của kiểm định này là 9. Công thức tính: (số hàng - 1) * (số cột - 1).

  • P-value: P-value nhỏ hơn 2.2e-16, cực kỳ nhỏ. P-value này biểu thị xác suất quan sát được một thống kê chi-square lớn như, hoặc lớn hơn, 142.86 nếu giả thuyết không là đúng.

Chúng ta bác bỏ giả thuyết không vì p-value nhỏ hơn rất nhiều so với các mức ý nghĩa thông dụng (ví dụ 0,05; 0,01; thậm chí 0,001). Điều này cung cấp bằng chứng mạnh mẽ về mối liên hệ có ý nghĩa giữa trình độ học vấn của mẹ và tình trạng thiếu máu của trẻ. Nói cách khác, kết quả kiểm định chi-square cho thấy khả năng trẻ bị thiếu máu có liên quan đáng kể đến trình độ học vấn của mẹ.

Phân tích bổ sung: Truy cập các giá trị từ chisq.test()

Ngoài việc kiểm định giả thuyết, chúng ta có thể truy xuất một số giá trị từ đối tượng trả về bởi hàm chisq.test():

Số đếm quan sát (Observed counts)

Đây là số đếm thực tế của trẻ với các mức độ thiếu máu khác nhau theo từng trình độ học vấn của mẹ. Có thể truy xuất số đếm quan sát bằng mã sau:

# Observed counts
observed_counts <- chi_square_test$observed

print(observed_counts)

Đầu ra như sau:

Observed counts.

Số đếm quan sát. Ảnh: Tác giả.

Số đếm kỳ vọng (Expected counts)

Những số đếm này được tính dưới giả định rằng không có mối liên hệ giữa trình độ học vấn của mẹ và tình trạng thiếu máu của trẻ. Có thể truy xuất số đếm kỳ vọng bằng mã sau:

# Expected counts
expected_counts <- chi_square_test$expected
print(round(expected_counts, 2))

Đầu ra như sau:

Expected counts.

Số đếm kỳ vọng. Ảnh: Tác giả.

Phần dư Pearson (Pearson residuals)

Các phần dư này giúp xác định những chênh lệch lớn nhất giữa số đếm quan sát và kỳ vọng, cho biết ô nào đóng góp nhiều nhất vào thống kê chi-square. Có thể truy xuất phần dư Pearson bằng mã sau:

# Pearson residuals
pearson_residuals <- chi_square_test$residuals
print(round(pearson_residuals, 2))

Đầu ra như sau:

Residuals output.

Đầu ra phần dư. Ảnh: Tác giả.

Hãy cùng hiểu ý nghĩa của các con số phần dư này:

  • Phần dư dương: Cho biết số đếm quan sát lớn hơn kỳ vọng. Ví dụ, phần dư 5.96 cho "Không thiếu máu" trong nhóm học vấn "Cao hơn" nghĩa là có nhiều trẻ không thiếu máu hơn kỳ vọng đáng kể trong số các bà mẹ có học vấn cao hơn.

  • Phần dư âm: Cho biết số đếm quan sát thấp hơn kỳ vọng. Chẳng hạn, phần dư -5.74 cho thiếu máu "Vừa" trong nhóm học vấn "Cao hơn" gợi ý có ít trẻ thiếu máu mức vừa hơn kỳ vọng đáng kể trong nhóm các bà mẹ có học vấn cao hơn.

  • Phần dư lớn: Phần dư dương hoặc âm lớn cho thấy độ lệch đáng kể so với kỳ vọng. Các ô này đóng góp nhiều nhất vào thống kê chi-square. Ví dụ, phần dư dương lớn cho “Không thiếu máu” ở nhóm “Cao hơn” và phần dư âm lớn cho thiếu máu “Vừa” trong cùng nhóm cho thấy sự lệch mạnh về mức thiếu máu của trẻ dựa trên trình độ học vấn của mẹ.

  • Phần dư nhỏ: Phần dư gần 0 cho thấy số đếm quan sát gần với kỳ vọng, nghĩa là độ lệch yếu hơn. Ví dụ, phần dư cho nhóm “Tiểu học” qua các mức thiếu máu tương đối nhỏ, cho thấy số đếm quan sát và kỳ vọng gần nhau hơn cho nhóm này.

Biểu đồ đóng góp

Dựa trên các giá trị đã trích xuất ở trên, đóng góp của mỗi ô vào thống kê chi-square có thể được tính bằng đoạn mã dưới đây và chuyển thành phần trăm:

# Calculate contribution to chi-square statistic
contributions <- (observed_counts - expected_counts)^2 / expected_counts

# Calculate percentage contributions
total_chi_square <- chi_square_test$statistic
percentage_contributions <- 100 * contributions / total_chi_square

# Print percentage contributions
print("Percentage Contributions:")
print(round(percentage_contributions, 2))

Đầu ra sẽ như sau:

Percentage contributions.Tỷ lệ đóng góp. Ảnh: Tác giả.

 

Có thể trực quan hóa tỷ lệ đóng góp dưới dạng heatmap. Chúng ta sẽ dùng gói pheatmap để thực hiện, sau khi cài đặt và nạp gói.

# Install and load heatmap package
install.packages("pheatmap")
library(heatmap)

# Create heatmap for percentage contributions
pheatmap(percentage_contributions,
        display_numbers = TRUE,
        cluster_rows = FALSE,
        cluster_cols = FALSE,
        main = "Percentage Contribution to Chi-Square Statistic")

Đầu ra thu được như sau:

Percentage contribution to chi-square statistic heatmap in RHeatmap tỷ lệ đóng góp vào thống kê chi-square. Ảnh: Tác giả.

Một heatmap như trên với các tỷ lệ đóng góp có thể hữu ích nếu bạn muốn phân tích sâu hơn để hiểu loại mối liên hệ nào tồn tại sau khi ta phát hiện có mối liên hệ dựa trên kết quả kiểm định chi-square.

Kết luận

Hướng dẫn này đã giới thiệu bạn về kiểm định chi-square, các loại kiểm định và các giả định cơ bản. Chúng ta cũng đã học cách thực hiện kiểm định và diễn giải kết quả trong R, kèm theo trực quan hóa qua ví dụ. 

Kiểm định chi-square được sử dụng phổ biến trong kiểm định giả thuyết và nói chung trong thống kê. Hãy cân nhắc tham gia một trong các khóa học sau để củng cố hiểu biết về phân tích dữ liệu và thống kê bằng R:


Arunn Thevapalan's photo
Author
Arunn Thevapalan
LinkedIn
Twitter

Với vai trò nhà khoa học dữ liệu cao cấp, tôi thiết kế, phát triển và triển khai các giải pháp học máy quy mô lớn để giúp doanh nghiệp ra quyết định dựa trên dữ liệu hiệu quả hơn. Với vai trò tác giả về khoa học dữ liệu, tôi chia sẻ những bài học kinh nghiệm, lời khuyên nghề nghiệp và các hướng dẫn thực hành chuyên sâu.

Câu hỏi thường gặp

Mục đích của kiểm định chi-square là gì?

Kiểm định chi-square được dùng để xác định liệu có mối liên hệ có ý nghĩa giữa hai biến phân loại.

Có thể dùng kiểm định chi-square với cỡ mẫu nhỏ không?

Nói chung là không khuyến nghị vì kiểm định yêu cầu tần suất kỳ vọng ít nhất là 5 ở mỗi ô để cho kết quả tin cậy.

Phần dư Pearson cho biết điều gì trong kiểm định chi-square?

Phần dư Pearson cho thấy mỗi ô trong bảng chéo đóng góp bao nhiêu vào thống kê chi-square tổng thể. Giá trị dương cho biết số đếm quan sát cao hơn kỳ vọng, còn giá trị âm cho biết thấp hơn.

Tôi tạo bảng chéo trong R cho kiểm định chi-square như thế nào?

Sử dụng các hàm table() hoặc xtabs() để tạo bảng chéo từ các biến phân loại của bạn.

Nếu dữ liệu của tôi không đáp ứng giả định cho kiểm định chi-square thì sao?

Hãy cân nhắc dùng Fisher's Exact Test, phù hợp hơn cho cỡ mẫu nhỏ hoặc khi tần suất kỳ vọng thấp.

Chủ đề

Học cùng DataCamp

Courses

Nhập môn Thống kê với R

4 giờ
130.2K
Nâng cao kỹ năng thống kê của quý vị và học cách thu thập, phân tích và đưa ra kết luận chính xác từ dữ liệu.
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow