Kiểm định dấu hạng Wilcoxon
Hướng dẫn phân tích và đọc kết quả kiểm định dấu hạng Wilcoxon trong SPSS

Tóm tắt: Kiểm định McNemar là công cụ quan trọng trong thực hành kinh tế lượng khi cần so sánh tỷ lệ của biến nhị phân giữa hai thời điểm khác nhau trên cùng một nhóm đối tượng. Bài viết này hướng dẫn chi tiết cách thực hiện kiểm định McNemar trên SPSS thông qua giao diện người dùng và cung cấp code tương ứng cho Stata, R và Python.
Giới thiệu về kiểm định McNemar
Nội dung chính
- Giới thiệu về kiểm định McNemar
- Giả thiết của kiểm định McNemar
- Ví dụ thực tế từ kinh tế Việt Nam
- Dữ liệu mẫu và chuẩn bị
- Hướng dẫn thực hành chi tiết trên SPSS
- Giải thích kết quả kiểm định
- Lưu ý và cảnh báo quan trọng
- Ứng dụng trong nghiên cứu kinh tế
- Tổng kết
- Phụ lục: Code thực hiện trên các phần mềm khác
- Tài liệu tham khảo
Trong nghiên cứu kinh tế lượng, chúng ta thường gặp những tình huống cần đánh giá tác động của một chính sách hoặc can thiệp lên hành vi của cùng một nhóm đối tượng tại hai thời điểm khác nhau. Khi biến phụ thuộc là nhị phân, kiểm định t-test cặp đôi truyền thống không còn phù hợp. Thay vào đó, kiểm định McNemar được sử dụng để phân tích sự thay đổi trong tỷ lệ của biến nhị phân.
Ví dụ điển hình trong kinh tế Việt Nam: một nhà nghiên cứu muốn đánh giá tác động của chương trình giáo dục tài chính đến quyết định tiết kiệm của người dân. Trước khi tham gia chương trình, 60% người dân có thói quen tiết kiệm định kỳ. Sau 6 tháng tham gia chương trình, tỷ lệ này thay đổi như thế nào? Kiểm định McNemar sẽ giúp xác định liệu sự thay đổi này có ý nghĩa thống kê hay không.
Giả thiết của kiểm định McNemar
Để áp dụng kiểm định McNemar một cách chính xác trong thực hành kinh tế lượng, cần đảm bảo ba giả thiết cơ bản sau:
- Biến nhị phân: Bạn có một biến phụ thuộc dạng nhị phân và một biến độc lập có 2 nhóm liên quan. Trong kinh tế, điều này có thể là quyết định mua/không mua, đầu tư/không đầu tư, tham gia/không tham gia thị trường lao động.
- Tính loại trừ: Hai nhóm của biến phụ thuộc phải loại trừ lẫn nhau và mỗi đối tượng chỉ có thể nằm ở một trong hai nhóm này.
- Mẫu ngẫu nhiên: Dữ liệu được thu thập thông qua chọn mẫu ngẫu nhiên từ tổng thể mục tiêu.
Ví dụ thực tế từ kinh tế Việt Nam
Để minh họa rõ ràng ứng dụng của kiểm định McNemar, chúng ta sẽ phân tích một ví dụ cụ thể về tác động của chiến dịch truyền thông đến quyết định hút thuốc lá:
Một viện nghiên cứu y tế công cộng tại TP.HCM thực hiện nghiên cứu đánh giá hiệu quả của chiến dịch truyền thông trực quan về tác hại của thuốc lá. Nghiên cứu được thiết kế như sau:
- Đối tượng nghiên cứu: 50 người tham gia, gồm 25 người có thói quen hút thuốc và 25 người không hút thuốc
- Can thiệp: Tất cả đối tượng xem một bộ phim tài liệu về tác động của thuốc lá đến ung thư phổi
- Thời gian theo dõi: Khảo sát lại tình trạng hút thuốc sau 2 tuần
- Biến quan sát: Tình trạng hút thuốc (có/không) tại hai thời điểm trước và sau can thiệp
Đây là một ví dụ điển hình của thiết kế nghiên cứu dọc với dữ liệu cặp đôi, rất phù hợp để áp dụng kiểm định McNemar trong thực hành kinh tế lượng.
Dữ liệu mẫu và chuẩn bị
Trong hướng dẫn này, chúng ta sử dụng file dữ liệu mẫu được thiết kế đặc biệt cho kiểm định McNemar:
Tải xuống dữ liệu McNemar.savCấu trúc dữ liệu bao gồm:
- Biến “Before”: Tình trạng hút thuốc trước can thiệp (0 = Không hút thuốc, 1 = Có hút thuốc)
- Biến “After”: Tình trạng hút thuốc sau can thiệp (0 = Không hút thuốc, 1 = Có hút thuốc)
- Số quan sát: 50 cá nhân được theo dõi tại hai thời điểm
Hướng dẫn thực hành chi tiết trên SPSS
Quá trình thực hiện kiểm định McNemar trên SPSS được thực hiện thông qua giao diện người dùng với các bước chi tiết như sau:
Đầu tiên, mở file dữ liệu mcnemar.sav
trong SPSS, sau đó truy cập menu theo đường dẫn:
Analyze → Nonparametric Tests → Legacy Dialogs → 2 Related Samples…
Bước 2: Thiết lập biến và tùy chọn kiểm định
Cửa sổ Two-Related-Samples Tests sẽ mở ra. Thực hiện các thao tác sau:
- Kéo biến Before từ danh sách biến bên trái vào ô Test Pairs
- Kéo biến After vào ô Test Pairs để tạo thành cặp (Before – After)
- Trong phần Test Type, bỏ chọn Wilcoxon
- Đảm bảo tùy chọn McNemar được chọn
Bước 3: Thực hiện kiểm định
Sau khi hoàn tất thiết lập:
- Bấm Continue để xác nhận cấu hình
- Trở về cửa sổ chính và bấm OK để thực hiện kiểm định
- SPSS sẽ xử lý dữ liệu và hiển thị kết quả trong cửa sổ Output
Giải thích kết quả kiểm định
Kết quả kiểm định McNemar trong SPSS bao gồm hai bảng chính cung cấp thông tin quan trọng cho việc ra quyết định thống kê:
Bảng Crosstabulation (Bảng chéo)
Bảng Crosstabs cung cấp cái nhìn tổng quan về sự phân bố dữ liệu:
- Trước can thiệp: 25 người hút thuốc, 25 người không hút thuốc
- Sau can thiệp: 14 người hút thuốc, 36 người không hút thuốc
- Chuyển đổi tích cực: 16 người từ nhóm hút thuốc chuyển sang không hút thuốc
- Chuyển đổi tiêu cực: 5 người từ nhóm không hút thuốc chuyển sang hút thuốc
Bảng Test Statistics (Thống kê kiểm định)
Bảng Test Statistics cung cấp kết quả chính của kiểm định McNemar:
- Giá trị kiểm định: Dựa trên phân phối nhị thức
- Mức ý nghĩa: Exact Sig. (2-tailed) = 0.027
- Kết luận: Có sự khác biệt có ý nghĩa thống kê ở mức α = 0.05
Lưu ý và cảnh báo quan trọng
Khi thực hiện kiểm định McNemar trong thực hành kinh tế lượng, cần lưu ý các điểm sau:
Về kích thước mẫu
Về giải thích kết quả
- Nhân quả vs tương quan: Kiểm định McNemar chỉ cho biết có sự thay đổi có ý nghĩa thống kê, không chứng minh mối quan hệ nhân quả
- Hiệu ứng ngẫu nhiên: Cần kiểm soát các yếu tố nhiễu có thể ảnh hưởng đến kết quả giữa hai thời điểm đo
- Ý nghĩa thực tiễn: Ý nghĩa thống kê không đồng nghĩa với ý nghĩa thực tiễn trong kinh tế
Các giả định cần kiểm tra
– Không kiểm tra tính độc lập của các quan sát
– Bỏ qua dữ liệu trống (missing data) trong phân tích
– Nhầm lẫn giữa kiểm định McNemar và Chi-square test
– Không báo cáo đầy đủ thông tin về kích thước hiệu ứng
Ứng dụng trong nghiên cứu kinh tế
Kiểm định McNemar có nhiều ứng dụng quan trọng trong các lĩnh vực kinh tế:
Kinh tế vi mô
- Hành vi tiêu dùng: Đánh giá thay đổi trong quyết định mua sắm trước và sau các chiến dịch marketing
- Quyết định đầu tư: Phân tích sự thay đổi trong thái độ đầu tư của doanh nghiệp nhỏ
- Lựa chọn sản phẩm: So sánh sở thích người tiêu dùng giữa hai thời điểm
Kinh tế vĩ mô
- Chính sách công: Đánh giá hiệu quả của các chính sách kinh tế-xã hội
- Thị trường lao động: Phân tích tác động của đào tạo nghề đến tình trạng việc làm
- Tài chính công: Đánh giá hiệu quả của các chương trình hỗ trợ tài chính
Tổng kết
Kiểm định McNemar là một công cụ mạnh mẽ và linh hoạt trong thực hành kinh tế lượng, đặc biệt phù hợp với nghiên cứu đánh giá tác động của các chính sách hoặc can thiệp. Phương pháp này cho phép các nhà nghiên cứu:
- Đánh giá sự thay đổi trong hành vi hoặc thái độ của cùng một nhóm đối tượng
- Kiểm soát tốt hơn các yếu tố nhiễu so với nghiên cứu cắt ngang
- Áp dụng cho dữ liệu nhị phân mà không yêu cầu giả thiết phân phối chuẩn
- Đưa ra kết luận có độ tin cậy cao về hiệu quả của các can thiệp
Tuy nhiên, việc giải thích kết quả cần thận trọng và phải đặt trong bối cảnh cụ thể của từng nghiên cứu. Kết hợp với các phương pháp phân tích khác, kiểm định McNemar góp phần quan trọng vào việc xây dựng cơ sở bằng chứng vững chắc cho các quyết định chính sách kinh tế.
Key Points:
- Kiểm định McNemar dành cho biến nhị phân với dữ liệu cặp đôi
- Thuộc nhóm kiểm định phi tham số, không yêu cầu phân phối chuẩn
- Phù hợp đánh giá tác động của chính sách hoặc can thiệp
- Kết quả p-value < 0.05 cho thấy có sự thay đổi có ý nghĩa thống kê
- Cần kiểm tra giả định và báo cáo đầy đủ thông tin về kích thước hiệu ứng
Phụ lục: Code thực hiện trên các phần mềm khác
Để hỗ trợ người đọc có thể thực hiện kiểm định McNemar trên nhiều phần mềm khác nhau, phần này cung cấp code tương ứng cho SPSS Syntax, Stata, R và Python.
SPSS Syntax
SPSS Syntax (.sps file)
* Kiểm định McNemar trong SPSS Syntax
* Tác giả: Thực hành kinh tế lượng
* Ngày: 2025
* Mở file dữ liệu
GET FILE='/data/mcnemar.sav'.
* Thực hiện kiểm định McNemar
NPAR TESTS
/MCNEMAR = Before WITH After (PAIRED)
/MISSING ANALYSIS
/STATISTICS DESCRIPTIVES.
* Tạo bảng chéo để xem phân bố dữ liệu
CROSSTABS
/TABLES=Before BY After
/FORMAT=AVALUE TABLES
/STATISTICS=MCNEMAR
/CELLS=COUNT EXPECTED ROW COLUMN TOTAL.
Stata
Stata (.do file)
* Kiểm định McNemar trong Stata
* Tác giả: Thực hành kinh tế lượng
* Ngày: 2025
* Mở file dữ liệu (chuyển đổi từ SPSS sang Stata format)
use "mcnemar.dta", clear
* Mô tả dữ liệu
describe Before After
summarize Before After
* Tạo bảng chéo
tabulate Before After
* Thực hiện kiểm định McNemar
mcci a b c d
* Trong đó: a, b, c, d là các giá trị từ bảng chéo 2x2
* Hoặc sử dụng lệnh symmetry cho kiểm định McNemar
symmetry Before After
* Kiểm định chính xác cho mẫu nhỏ
mcc Before After, exact
* Xuất kết quả
display "Kiểm định McNemar hoàn tất"
display "Kiểm tra p-value để đưa ra kết luận"
R
R Script (.R file)
# Kiểm định McNemar trong R
# Tác giả: Thực hành kinh tế lượng
# Ngày: 2025
# Cài đặt và load các package cần thiết
if (!require(foreign)) install.packages("foreign")
if (!require(exact2x2)) install.packages("exact2x2")
library(foreign)
library(exact2x2)
# Đọc dữ liệu từ file SPSS
data <- read.spss("mcnemar.sav", to.data.frame = TRUE)
# Kiểm tra cấu trúc dữ liệu
str(data)
head(data)
# Tạo bảng chéo
table_cross <- table(data$Before, data$After)
print("Bảng chéo:")
print(table_cross)
# Thực hiện kiểm định McNemar
mcnemar_result <- mcnemar.test(table_cross)
print("Kết quả kiểm định McNemar:")
print(mcnemar_result)
# Kiểm định chính xác với correction
mcnemar_exact <- mcnemar.test(table_cross, correct = FALSE)
print("Kiểm định McNemar không hiệu chính:")
print(mcnemar_exact)
# Tính toán thêm các thống kê
n_discord <- table_cross[1,2] + table_cross[2,1]
cat("Số quan sát không concordant:", n_discord, "\n")
# Vẽ biểu đồ minh họa (tùy chọn)
par(mfrow=c(1,2))
barplot(c(sum(data$Before), sum(data$After)),
names.arg = c("Trước", "Sau"),
main = "So sánh tỷ lệ hút thuốc",
ylab = "Số lượng")
# Biểu đồ mosaic
mosaicplot(table_cross, main = "Bảng chéo McNemar")
Python
Python Script (.py file)
# Kiểm định McNemar trong Python
# Tác giả: Thực hành kinh tế lượng
# Ngày: 2025
import pandas as pd
import numpy as np
from scipy.stats import mcnemar
from statsmodels.stats.contingency_tables import mcnemar as mcnemar_sm
import matplotlib.pyplot as plt
import seaborn as sns
# Đọc dữ liệu từ file SPSS
try:
data = pd.read_spss('mcnemar.sav')
except:
# Nếu không có pyreadstat, tạo dữ liệu mẫu
print("Tạo dữ liệu mẫu...")
np.random.seed(42)
data = pd.DataFrame({
'Before': np.random.choice([0, 1], 50, p=[0.5, 0.5]),
'After': np.random.choice([0, 1], 50, p=[0.6, 0.4])
})
# Kiểm tra dữ liệu
print("Thông tin dữ liệu:")
print(data.describe())
print("\nMẫu dữ liệu:")
print(data.head())
# Tạo bảng chéo
contingency_table = pd.crosstab(data['Before'], data['After'])
print("\nBảng chéo:")
print(contingency_table)
# Thực hiện kiểm định McNemar với scipy
statistic, p_value = mcnemar(contingency_table.values, exact=True)
print(f"\nKết quả kiểm định McNemar (scipy):")
print(f"Test statistic: {statistic}")
print(f"P-value: {p_value}")
# Thực hiện kiểm định McNemar với statsmodels (nhiều tùy chọn hơn)
result_sm = mcnemar_sm(contingency_table.values, exact=True)
print(f"\nKết quả kiểm định McNemar (statsmodels):")
print(f"Test statistic: {result_sm.statistic}")
print(f"P-value: {result_sm.pvalue}")
# Tính toán các chỉ số bổ sung
b = contingency_table.iloc[0, 1] # False -> True
c = contingency_table.iloc[1, 0] # True -> False
total_changes = b + c
print(f"\nThống kê bổ sung:")
print(f"Số người chuyển từ 0 sang 1: {b}")
print(f"Số người chuyển từ 1 sang 0: {c}")
print(f"Tổng số thay đổi: {total_changes}")
# Vẽ biểu đồ minh họa
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# Biểu đồ so sánh trước và sau
before_sum = data['Before'].sum()
after_sum = data['After'].sum()
axes[0].bar(['Trước can thiệp', 'Sau can thiệp'],
[before_sum, after_sum],
color=['lightcoral', 'lightblue'])
axes[0].set_title('So sánh tỷ lệ hút thuốc')
axes[0].set_ylabel('Số lượng người hút thuốc')
# Heatmap của bảng chéo
sns.heatmap(contingency_table, annot=True, fmt='d',
cmap='Blues', ax=axes[1])
axes[1].set_title('Bảng chéo Before vs After')
axes[1].set_xlabel('After')
axes[1].set_ylabel('Before')
plt.tight_layout()
plt.show()
# Kết luận
alpha = 0.05
if p_value < alpha:
print(f"\nKết luận: Với p-value = {p_value:.4f} < α = {alpha}") print("Bác bỏ giả thuyết H0. Có sự thay đổi có ý nghĩa thống kê.") else: print(f"\nKết luận: Với p-value = {p_value:.4f} >= α = {alpha}")
print("Không bác bỏ giả thuyết H0. Không có sự thay đổi có ý nghĩa thống kê.")
Tài liệu tham khảo
Để nghiên cứu sâu hơn về kiểm định McNemar và ứng dụng trong thực hành kinh tế lượng, độc giả có thể tham khảo các tài liệu sau:
- IBM SPSS Statistics Documentation: Hướng dẫn chi tiết về các kiểm định phi tham số trong SPSS
- Gujarati, D. N. (2022): “Basic Econometrics” – Chương về kiểm định phi tham số
- Wooldridge, J. M. (2020): “Introductory Econometrics” – Ứng dụng trong nghiên cứu chính sách
- StataCorp (2023): “Stata User’s Guide” – Phần về kiểm định McNemar và symmetry
- R Core Team (2023): “R Documentation” – Package exact2x2 và stats