Phân tích ANOVA 2 chiều
Phân tích phương sai hai chiều trong thực hành kinh tế lượng

Tóm tắt: Phân tích ANOVA hai chiều là kỹ thuật quan trọng trong thực hành kinh tế lượng để xác định tác động riêng lẻ và tương tác của hai biến độc lập lên biến phụ thuộc. Bài hướng dẫn này trình bày chi tiết cách thực hiện phân tích ANOVA hai chiều bằng SPSS qua ví dụ thực tế về thu nhập lao động theo giới tính và loại hình doanh nghiệp tại Việt Nam, bao gồm kiểm tra giả thiết, thực hiện phân tích và giải thích kết quả một cách chính xác.
Giới thiệu về phân tích ANOVA hai chiều
Nội dung chính
Mục đích chính của phân tích ANOVA hai chiều là xác định sự tương tác của hai biến độc lập lên biến phụ thuộc. Ví dụ điển hình trong kinh tế lao động Việt Nam: chúng ta muốn tìm hiểu có sự khác nhau về thu nhập của người lao động theo giới tính và loại hình doanh nghiệp làm việc hay không.
- Giới tính là biến nhị phân có hai giá trị: nam và nữ
- Loại hình doanh nghiệp là biến phân loại với bốn giá trị: FDI, DNNN, DNTN, HTX-hộ
- Thu nhập là biến phụ thuộc liên tục (triệu đồng/năm)
Thuật ngữ tương tác trong phân tích ANOVA hai chiều có ý nghĩa nhấn mạnh rằng tác động của một biến độc lập lên biến phụ thuộc bị ảnh hưởng như thế nào bởi biến độc lập còn lại.
Xem thêm: Kiểm định tham số (Parametric tests)
Giả thiết của phân tích ANOVA hai chiều
Để áp dụng phân tích ANOVA hai chiều trong thực hành kinh tế lượng, dữ liệu phải thỏa mãn sáu giả thiết cơ bản sau:
- Biến phụ thuộc liên tục: Biến phụ thuộc phải là biến liên tục (dạng khoảng, tỉ lệ). Tham khảo bài viết các loại thang đo trong phân tích dữ liệu.
- Hai biến độc lập phân loại: Có hai biến độc lập là biến danh mục (từ hai mức trở lên) với giá trị có thể dạng số hoặc chuỗi.
- Tính độc lập của quan sát: Các quan sát trong mỗi nhóm và giữa các nhóm độc lập với nhau.
- Không có điểm dị biệt: Dữ liệu không chứa các điểm dị biệt (Xem thêm phát hiện điểm dị biệt).
- Phân phối chuẩn: Dữ liệu của biến phụ thuộc ở mỗi nhóm phải có dạng phân phối chuẩn hoặc xấp xỉ phân phối chuẩn (Xem thêm Phân phối chuẩn).
- Đồng nhất phương sai: Có sự đồng nhất về phương sai của biến phụ thuộc. Điều này có nghĩa phương sai của tổng thể trong mỗi nhóm đều bằng nhau.
Ví dụ thực tế từ kinh tế Việt Nam
Để minh họa cho thực hành kinh tế lượng, chúng ta sử dụng câu hỏi nghiên cứu: “Có sự khác nhau về thu nhập của người lao động (triệu đồng/năm) theo giới tính và loại hình doanh nghiệp hay không?”
Dữ liệu nghiên cứu
Sử dụng bộ dữ liệu vietlod.sav gồm 7287 quan sát là người lao động trên toàn quốc. Các thông tin khảo sát chính bao gồm:
- gender: Giới tính (nam/nữ)
- age: Tuổi
- ethnic: Dân tộc
- degree: Bằng cấp
- region, urban: Nơi sinh sống
- school: Số năm đi học
- exp: Số năm kinh nghiệm
- section: Loại hình doanh nghiệp
- structure: Lĩnh vực làm việc
- earn: Thu nhập (triệu đồng/năm)
Hướng dẫn thực hành chi tiết trên SPSS
Thực hiện phân tích ANOVA hai chiều trong SPSS theo các bước sau:
Vào menu Analyze → General Linear Model → Univariate…
Bước 2: Thiết lập biến phân tích
Do biến thu nhập (earn
) không có dạng phân phối chuẩn, chúng ta sử dụng dạng logarit của biến earn
là lnearn
:
- Đưa biến
lnearn
vào Dependent List - Đưa biến
section
vàgender
vào Fixed Factor(s)
Bước 3: Thiết lập đồ thị tương tác
Bấm nút Plots… để thiết lập biểu đồ tương tác:
- Chuyển biến
section
vào ô Horizontal Axis - Chuyển biến
gender
vào ô Separate Lines - Tại khung Plots, bấm nút Add để tạo biến tương tác
section*gender
Bước 4: Thiết lập kiểm định Post Hoc
Bấm nút Post Hoc… để thực hiện kiểm định Post Hoc cho từng cặp giá trị:
section
(bốn mức).Bước 5: Thiết lập tùy chọn bổ sung
Bấm nút Options… để thiết lập các tùy chọn quan trọng:
- Chuyển biến tương tác
gender*section
vào ô Display Means for - Check mục Homogeneity test để kiểm tra đồng nhất phương sai
- Check mục Descriptive statistics để hiển thị thống kê mô tả
Phân tích và giải thích kết quả
Kết quả phân tích ANOVA hai chiều trong thực hành kinh tế lượng được thể hiện qua các bảng và đồ thị sau:
Bảng thống kê mô tả
Bảng Descriptives trình bày thông tin tổng quát của biến lnearn
trong các nhóm tương tác:
- Số quan sát trong mỗi nhóm tương tác
- Giá trị trung bình logarit thu nhập
- Sai số chuẩn và độ lệch chuẩn
- Giá trị lớn nhất và nhỏ nhất
Kiểm định đồng nhất phương sai
Bảng Levene’s Test of Equality of Error Variances kiểm tra giả thiết đồng nhất phương sai:
Với giá trị Sig. = 0.000 < 0.05, chúng ta bác bỏ giả thuyết \({H_0}\) cho rằng phương sai của các nhóm bằng nhau. Điều này vi phạm giả thiết đồng nhất phương sai.
Bảng kiểm định hiệu ứng chính và tương tác
Bảng Tests of Between-Subjects Effects là kết quả quan trọng nhất:
- gender: Có ý nghĩa thống kê (p < 0.05) – Giới tính ảnh hưởng đến thu nhập
- section: Có ý nghĩa thống kê (p < 0.05) – Loại hình doanh nghiệp ảnh hưởng đến thu nhập
- gender*section: Có ý nghĩa thống kê (p < 0.05) – Có tương tác giữa giới tính và loại hình doanh nghiệp
Đồ thị tương tác
Đồ thị ước lượng thu nhập biên cho thấy mô hình tương tác rõ ràng:
- Thu nhập của lao động nam luôn cao hơn lao động nữ trong tất cả loại hình doanh nghiệp
- Sự chênh lệch rõ nhất ở nhóm HTX-hộ và doanh nghiệp FDI
- Đường tương tác không song song, xác nhận có tương tác có ý nghĩa
Kết quả kiểm định Post Hoc
Bảng Multiple Comparisons cho biết sự khác biệt cụ thể giữa các loại hình doanh nghiệp:
Kết quả cho thấy ngoại trừ sự chênh lệch giữa FDI và DNTN không có ý nghĩa thống kê (p > 0.05), tất cả các nhóm còn lại đều có sự khác biệt đáng kể về thu nhập.
Lưu ý quan trọng và khuyến nghị
Mở rộng phân tích ANOVA đa chiều
Nguyên tắc phân tích ANOVA hai chiều có thể được mở rộng thành nhiều chiều (factorial ANOVA). SPSS hỗ trợ phân tích ANOVA tối đa 5 chiều, mặc dù trong thực hành kinh tế lượng thường sử dụng 2-3 chiều. Cách thực hiện ANOVA ba chiều trở lên hoàn toàn tương tự ANOVA hai chiều.
- Kiểm tra giả thiết kỹ lưỡng: Luôn kiểm tra đầy đủ sáu giả thiết trước khi thực hiện phân tích
- Xử lý vi phạm giả thiết: Khi vi phạm phân phối chuẩn, có thể sử dụng biến đổi logarit
- Giải thích tương tác: Khi có tương tác có ý nghĩa, ưu tiên giải thích tương tác hơn hiệu ứng chính
- Cỡ mẫu cân bằng: Nên có cỡ mẫu tương đối cân bằng giữa các nhóm
Tổng kết
Phân tích ANOVA hai chiều là công cụ mạnh mẽ trong thực hành kinh tế lượng để nghiên cứu tác động đồng thời của hai yếu tố lên một biến kết quả. Qua ví dụ về thu nhập lao động theo giới tính và loại hình doanh nghiệp, chúng ta đã học cách:
- Thiết lập và thực hiện phân tích ANOVA hai chiều trong SPSS
- Kiểm tra các giả thiết cần thiết
- Giải thích kết quả về hiệu ứng chính và tương tác
- Sử dụng kiểm định Post Hoc để so sánh cặp
- Xử lý các vấn đề vi phạm giả thiết
Kết quả nghiên cứu cho thấy có sự tương tác có ý nghĩa giữa giới tính và loại hình doanh nghiệp trong việc quyết định thu nhập của người lao động, mở ra nhiều hướng nghiên cứu sâu hơn về bất bình đẳng thu nhập theo giới tính trong các ngành kinh tế khác nhau.
Điểm chính cần ghi nhớ:
- ANOVA hai chiều cho phép kiểm định đồng thời hai yếu tố và tương tác của chúng
- Tương tác có ý nghĩa chỉ ra rằng tác động của một yếu tố phụ thuộc vào mức độ của yếu tố kia
- Kiểm tra giả thiết là bước quan trọng để đảm bảo độ tin cậy của kết quả
- Đồ thị tương tác giúp hiểu rõ mô hình quan hệ giữa các biến
- Post Hoc test cung cấp thông tin chi tiết về sự khác biệt giữa các nhóm cụ thể
Phụ lục: Code tương đương cho các phần mềm khác
SPSS Syntax
SPSS Syntax (.sps file)
* Phân tích ANOVA hai chiều trong SPSS
* Kiểm tra giả thiết phân phối chuẩn
EXAMINE VARIABLES=lnearn BY gender section
/PLOT BOXPLOT STEMLEAF NPPLOT
/COMPARE GROUPS
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
* Thực hiện phân tích ANOVA hai chiều
UNIANOVA lnearn BY gender section
/METHOD=SSTYPE(3)
/INTERCEPT=INCLUDE
/PLOT=PROFILE(section*gender)
/EMMEANS=TABLES(gender)
/EMMEANS=TABLES(section)
/EMMEANS=TABLES(gender*section)
/PRINT=ETASQ DESCRIPTIVE HOMOGENEITY
/CRITERIA=ALPHA(.05)
/DESIGN=gender section gender*section
/POSTHOC=section(TUKEY).
Stata
Stata Code (.do file)
* Phân tích ANOVA hai chiều trong Stata
* Mở dữ liệu
use "vietlod.dta", clear
* Tạo biến logarit thu nhập
gen lnearn = ln(earn)
* Kiểm tra thống kê mô tả theo nhóm
bysort gender section: summarize lnearn
* Thực hiện phân tích ANOVA hai chiều
anova lnearn i.gender##i.section
* Kiểm định đồng nhất phương sai (Levene test)
robvar lnearn, by(gender section)
* Tính toán estimated marginal means
margins gender
margins section
margins gender#section
* Vẽ đồ thị tương tác
marginsplot, by(gender) ///
title("Tương tác giữa giới tính và loại hình doanh nghiệp") ///
xtitle("Loại hình doanh nghiệp") ///
ytitle("Log thu nhập dự đoán")
* Kiểm định Post Hoc cho biến section
pwcompare section, mcompare(tukey) effects
R Programming
R Code (.R file)
# Phân tích ANOVA hai chiều trong R
# Cài đặt các package cần thiết
if (!require(car)) install.packages("car")
if (!require(emmeans)) install.packages("emmeans")
if (!require(ggplot2)) install.packages("ggplot2")
library(car)
library(emmeans)
library(ggplot2)
# Đọc dữ liệu
data <- read.csv("vietlod.csv")
# Tạo biến logarit thu nhập
data$lnearn <- log(data$earn)
# Chuyển đổi biến thành factor
data$gender <- as.factor(data$gender)
data$section <- as.factor(data$section)
# Thống kê mô tả theo nhóm
aggregate(lnearn ~ gender + section, data = data,
FUN = function(x) c(mean = mean(x), sd = sd(x), n = length(x)))
# Thực hiện ANOVA hai chiều
model <- aov(lnearn ~ gender * section, data = data)
summary(model)
# Kiểm định đồng nhất phương sai (Levene test)
leveneTest(lnearn ~ gender * section, data = data)
# Estimated marginal means
emm <- emmeans(model, ~ gender * section)
summary(emm)
# Đồ thị tương tác
emmip(model, gender ~ section, CIs = TRUE) +
labs(title = "Tương tác giữa giới tính và loại hình doanh nghiệp",
x = "Loại hình doanh nghiệp",
y = "Log thu nhập dự đoán")
# Kiểm định Post Hoc
pairs(emmeans(model, ~ section), adjust = "tukey")
# Kiểm tra phân phối chuẩn của residuals
qqnorm(residuals(model))
qqline(residuals(model))
# Kiểm định Shapiro-Wilk cho residuals
shapiro.test(residuals(model))
Python
Python Code (.py file)
# Phân tích ANOVA hai chiều trong Python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from statsmodels.stats.anova import anova_lm
from statsmodels.formula.api import ols
from statsmodels.stats.multicomp import pairwise_tukeyhsd
import warnings
warnings.filterwarnings('ignore')
# Đọc dữ liệu
data = pd.read_csv('vietlod.csv')
# Tạo biến logarit thu nhập
data['lnearn'] = np.log(data['earn'])
# Loại bỏ giá trị missing
data = data.dropna(subset=['lnearn', 'gender', 'section'])
# Thống kê mô tả theo nhóm
desc_stats = data.groupby(['gender', 'section'])['lnearn'].agg(['mean', 'std', 'count'])
print("Thống kê mô tả theo nhóm:")
print(desc_stats)
# Tạo model ANOVA hai chiều
model = ols('lnearn ~ C(gender) + C(section) + C(gender):C(section)', data=data).fit()
# Bảng ANOVA
anova_table = anova_lm(model, typ=2)
print("\nBảng ANOVA hai chiều:")
print(anova_table)
# Kiểm định đồng nhất phương sai (Levene test)
from scipy.stats import levene
groups = []
for gender in data['gender'].unique():
for section in data['section'].unique():
group_data = data[(data['gender'] == gender) & (data['section'] == section)]['lnearn']
if len(group_data) > 0:
groups.append(group_data)
levene_stat, levene_p = levene(*groups)
print(f"\nKiểm định Levene: F = {levene_stat:.4f}, p = {levene_p:.4f}")
# Đồ thị tương tác
plt.figure(figsize=(10, 6))
for gender in data['gender'].unique():
subset = data[data['gender'] == gender]
means = subset.groupby('section')['lnearn'].mean()
plt.plot(means.index, means.values, marker='o', label=f'Giới tính: {gender}')
plt.xlabel('Loại hình doanh nghiệp')
plt.ylabel('Log thu nhập trung bình')
plt.title('Tương tác giữa giới tính và loại hình doanh nghiệp')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
# Kiểm định Post Hoc (Tukey HSD) cho biến section
tukey_result = pairwise_tukeyhsd(data['lnearn'], data['section'], alpha=0.05)
print("\nKiểm định Post Hoc (Tukey HSD) cho loại hình doanh nghiệp:")
print(tukey_result)
# Kiểm tra phân phối chuẩn của residuals
residuals = model.resid
shapiro_stat, shapiro_p = stats.shapiro(residuals[:5000]) # Giới hạn 5000 quan sát
print(f"\nKiểm định Shapiro-Wilk cho residuals: W = {shapiro_stat:.4f}, p = {shapiro_p:.4f}")
# Q-Q plot cho residuals
plt.figure(figsize=(8, 6))
stats.probplot(residuals, dist="norm", plot=plt)
plt.title("Q-Q Plot của Residuals")
plt.show()
Tài liệu tham khảo
- IBM SPSS Statistics Documentation: General Linear Model Procedures
- Montgomery, D. C. (2017). Design and Analysis of Experiments. John Wiley & Sons
- Field, A. (2018). Discovering Statistics Using IBM SPSS Statistics. SAGE Publications
- Nguyễn Đình Thọ (2013). Phương pháp nghiên cứu khoa học trong kinh doanh. NXB Lao động – Xã hội
- Hoàng Trọng & Chu Nguyễn Mộng Ngọc (2008). Phân tích dữ liệu nghiên cứu với SPSS. NXB Hồng Đức