Hướng dẫn R ANOVA: Một chiều & Hai chiều (có ví dụ)
ANOVA là gì?
Phân tích phương sai (ANOVA) là một kỹ thuật thống kê, thường được sử dụng để nghiên cứu sự khác biệt giữa hai hoặc nhiều nhóm trung bình. Kiểm định ANOVA tập trung vào các nguồn biến thiên khác nhau trong một biến điển hình. ANOVA trong R chủ yếu cung cấp bằng chứng về sự tồn tại của sự bằng nhau về trung bình giữa các nhóm. Phương pháp thống kê này là một phần mở rộng của kiểm định t. Nó được sử dụng trong trường hợp biến nhân tố có nhiều hơn một nhóm.
ANOVA một chiều
Có nhiều tình huống bạn cần so sánh giá trị trung bình giữa nhiều nhóm. Ví dụ: bộ phận tiếp thị muốn biết liệu ba nhóm có hiệu suất bán hàng như nhau hay không.
- Đội: 3 yếu tố cấp độ: A, B và C
- Bán hàng: Thước đo hiệu suất
Kiểm định ANOVA có thể cho biết liệu ba nhóm có hiệu suất tương tự nhau hay không.
Để làm rõ liệu dữ liệu có đến từ cùng một nhóm hay không, bạn có thể thực hiện một phân tích phương sai một chiều (sau đây gọi là ANOVA một chiều). Kiểm định này, giống như bất kỳ kiểm định thống kê nào khác, đưa ra bằng chứng cho thấy giả thuyết H0 có thể được chấp nhận hay bác bỏ.
Giả thuyết trong kiểm định ANOVA một chiều
- H0: Giá trị trung bình giữa các nhóm là như nhau
- H3: Ít nhất, giá trị trung bình của một nhóm là khác nhau
Nói cách khác, giả thuyết H0 ngụ ý rằng không có đủ bằng chứng để chứng minh giá trị trung bình của nhóm (yếu tố) khác với nhóm khác.
Kiểm định này tương tự như kiểm định t, mặc dù kiểm định ANOVA được khuyến nghị trong trường hợp có nhiều hơn 2 nhóm. Ngoại trừ việc kiểm định t và ANOVA cung cấp kết quả tương tự nhau.
Giả định
Chúng tôi giả định rằng mỗi yếu tố được lấy mẫu ngẫu nhiên, độc lập và đến từ một quần thể có phân bố chuẩn với phương sai không xác định nhưng bằng nhau.
Giải thích kiểm định ANOVA
Thống kê F được sử dụng để kiểm tra xem dữ liệu có đến từ các quần thể khác nhau đáng kể hay không, tức là các phương tiện mẫu khác nhau.
Để tính thống kê F, bạn cần chia sự biến thiên giữa các nhóm qua sự biến thiên trong nhóm.
Sản phẩm giữa nhóm sự biến thiên phản ánh sự khác biệt giữa các nhóm trong toàn bộ dân số. Nhìn vào hai biểu đồ dưới đây để hiểu khái niệm phương sai giữa các nhóm.
Biểu đồ bên trái cho thấy rất ít sự khác biệt giữa ba nhóm và rất có thể ba phương tiện này có xu hướng tổng thể có nghĩa là (nghĩa là có nghĩa là cho ba nhóm).
Biểu đồ bên phải vẽ ba phân bố cách xa nhau và không có phân bố nào trùng nhau. Có khả năng cao là sự khác biệt giữa giá trị trung bình tổng và giá trị trung bình của các nhóm sẽ lớn.
Sản phẩm trong nhóm sự biến thiên xem xét sự khác biệt giữa các nhóm. Sự khác biệt xuất phát từ những quan sát riêng lẻ; một số điểm có thể hoàn toàn khác với ý nghĩa của nhóm. Các trong nhóm sự biến thiên chọn ra hiệu ứng này và đề cập đến lỗi lấy mẫu.
Để hiểu trực quan khái niệm về tính biến đổi trong nhóm, hãy nhìn vào biểu đồ bên dưới.
Phần bên trái vẽ sơ đồ phân bố của ba nhóm khác nhau. Bạn đã tăng độ trải của từng mẫu và rõ ràng là phương sai riêng lẻ là lớn. Kiểm định F sẽ giảm, nghĩa là bạn có xu hướng chấp nhận giả thuyết không
Phần bên phải hiển thị chính xác các mẫu giống nhau (giá trị trung bình giống hệt nhau) nhưng có độ biến thiên thấp hơn. Nó dẫn đến sự gia tăng kiểm định F và có xu hướng ủng hộ giả thuyết thay thế.
Bạn có thể sử dụng cả hai biện pháp để xây dựng thống kê F. Việc hiểu thống kê F rất trực quan. Nếu tử số tăng, điều đó có nghĩa là độ biến thiên giữa các nhóm cao và có khả năng các nhóm trong mẫu được rút ra từ các phân bố hoàn toàn khác nhau.
Nói cách khác, thống kê F thấp cho thấy có rất ít hoặc không có sự khác biệt đáng kể giữa mức trung bình của nhóm.
Ví dụ Kiểm định ANOVA một chiều
Bạn sẽ sử dụng tập dữ liệu chất độc để thực hiện kiểm tra ANOVA một chiều. Tập dữ liệu bao gồm 48 hàng và 3 biến:
- Thời gian: Thời gian sống sót của động vật
- chất độc: Loại chất độc được sử dụng: cấp hệ số: 1,2 và 3
- điều trị: Loại điều trị được sử dụng: mức yếu tố: 1,2 và 3
Trước khi bắt đầu tính toán kiểm định ANOVA, bạn cần chuẩn bị dữ liệu như sau:
- Bước 1: Nhập dữ liệu
- Bước 2: Loại bỏ biến không cần thiết
- Bước 3: Chuyển đổi chất độc theo cấp độ yêu cầu
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/poisons.csv" df <- read.csv(PATH) %>% select(-X) %>% mutate(poison = factor(poison, ordered = TRUE)) glimpse(df)
Đầu ra:
## Observations: 48 ## Variables: 3 ## $ time <dbl> 0.31, 0.45, 0.46, 0.43, 0.36, 0.29, 0.40, 0.23, 0.22, 0... ## $ poison <ord> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2... ## $ treat <fctr> A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, ...
Mục tiêu của chúng tôi là kiểm tra giả định sau:
- H0: Không có sự khác biệt về thời gian sống thêm trung bình giữa các nhóm
- H3: Thời gian sống sót trung bình của ít nhất một nhóm là khác nhau.
Nói cách khác, bạn muốn biết liệu có sự khác biệt thống kê giữa thời gian sống sót trung bình theo loại chất độc được tiêm cho lợn Guinea hay không.
Bạn sẽ tiến hành như sau:
- Bước 1: Kiểm tra định dạng của chất độc biến đổi
- Bước 2: In số liệu thống kê tóm tắt: số đếm, giá trị trung bình và độ lệch chuẩn
- Bước 3: Vẽ biểu đồ hộp
- Bước 4: Tính toán kiểm định ANOVA một chiều
- Bước 5: Chạy kiểm định t từng cặp
Bước 1) Bạn có thể kiểm tra mức độ chất độc bằng đoạn mã sau. Bạn sẽ thấy ba giá trị ký tự vì bạn chuyển đổi chúng theo hệ số với động từ đột biến.
levels(df$poison)
Đầu ra:
## [1] "1" "2" "3"
Bước 2) Bạn tính giá trị trung bình và độ lệch chuẩn.
df % > % group_by(poison) % > % summarise( count_poison = n(), mean_time = mean(time, na.rm = TRUE), sd_time = sd(time, na.rm = TRUE) )
Đầu ra:
## # A tibble: 3 x 4 ## poison count_poison mean_time sd_time ## <ord> <int> <dbl> <dbl> ## 1 1 16 0.617500 0.20942779 ## 2 2 16 0.544375 0.28936641 ## 3 3 16 0.276250 0.06227627
Bước 3) Ở bước ba, bạn có thể kiểm tra bằng đồ họa xem có sự khác biệt giữa phân phối hay không. Lưu ý rằng bạn bao gồm dấu chấm bị giật.
ggplot(df, aes(x = poison, y = time, fill = poison)) + geom_boxplot() + geom_jitter(shape = 15, color = "steelblue", position = position_jitter(0.21)) + theme_classic()
Đầu ra:
Bước 4) Bạn có thể chạy thử nghiệm ANOVA một chiều bằng lệnh aov. Cú pháp cơ bản cho thử nghiệm ANOVA là:
aov(formula, data) Arguments: - formula: The equation you want to estimate - data: The dataset used
Cú pháp của công thức là:
y ~ X1+ X2+...+Xn # X1 + X2 +... refers to the independent variables y ~ . # use all the remaining variables as independent variables
Bạn có thể trả lời câu hỏi của chúng tôi: Có sự khác biệt nào về thời gian sống sót giữa chuột lang khi biết loại chất độc được đưa vào không?
Lưu ý rằng, nên lưu trữ mô hình và sử dụng hàm summary() để có bản in kết quả tốt hơn.
anova_one_way <- aov(time~poison, data = df) summary(anova_one_way)
Giải thích mã
- aov(thời gian ~ chất độc, dữ liệu = df): Chạy thử nghiệm ANOVA với công thức sau
- summary(anova_one_way): In tóm tắt của bài kiểm tra
Đầu ra:
## Df Sum Sq Mean Sq F value Pr(>F) ## poison 2 1.033 0.5165 11.79 7.66e-05 *** ## Residuals 45 1.972 0.0438 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Giá trị p thấp hơn ngưỡng thông thường là 0.05. Bạn tự tin nói rằng có sự khác biệt về mặt thống kê giữa các nhóm được biểu thị bằng dấu “*”.
So sánh từng cặp
Kiểm định ANOVA một chiều không cho biết nhóm nào có giá trị trung bình khác. Thay vào đó, bạn có thể thực hiện kiểm định Tukey bằng hàm TukeyHSD().
TukeyHSD(anova_one_way)
Đầu ra:
ANOVA hai chiều
Kiểm định ANOVA hai chiều thêm một biến nhóm khác vào công thức. Nó giống hệt với kiểm định ANOVA một chiều, mặc dù công thức có thay đổi đôi chút:
y=x1+x2
with là biến định lượng và là biến phân loại.
Giả thuyết trong kiểm định ANOVA hai chiều
- H0: Giá trị trung bình của cả hai biến đều bằng nhau (tức là biến nhân tố)
- H3: Giá trị trung bình của cả hai biến là khác nhau
Bạn thêm biến điều trị vào mô hình của chúng tôi. Biến này cho biết cách điều trị dành cho chuột lang. Bạn muốn biết liệu có sự phụ thuộc thống kê giữa chất độc và cách điều trị cho chuột lang hay không.
Chúng tôi điều chỉnh mã của mình bằng cách thêm phần thưởng với biến độc lập khác.
anova_two_way <- aov(time~poison + treat, data = df) summary(anova_two_way)
Đầu ra:
## Df Sum Sq Mean Sq F value Pr(>F) ## poison 2 1.0330 0.5165 20.64 5.7e-07 *** ## treat 3 0.9212 0.3071 12.27 6.7e-06 *** ## Residuals 42 1.0509 0.0250 ## ---
Bạn có thể kết luận rằng cả chất độc và chất độc đều khác nhau về mặt thống kê với 0. Bạn có thể bác bỏ giả thuyết NULL và xác nhận rằng việc thay đổi phương pháp điều trị hoặc chất độc sẽ ảnh hưởng đến thời gian sống sót.
Tổng kết
Chúng ta có thể tóm tắt bài kiểm tra trong bảng dưới đây:
Thử nghiệm | Mã | Giả thuyết | Giá trị P |
---|---|---|---|
Phân tích phương sai một chiều |
aov(y ~ X, data = df) |
H3: Trung bình khác nhau ở ít nhất một nhóm | 0.05 |
Theo cặp |
TukeyHSD(ANOVA summary) |
0.05 | |
Phân tích phương sai hai chiều |
aov(y ~ X1 + X2, data = df) |
H3: Trung bình là khác nhau ở cả hai nhóm | 0.05 |