
Tóm tắt: Kiểm định McNemar là công cụ quan trọng trong thực hành kinh tế lượng để phân tích sự thay đổi của biến nhị phân trên cùng đối tượng qua hai thời điểm. Phương pháp này thay thế kiểm định t-test cặp đôi khi biến phụ thuộc có dạng nhị phân, sử dụng SPSS với menu Nonparametric Tests và áp dụng phân phối nhị thức để đánh giá ý nghĩa thống kê của sự thay đổi.
Giới thiệu về kiểm định McNemar
Nội dung chính
Trong thực hành kinh tế lượng, khi nghiên cứu sự thay đổi của một hiện tượng kinh tế hoặc xã hội qua thời gian, chúng ta thường sử dụng kiểm định t-test cặp đôi cho biến liên tục. Tuy nhiên, trong trường hợp biến đo lường dạng nhị phân, kiểm định phù hợp được sử dụng để đánh giá sự khác nhau giữa hai nhóm liên quan là kiểm định McNemar.
Kiểm định này đặc biệt hữu ích trong các nghiên cứu kinh tế về hành vi tiêu dùng, quyết định đầu tư, hoặc đánh giá tác động của các chính sách kinh tế trên cùng một nhóm đối tượng trước và sau khi có sự can thiệp.
Giả thiết của kiểm định McNemar
Kiểm định McNemar được thực hiện dựa trên các giả thiết quan trọng sau:
- Bạn có một biến phụ thuộc dạng nhị phân và một biến độc lập có hai nhóm liên quan. Chẳng hạn, biến phụ thuộc liên quan đến chất lượng cảm nhận (tốt/xấu); kết quả (đậu/rớt); lựa chọn (sản phẩm A/sản phẩm B)
- 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
- Chọn mẫu ngẫu nhiên từ tổng thể nghiên cứu
Ví dụ thực tế trong nghiên cứu kinh tế hành vi
Để minh họa ứng dụng của kiểm định McNemar trong thực hành kinh tế lượng, chúng ta xem xét một nghiên cứu về kinh tế hành vi liên quan đến quyết định tiêu dùng sản phẩm có hại cho sức khỏe.
Bối cảnh nghiên cứu: Một nhà nghiên cứu muốn đánh giá sự can thiệp của hình ảnh trực quan lên quyết định hút thuốc lá. Đây là vấn đề quan trọng trong bối cảnh kinh tế xã hội Việt Nam, nơi chi phí y tế do thuốc lá gây ra ngày càng tăng cao.
Thiết kế nghiên cứu: Một mẫu khảo sát gồm 50 người bao gồm 25 người hút thuốc và 25 người không hút thuốc. Tất cả các đối tượng tham gia khảo sát sẽ theo dõi một đoạn phim về tác động của thuốc lá lên ung thư phổi. Hai tuần sau, các đối tượng này sẽ được yêu cầu trả lời có thay đổi tình trạng hút thuốc trước đó hay không.
Vì vậy, các đối tượng này được phân thành hai nhóm: hút thuốc và không hút thuốc ở hai thời điểm trước và sau có sự can thiệp. Cùng một đối tượng sẽ được khảo sát hai lần nên chúng ta có mẫu quan sát cặp đôi. Chúng ta cũng có một biến nhị phân loại trừ lẫn nhau (có hút thuốc và không hút thuốc).
Xem thêm: kiểm định phi tham số
Dữ liệu mẫu và thiết lập
Sử dụng dữ liệu thực hành McNemar để thực hiện phân tích. Ở đây, biến đo lường là tình trạng hút thuốc lá với hai giá trị “có hút thuốc” và “không hút thuốc”. Biến độc lập với hai nhóm liên quan là nhóm trước can thiệp “Before” và sau can thiệp “After”.
Tải về dữ liệu mẫuBefore
: Tình trạng hút thuốc trước can thiệp (0 = không hút, 1 = có hút)After
: Tình trạng hút thuốc sau can thiệp (0 = không hút, 1 = có hút)ID
: Mã số định danh đối tượng nghiên cứu
Hướng dẫn thực hành chi tiết trong SPSS
Quá trình thực hành kiểm định McNemar trên SPSS được thực hiện theo các bước sau:
Vào menu Analyze → Nonparametric Tests → Legacy Dialogs → 2 Related Samples…
Bước 2: Thiết lập biến và lựa chọn kiểm định
Cửa sổ Two-Related-Samples Tests mở ra và thực hiện các thiết lập sau:
- Đưa biến Before và biến After vào ô Test Pairs
- Bỏ chọn Wilcoxon và đảm bảo rằng tùy chọn McNemar trong phần Test Type đã được chọn
- Thiết lập nút Options nếu cần thiết
Bước 3: Thực hiện kiểm định
Bấm Continue để trở về cửa sổ chính và bấm OK để tiến hành thực hiện kiểm định McNemar.
Giải thích kết quả kiểm định McNemar
Sau khi chạy phân tích, SPSS sẽ xuất ra các bảng kết quả quan trọng cho thực hành kinh tế lượng:
Bảng Crosstabs – Phân tích mô tả
Bảng Crosstabs sẽ giải thích và cho thấy một cách nhìn trực quan về vấn đề nghiên cứu:
- Trước can thiệp: 25 người hút thuốc và 25 người không hút thuốc
- Sau can thiệp: 14 người hút thuốc và 36 người không hút thuốc
- 16 người trong nhóm hút thuốc trước đó đã bỏ thuốc sau 2 tuần
- 5 người hút thuốc mới từ nhóm 25 người không hút thuốc trước đó
Phân tích sơ bộ: Có một tín hiệu tích cực từ tác động trực quan của hình ảnh đến quyết định hút thuốc ở nhóm đối tượng tham gia khảo sát. Tuy nhiên, tác động này có tính chất hai chiều. Câu hỏi đặt ra là: tỷ lệ người không hút thuốc tăng lên (hay tỷ lệ người hút thuốc giảm đi) trong tổng thể sau tác động trực quan của hình ảnh có ý nghĩa thống kê hay không?
Bảng Test Statistics – Kết quả kiểm định
Kết quả kiểm định McNemar ở bảng Test Statistics sẽ cho kết luận cụ thể về ý nghĩa thống kê:
Diễn giải kết quả trong bối cảnh kinh tế
Kết quả kiểm định McNemar với p-value = 0.027 < 0.05 cho thấy:
- Có đủ bằng chứng thống kê để bác bỏ giả thiết H0 (không có sự khác biệt)
- Sự can thiệp bằng hình ảnh có tác động có ý nghĩa lên quyết định hút thuốc
- Tỷ lệ người bỏ thuốc sau can thiệp cao hơn có ý nghĩa so với tỷ lệ người bắt đầu hút thuốc mới
- Chiến lược can thiệp này có thể được áp dụng trong các chương trình y tế công cộng
Lưu ý và cảnh báo quan trọng
- Dữ liệu phải là cặp đôi
- Biến phụ thuộc có dạng nhị phân
- Các quan sát độc lập giữa các đối tượng
- Mẫu được chọn ngẫu nhiên từ tổng thể
- Sử dụng kiểm định McNemar cho dữ liệu không phải cặp đôi
- Áp dụng cho biến phụ thuộc có nhiều hơn hai mức
- Không kiểm tra tính độc lập của các quan sát
- Diễn giải sai ý nghĩa của giá trị p
So sánh với các kiểm định khác
Trong thực hành kinh tế lượng, việc lựa chọn kiểm định phù hợp là rất quan trọng:
- Kiểm định McNemar: Cho biến nhị phân, dữ liệu cặp đôi
- Kiểm định t-test cặp đôi: Cho biến liên tục, dữ liệu cặp đôi
- Kiểm định Chi-square: Cho biến nhị phân, dữ liệu độc lập
- Kiểm định Wilcoxon: Cho biến thứ tự, dữ liệu cặp đôi
Tổng kết
Kiểm định McNemar là công cụ mạnh mẽ trong thực hành kinh tế lượng để phân tích sự thay đổi của biến nhị phân trên cùng đối tượng qua thời gian. Phương pháp này đặc biệt hữu ích trong các nghiên cứu kinh tế hành vi, đánh giá chính sách, và nghiên cứu thị trường.
Trong ví dụ nghiên cứu về tác động của hình ảnh đến quyết định hút thuốc, kết quả cho thấy can thiệp có hiệu quả tích cực và có ý nghĩa thống kê. Điều này có thể hướng dẫn cho việc thiết kế các chương trình can thiệp tương tự trong thực tế.
Việc thành thạo kiểm định McNemar trong SPSS giúp sinh viên và nhà nghiên cứu có thêm công cụ phân tích quan trọng cho các nghiên cứu có dữ liệu nhị phân cặp đôi.
Key Points:
- Kiểm định McNemar thay thế t-test cặp đôi cho biến nhị phân
- Áp dụng cho dữ liệu cặp đôi với biến phụ thuộc có hai mức
- Sử dụng phân phối nhị thức để tính toán p-value
- Phù hợp cho nghiên cứu trước – sau (before-after) trong kinh tế
- Yêu cầu mẫu ngẫu nhiên và các quan sát độc lập
- Kết quả giá trị p < 0.05 chỉ ra sự thay đổi có ý nghĩa thống kê
Phụ lục
SPSS Syntax tương đương
SPSS Syntax (.sps)
* Kiểm định McNemar trong SPSS
* Đọc dữ liệu và chuẩn bị
GET FILE='/data/mcnemar.sav'.
DATASET NAME DataSet1 WINDOW=FRONT.
* Mô tả dữ liệu cơ bản
DESCRIPTIVES VARIABLES=Before After
/STATISTICS=MEAN STDDEV MIN MAX.
* Tạo bảng chéo để quan sát dữ liệu
CROSSTABS
/TABLES=Before BY After
/FORMAT=AVALUE TABLES
/CELLS=COUNT ROW COLUMN TOTAL
/COUNT ROUND CELL.
* Thực hiện kiểm định McNemar
NPAR TESTS
/MCNEMAR=Before WITH After (PAIRED)
/MISSING ANALYSIS.
* Thêm thông tin chi tiết về kiểm định
NPAR TESTS
/MCNEMAR=Before WITH After (PAIRED)
/STATISTICS DESCRIPTIVES
/MISSING ANALYSIS.
Stata code
Stata Code (.do)
* Kiểm định McNemar trong Stata
* Đọc và chuẩn bị dữ liệu
use "/data/mcnemar.dta", clear
* Mô tả dữ liệu cơ bản
describe
summarize Before After
* Tạo bảng chéo để quan sát dữ liệu
tabulate Before After, chi2
* Thực hiện kiểm định McNemar
mcci a b c d
* Trong đó: a, b, c, d là các ô trong bảng 2x2
* Hoặc sử dụng lệnh symmetry test
symmetry Before After
* Kiểm định McNemar với immediate command
* Giả sử có 9 người không thay đổi (0,0), 5 người chuyển từ 0 sang 1
* 16 người chuyển từ 1 sang 0, và 20 người không thay đổi (1,1)
mcci 9 5 16 20
* Tính toán odds ratio
mcci 9 5 16 20, or
* Kiểm tra tính chất của dữ liệu
tabulate Before After, exact
R code
R Code (.R)
# Kiểm định McNemar trong R
# Cài đặt và tải các package cần thiết
install.packages(c("foreign", "exact2x2"))
library(foreign)
library(exact2x2)
# Đọc dữ liệu SPSS
data <- read.spss("/data/mcnemar.sav", to.data.frame = TRUE)
# Mô tả dữ liệu cơ bản
summary(data)
str(data)
# Tạo bảng chéo
cross_table <- table(data$Before, data$After)
print(cross_table)
# Thực hiện kiểm định McNemar
mcnemar_result <- mcnemar.test(cross_table)
print(mcnemar_result)
# Kiểm định McNemar với correction
mcnemar_corrected <- mcnemar.test(cross_table, correct = TRUE)
print(mcnemar_corrected)
# Kiểm định chính xác (exact test)
library(exact2x2)
mcnemar_exact <- mcnemar.exact(cross_table)
print(mcnemar_exact)
# Tính toán odds ratio
odds_ratio <- (cross_table[1,2])/(cross_table[2,1])
cat("Odds Ratio:", odds_ratio, "\n")
# Visualize kết quả
library(ggplot2)
library(reshape2)
# Chuyển đổi dữ liệu để vẽ biểu đồ
data_long <- melt(as.matrix(cross_table))
names(data_long) <- c("Before", "After", "Count")
# Vẽ biểu đồ
ggplot(data_long, aes(x = Before, y = After, fill = Count)) +
geom_tile() +
geom_text(aes(label = Count), color = "white", size = 4) +
scale_fill_gradient(low = "lightblue", high = "darkblue") +
labs(title = "McNemar Test Cross-tabulation",
x = "Before Intervention",
y = "After Intervention") +
theme_minimal()
Python code
Python Code (.py)
# Kiểm định McNemar trong Python
import pandas as pd
import numpy as np
import pyreadstat
from scipy.stats import chi2
from statsmodels.stats.contingency_tables import mcnemar
import matplotlib.pyplot as plt
import seaborn as sns
# Đọc dữ liệu SPSS
df, meta = pyreadstat.read_sav("/data/mcnemar.sav")
# Mô tả dữ liệu cơ bản
print(df.describe())
print(df.info())
# Tạo bảng chéo
cross_table = pd.crosstab(df['Before'], df['After'], margins=True)
print("Cross-tabulation:")
print(cross_table)
# Thực hiện kiểm định McNemar
# Tạo contingency table cho statsmodels
contingency_table = pd.crosstab(df['Before'], df['After'])
# Kiểm định McNemar
result = mcnemar(contingency_table.values, exact=False)
print(f"McNemar test statistic: {result.statistic}")
print(f"p-value: {result.pvalue}")
# Kiểm định McNemar chính xác
result_exact = mcnemar(contingency_table.values, exact=True)
print(f"McNemar exact test p-value: {result_exact.pvalue}")
# Tính toán odds ratio
b = contingency_table.iloc[0, 1] # Before=0, After=1
c = contingency_table.iloc[1, 0] # Before=1, After=0
odds_ratio = b / c if c != 0 else np.inf
print(f"Odds Ratio: {odds_ratio}")
# Visualize kết quả
plt.figure(figsize=(8, 6))
sns.heatmap(contingency_table, annot=True, fmt='d', cmap='Blues',
cbar_kws={'label': 'Count'})
plt.title('McNemar Test Cross-tabulation')
plt.xlabel('After Intervention')
plt.ylabel('Before Intervention')
plt.tight_layout()
plt.show()
# Tạo function để thực hiện kiểm định McNemar
def mcnemar_test_manual(table):
"""
Thực hiện kiểm định McNemar thủ công
"""
b = table[0, 1] # discordant pairs (0,1)
c = table[1, 0] # discordant pairs (1,0)
# Tính toán test statistic
if (b + c) < 25:
# Sử dụng exact test cho mẫu nhỏ
from scipy.stats import binom
p_value = 2 * min(binom.cdf(min(b, c), b + c, 0.5),
1 - binom.cdf(min(b, c), b + c, 0.5))
else:
# Sử dụng chi-square approximation
test_stat = (abs(b - c) - 1)**2 / (b + c) # with continuity correction
p_value = 1 - chi2.cdf(test_stat, 1)
return test_stat, p_value
# Áp dụng function
test_stat, p_val = mcnemar_test_manual(contingency_table.values)
print(f"Manual calculation - Test statistic: {test_stat}")
print(f"Manual calculation - p-value: {p_val}")
Tài liệu tham khảo
- IBM SPSS Statistics Documentation: Nonparametric Tests
- Agresti, A. (2018). An Introduction to Categorical Data Analysis. Wiley.
- McNemar, Q. (1947). Note on the sampling error of the difference between correlated proportions or percentages. Psychometrika, 12(2), 153-157.
- Siegel, S., & Castellan, N. J. (1988). Nonparametric Statistics for the Behavioral Sciences. McGraw-Hill.
- Sheskin, D. J. (2020). Handbook of Parametric and Nonparametric Statistical Procedures. Chapman and Hall/CRC.
- Conover, W. J. (1999). Practical Nonparametric Statistics. Wiley.