Kiểm định Friedman – SPSS
Kiểm định Friedman trong thực hành kinh tế lượng với SPSS

Tóm tắt: Kiểm định Friedman là một phương pháp kiểm định phi tham số thay thế cho ANOVA lặp một chiều khi dữ liệu không thỏa mãn giả định phân phối chuẩn. Kiểm định này đặc biệt hữu ích trong thực hành kinh tế lượng khi phân tích dữ liệu thứ tự hoặc dữ liệu liên tục vi phạm giả định chuẩn hóa. Bài viết sẽ hướng dẫn chi tiết cách thực hiện kiểm định Friedman trên SPSS qua ví dụ thực tế về hiệu quả chương trình bán hàng.
Giới thiệu về kiểm định Friedman
Nội dung chính
Điểm mạnh của kiểm định Friedman trong thực hành kinh tế lượng là khả năng xử lý dữ liệu không tuân theo phân phối chuẩn, điều này thường xảy ra trong các nghiên cứu thực tế về kinh tế và kinh doanh.
Giả thiết của kiểm định Friedman
Để áp dụng kiểm định Friedman trong thực hành kinh tế lượng, dữ liệu cần thỏa mãn các giả thiết sau:
- Mỗi đối tượng được đo lường bởi ít nhất ba quan sát
- Các nhóm được chọn ngẫu nhiên từ tổng thể
- Biến phụ thuộc là biến thứ tự (thang đo Likert) hoặc biến liên tục. Tham khảo bài viết các loại thang đo trong phân tích dữ liệu
- Mẫu không cần thiết phải có phân phối chuẩn hóa
Giả thuyết H0 của kiểm định Friedman là: “trung bình của biến đo lường không có sự khác nhau giữa các nhóm của biến độc lập”
Xem thêm: kiểm định phi tham số
Ví dụ thực tế từ kinh tế Việt Nam
Bối cảnh nghiên cứu:
Để tìm hiểu tâm lý mua sắm của người tiêu dùng trong mảng điện thoại cao cấp (smartphone), giám đốc kinh doanh của hệ thống bán lẻ điện thoại A thực hiện chương trình bán hàng như sau tại 25 cửa hàng trong hệ thống:
- Tuần 1: Bán hàng đúng giá niêm yết
- Tuần 2: Bán hàng có chiết khấu (giảm giá) 5% trực tiếp trên những hóa đơn trên 8 triệu đồng
- Tuần 3: Bán hàng có quà tặng (tương ứng giá trị 5%) cho những hóa đơn trên 8 triệu đồng
Dữ liệu mẫu
Số liệu thu thập từ 25 cửa hàng được thể hiện trong file Friedman.
Tải file dữ liệu mẫuTrong nghiên cứu này:
Cấu trúc dữ liệu:
- Biến phụ thuộc: Số lượng điện thoại bán ra ở từng cửa hàng (chiếc điện thoại/tuần)
- Biến độc lập: Chương trình thực hiện (ba chương trình)
- Tên biến trong SPSS:
none
,discount
, vàgift
Câu hỏi nghiên cứu: Số lượng điện thoại bán ra ở các cửa hàng trong mỗi chương trình có khác nhau không?
Kiểm tra giả định phân phối chuẩn
Vì biến phụ thuộc của chúng ta là biến liên tục, về mặt lý thuyết có thể sử dụng kiểm định ANOVA lặp một chiều. Tuy nhiên, trong thực hành kinh tế lượng, cần xem xét dữ liệu có thỏa mãn giả định phân phối chuẩn hay không.
Kiểm tra phân phối chuẩn trên SPSS
Để kiểm tra tính chuẩn hóa của dữ liệu trong thực hành kinh tế lượng, ta có hai cách phổ biến như sau (Xem thêm bài phân phối chuẩn hóa):
- Thứ nhất: Quy tắc kinh nghiệm – khoảng giá trị của hai thông số độ trôi (Skewness) và độ nhọn (Kurtosis) có chứa giá trị 0
- Thứ hai: Sử dụng kiểm định Kolmogorov-Smirnov (K-S) hoặc Shapiro-Wilk (S-W): chấp nhận giả thuyết có nghĩa dữ liệu thỏa mãn phân phối chuẩn
SPSS có thể thực hiện cả hai cách trên và kết quả thực hiện được trình bày như sau:
Với kết quả này, dù theo tiêu chí kiểm định nào thì luôn có ít nhất một biến không thỏa mãn giả định phân phối chuẩn. Do vậy, trong thực hành kinh tế lượng, kiểm định ANOVA lặp một chiều không phải là một lựa chọn sử dụng phù hợp.
Lý do chọn kiểm định Friedman:
Khi dữ liệu vi phạm giả định phân phối chuẩn, chúng ta cần sử dụng kiểm định thay thế – đó là kiểm định Friedman. Đây là lựa chọn tối ưu trong thực hành kinh tế lượng cho trường hợp này.
Hướng dẫn thực hành chi tiết
Kiểm định Friedman được thực hiện trên SPSS qua các bước sau:
Vào menu Analyze → Nonparametric Tests → Legacy Dialogs → K Related Samples…
Bước 2: Thiết lập biến và tham số
Cửa sổ Tests for Several Related Samples mở ra. Thực hiện các thao tác sau:
- Đưa ba biến none, discount và gift vào khung Test Variables
- Thiết lập nút Statistics… như hình bên dưới
- Đảm bảo tùy chọn Friedman trong phần Test Type đã được chọn
Lưu ý về thiết lập Statistics:
Nếu kiểu biến đo lường là liên tục thì bạn có thể chọn cả Quartiles hoặc Descriptives ở nút Statistics…. Ngược lại, nếu kiểu biến đo lường là thứ tự thì lựa chọn Quartiles sẽ có nhiều ý nghĩa hơn trong thực hành kinh tế lượng.
Bước 3: Thực hiện kiểm định
Bấm Continue để về cửa sổ Tests for Several Related Samples và bấm OK để thực hiện kiểm định.
Giải thích kết quả
Kết quả kiểm định Friedman trong SPSS bao gồm ba bảng chính:
Bảng thống kê mô tả (Descriptive Statistics)
Bảng Descriptive Statistics cung cấp thông tin thống kê mô tả về giá trị trung bình, độ lệch chuẩn, GTLN, GTNN và các khoảng phân vị của biến đo lường ở ba nhóm. Phân vị 50% chính là giá trị trung vị (median).
Phân tích kết quả Descriptive Statistics:
Theo kết quả, số lượng sản phẩm smartphone trung bình được bán ở các cửa hàng trong trường hợp có quà tặng là cao nhất, tiếp đến là chương trình giảm giá. Đây là thông tin quan trọng trong thực hành kinh tế lượng để hiểu xu hướng dữ liệu.
Bảng xếp hạng (Ranks)
Bảng Ranks cho biết thông tin về thứ hạng trung bình của ba biến theo kiểm định Friedman. Đây là cơ sở tính toán cho thống kê Friedman.
Bảng thống kê kiểm định (Test Statistics)
Bảng Test Statistics cho biết giá trị thống kê Chi bình phương của kiểm định Friedman.
Kết luận từ Test Statistics:
Với chi bình phương = 6.515 và Asymp. Sig. = 0.038 (< 0.05), chúng ta bác bỏ giả thuyết H₀ ở mức ý nghĩa 5%. Điều này cho thấy có sự khác nhau có ý nghĩa thống kê về số lượng sản phẩm trung bình bán ra ở các cửa hàng trong ba chương trình bán hàng.
Lưu ý quan trọng
Hạn chế của kiểm định Friedman
Kiểm định Friedman chỉ cho biết có sự khác nhau giữa các nhóm nhưng không chỉ ra cụ thể nhóm nào khác nhau với nhóm nào. Trong thực hành kinh tế lượng, để xác định chương trình nào mang lại hiệu quả cao hơn, cần thực hiện thêm các kiểm định so sánh cặp (post-hoc tests).
- Kiểm định Friedman phù hợp khi dữ liệu vi phạm giả định phân phối chuẩn
- Kết quả kiểm định chỉ cho biết có sự khác nhau, không chỉ ra cụ thể nhóm nào khác nhau
- Cần kết hợp với kiểm định post-hoc để có kết luận chi tiết hơn
- Trong trường hợp này, có thể sử dụng kiểm định dấu hạng Wilcoxon để so sánh từng cặp
Ứng dụng trong thực hành kinh tế lượng
Kiểm định Friedman có nhiều ứng dụng quan trọng trong thực hành kinh tế lượng:
- Nghiên cứu thị trường: So sánh hiệu quả các chiến lược marketing
- Đánh giá chính sách: Phân tích tác động của các chính sách kinh tế
- Nghiên cứu tài chính: So sánh hiệu suất đầu tư của các danh mục
- Kinh tế vi mô: Phân tích hành vi tiêu dùng qua các thời kỳ
Tổng kết
Kiểm định Friedman là một công cụ quan trọng trong thực hành kinh tế lượng, đặc biệt hữu ích khi dữ liệu không thỏa mãn giả định phân phối chuẩn của các kiểm định tham số. Qua ví dụ thực tế về hiệu quả chương trình bán hàng điện thoại, chúng ta đã thấy cách áp dụng kiểm định này trong SPSS và cách giải thích kết quả một cách khoa học.
Kết quả cho thấy các chương trình bán hàng có tác động khác nhau đến doanh số, trong đó chương trình quà tặng có vẻ hiệu quả nhất. Tuy nhiên, để có kết luận chính xác hơn, cần thực hiện thêm các kiểm định so sánh cặp.
Các điểm quan trọng cần nhớ:
- Kiểm định Friedman thay thế cho ANOVA lặp khi vi phạm giả định chuẩn hóa
- Phù hợp với dữ liệu thứ tự hoặc liên tục không chuẩn hóa
- Yêu cầu ít nhất ba lần đo lường trên cùng đối tượng
- Kết quả chỉ cho biết có sự khác nhau, cần kiểm định thêm để xác định cụ thể
- Là công cụ quan trọng trong thực hành kinh tế lượng thực tế
Phụ lục
SPSS Syntax
SPSS Syntax (.sps)
* Kiểm định Friedman trong SPSS
* Tác giả: Thực hành kinh tế lượng
* Mô tả: So sánh hiệu quả 3 chương trình bán hàng
* Mở file dữ liệu
GET FILE='/data/friedman.sav'.
* Kiểm tra phân phối chuẩn trước khi quyết định sử dụng kiểm định phi tham số
EXAMINE VARIABLES=none discount gift
/PLOT BOXPLOT STEMLEAF NPPLOT
/COMPARE GROUP
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
* Thực hiện kiểm định Friedman
NPAR TESTS
/FRIEDMAN = none discount gift
/STATISTICS DESCRIPTIVES QUARTILES
/MISSING LISTWISE.
* Kiểm định so sánh cặp (post-hoc) nếu cần
NPAR TESTS
/WILCOXON = none WITH discount (PAIRED)
/WILCOXON = none WITH gift (PAIRED)
/WILCOXON = discount WITH gift (PAIRED)
/MISSING ANALYSIS.
Stata Code
Stata Code (.do)
* Kiểm định Friedman trong Stata
* Tác giả: Thực hành kinh tế lượng
* Mô tả: So sánh hiệu quả 3 chương trình bán hàng
* Mở file dữ liệu
use "/data/friedman.dta", clear
* Kiểm tra phân phối chuẩn
swilk none discount gift
sktest none discount gift
* Thống kê mô tả
summarize none discount gift
tabstat none discount gift, statistics(mean sd min max p25 p50 p75) columns(statistics)
* Chuyển đổi dữ liệu từ wide sang long format cho kiểm định Friedman
reshape long, i(id) j(program) string
rename _value sales
* Thực hiện kiểm định Friedman
friedman sales, by(program) blocks(id)
* Kiểm định so sánh cặp Wilcoxon signed-rank
use "/data/friedman.dta", clear
signrank none = discount
signrank none = gift
signrank discount = gift
R Code
R Code (.R)
# Kiểm định Friedman trong R
# Tác giả: Thực hành kinh tế lượng
# Mô tả: So sánh hiệu quả 3 chương trình bán hàng
# Cài đặt và load thư viện cần thiết
if (!require(foreign)) install.packages("foreign")
if (!require(reshape2)) install.packages("reshape2")
if (!require(ggplot2)) install.packages("ggplot2")
library(foreign)
library(reshape2)
library(ggplot2)
# Đọc dữ liệu từ file SPSS
data <- read.spss("/data/friedman.sav", to.data.frame = TRUE)
# Kiểm tra phân phối chuẩn
shapiro.test(data$none)
shapiro.test(data$discount)
shapiro.test(data$gift)
# Thống kê mô tả
summary(data[c("none", "discount", "gift")])
apply(data[c("none", "discount", "gift")], 2,
function(x) c(mean=mean(x), sd=sd(x),
min=min(x), max=max(x),
q25=quantile(x, 0.25),
median=median(x),
q75=quantile(x, 0.75)))
# Chuyển đổi dữ liệu sang long format
data_long <- melt(data,
measure.vars = c("none", "discount", "gift"),
variable.name = "program",
value.name = "sales")
# Thực hiện kiểm định Friedman
friedman_result <- friedman.test(sales ~ program | Var1, data = data_long)
print(friedman_result)
# Kiểm định so sánh cặp Wilcoxon
wilcox.test(data$none, data$discount, paired = TRUE)
wilcox.test(data$none, data$gift, paired = TRUE)
wilcox.test(data$discount, data$gift, paired = TRUE)
# Tạo boxplot cho trực quan hóa
ggplot(data_long, aes(x = program, y = sales)) +
geom_boxplot() +
labs(title = "So sánh hiệu quả các chương trình bán hàng",
x = "Chương trình", y = "Số lượng bán ra") +
theme_minimal()
Python Code
Python Code (.py)
# Kiểm định Friedman trong Python
# Tác giả: Thực hành kinh tế lượng
# Mô tả: So sánh hiệu quả 3 chương trình bán hàng
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import friedmanchisquare, wilcoxon, shapiro
# Đọc dữ liệu
data = pd.read_spss('/data/friedman.sav')
# Kiểm tra phân phối chuẩn
print("Kiểm định Shapiro-Wilk:")
print(f"None: {shapiro(data['none'])}")
print(f"Discount: {shapiro(data['discount'])}")
print(f"Gift: {shapiro(data['gift'])}")
# Thống kê mô tả
print("\nThống kê mô tả:")
print(data[['none', 'discount', 'gift']].describe())
# Thực hiện kiểm định Friedman
friedman_stat, friedman_p = friedmanchisquare(data['none'],
data['discount'],
data['gift'])
print(f"\nKiểm định Friedman:")
print(f"Chi-square statistic: {friedman_stat:.3f}")
print(f"P-value: {friedman_p:.3f}")
# Kiểm định so sánh cặp Wilcoxon
print("\nKiểm định so sánh cặp Wilcoxon:")
wilcox_none_discount = wilcoxon(data['none'], data['discount'])
wilcox_none_gift = wilcoxon(data['none'], data['gift'])
wilcox_discount_gift = wilcoxon(data['discount'], data['gift'])
print(f"None vs Discount: statistic={wilcox_none_discount.statistic:.3f}, p-value={wilcox_none_discount.pvalue:.3f}")
print(f"None vs Gift: statistic={wilcox_none_gift.statistic:.3f}, p-value={wilcox_none_gift.pvalue:.3f}")
print(f"Discount vs Gift: statistic={wilcox_discount_gift.statistic:.3f}, p-value={wilcox_discount_gift.pvalue:.3f}")
# Tạo visualization
plt.figure(figsize=(10, 6))
data_melted = pd.melt(data, value_vars=['none', 'discount', 'gift'],
var_name='program', value_name='sales')
sns.boxplot(data=data_melted, x='program', y='sales')
plt.title('So sánh hiệu quả các chương trình bán hàng')
plt.xlabel('Chương trình')
plt.ylabel('Số lượng bán ra')
plt.show()
# Tính toán rank trung bình (như SPSS)
def calculate_friedman_ranks(data):
ranks = data.rank(axis=1)
return ranks.mean()
ranks_mean = calculate_friedman_ranks(data[['none', 'discount', 'gift']])
print(f"\nRank trung bình:")
print(ranks_mean)
Tài liệu tham khảo
- Conover, W. J. (1999). Practical Nonparametric Statistics. John Wiley & Sons.
- Field, A. (2018). Discovering Statistics Using IBM SPSS Statistics. SAGE Publications.
- Hollander, M., Wolfe, D. A., & Chicken, E. (2013). Nonparametric Statistical Methods. John Wiley & Sons.
- IBM Corporation. (2021). IBM SPSS Statistics Base 28. IBM Corp.
- Siegel, S., & Castellan, N. J. (1988). Nonparametric Statistics for the Behavioral Sciences. McGraw-Hill.