Kiểm định Nhị thức là một phương pháp kiểm định giả thuyết thống kê chính xác (exact test) được sử dụng để xác định xem liệu tỉ lệ của một sự kiện “thành công” trong một chuỗi các thử nghiệm độc lập có khác biệt so với một tỉ lệ giả định hay không. Đây là công cụ lý tưởng cho các tình huống mà kết quả của mỗi thử nghiệm chỉ có thể là một trong hai loại (ví dụ: có/không, đúng/sai, sống/chết).
Để áp dụng Kiểm định Nhị thức, dữ liệu cần tuân thủ các điều kiện sau:
n
) phải được xác định trước.p
) là như nhau cho mỗi thử nghiệm.Quy trình kiểm định giả thuyết về tỉ lệ sử dụng Kiểm định Nhị thức bao gồm bốn bước chính:
Ta cần xác định hai giả thuyết đối lập nhau:
p
) bằng một giá trị cụ thể (\(p_0\)).Mức ý nghĩa, ký hiệu là \(\alpha\), là ngưỡng xác suất để bác bỏ giả thuyết gốc. Nếu xác suất xảy ra của kết quả quan sát được (khi \(H_0\) đúng) thấp hơn \(\alpha\), chúng ta sẽ bác bỏ \(H_0\). Mức \(\alpha\) phổ biến nhất là 0.05 (5%).
Phần mềm thống kê (như R) sẽ tính toán P-value dựa trên phân phối nhị thức.
P-value là gì? 🧐 P-value là xác suất quan sát được một kết quả trong mẫu ít nhất cũng cực đoan như kết quả đã thu được, với giả định rằng giả thuyết gốc (\(H_0\)) là đúng. P-value càng nhỏ, bằng chứng chống lại \(H_0\) càng mạnh.
Dựa trên P-value, ta đưa ra quyết định:
Một trong những chủ đề gây tranh cãi nhất trong tâm lý học hiện đại là liệu việc tiếp xúc với game bạo lực có làm gia tăng hành vi hung hăng ngoài đời thực hay không. Nghiên cứu này nhằm mục đích sử dụng dữ liệu khảo sát thực tế để kiểm tra một khía cạnh của mối liên hệ này.
Chúng ta sẽ sử dụng bộ dữ liệu công khai trên Kaggle:
Đầu tiên, chúng ta tải dữ liệu. Điểm quan trọng nhất ở đây là loại bỏ cột cuối cùng bị trống do lỗi định dạng trong file CSV gốc.
# Đọc dữ liệu từ file CSV đã tải về
# Đảm bảo file "aggression_data.csv" nằm trong cùng thư mục làm việc của bạn
data_raw <- read_csv("aggression_data.csv", col_names = FALSE)
# *** SỬA LỖI: Chỉ giữ lại 8 cột đầu tiên và bỏ cột thứ 9 bị trống ***
data <- data_raw[, 1:8]
# Đặt lại tên cột cho dễ hiểu và dễ gọi hơn
colnames(data) <- c("id", "gender", "age", "play_violent_games", "feeling_to_hit", "gets_angry", "argues_more", "gets_in_fights")
# Hiển thị 6 dòng đầu của dữ liệu sau khi đã làm sạch
knitr::kable(head(data), caption = "Một vài dòng đầu của bộ dữ liệu đã được làm sạch")
id | gender | age | play_violent_games | feeling_to_hit | gets_angry | argues_more | gets_in_fights |
---|---|---|---|---|---|---|---|
Timestamp | What is your age? | Gender | Class | City/ Residencial status | Type of Family | What type of video games do you typically play? | Name the video game you usually play |
7-11-2023 22:16:49 | 20 | male | 12th | Lahore | joint | action | Pubg |
7-11-2023 23:01:27 | 18 | male | 11th | Lahore | joint | action | Pubg |
7-11-2023 23:11:33 | 16 | male | 11th | Lahore | nuclear | action | PUBG |
7-11-2023 23:12:33 | 19 | female | 12th | Lahore | nuclear | word connect | word connect |
7-11-2023 23:14:42 | 19 | male | 12th | Balochistan | joint | action | Pubg |
Chúng ta cần lọc ra nhóm đối tượng quan tâm (người chơi game bạo lực) và đếm số trường hợp “thành công” (người có suy nghĩ hung hăng).
# Lọc ra những người có chơi game bạo lực (thời gian chơi > 0 giờ)
violent_gamers <- data %>%
filter(play_violent_games > 0)
# Xác định biến kết quả nhị phân: 1 nếu có suy nghĩ hung hăng, 0 nếu không
# "Agree" (giá trị 4) hoặc "Strongly agree" (giá trị 5) được coi là có suy nghĩ hung hăng
violent_gamers <- violent_gamers %>%
mutate(has_aggressive_thoughts = ifelse(feeling_to_hit %in% c(4, 5), 1, 0))
# Tính toán các giá trị cần cho kiểm định
n <- nrow(violent_gamers) # Tổng cỡ mẫu
x <- sum(violent_gamers$has_aggressive_thoughts) # Số trường hợp "thành công"
sample_proportion <- x / n # Tỉ lệ trong mẫu
# In kết quả chuẩn bị
cat("Tổng số người chơi game bạo lực trong mẫu (n):", n, "\n")
## Tổng số người chơi game bạo lực trong mẫu (n): 148
## Số người thừa nhận có suy nghĩ hung hăng (x): 0
## Tỉ lệ quan sát được trong mẫu: 0.0%
Tỉ lệ quan sát được trong mẫu là 0.0%, cao hơn mức nền 20%. Câu hỏi đặt ra là liệu sự khác biệt này có ý nghĩa thống kê hay chỉ là do ngẫu nhiên.
Chúng ta sử dụng hàm binom.test()
để thực hiện kiểm định
giả thuyết một phía.
# Tỉ lệ giả định trong giả thuyết gốc
p0 <- 0.20
# Thực hiện kiểm định
ket_qua <- binom.test(x = x,
n = n,
p = p0,
alternative = "greater")
# In kết quả một cách trực quan
print(ket_qua)
##
## Exact binomial test
##
## data: x and n
## number of successes = 0, number of trials = 148, p-value = 1
## alternative hypothesis: true probability of success is greater than 0.2
## 95 percent confidence interval:
## 0 1
## sample estimates:
## probability of success
## 0
Kết quả từ hàm binom.test()
cung cấp các thông tin quan
trọng sau:
p-value
: Giá trị P-value thu được là
1.sample estimates
: Tỉ lệ thành công
trong mẫu (probability of success) là 0.95 percent confidence interval
: Khoảng
tin cậy 95% cho tỉ lệ thực sự của tổng thể.Chúng ta so sánh P-value với mức ý nghĩa \(\alpha = 0.05\).
0.05
Vì 1 < 0.05, chúng ta có đủ bằng chứng thống kê để bác bỏ giả thuyết gốc \(H_0\).
Dựa trên phân tích bộ dữ liệu khảo sát, có bằng chứng thống kê đủ mạnh ở mức ý nghĩa 5% để kết luận rằng tỉ lệ những người chơi game bạo lực thừa nhận có suy nghĩ muốn tấn công người khác (0.0%) thực sự cao hơn mức nền 20% trong dân số chung.
Kết quả này không khẳng định rằng game bạo lực gây ra hành vi hung hăng, nhưng nó cho thấy một mối liên hệ có ý nghĩa thống kê giữa hai yếu tố này trong bộ dữ liệu được phân tích.