KTL cơ bảnPhân tích hồi quy

Phân tích hiệp phương sai – ANCOVA

Hướng dẫn thực hành phân tích hiệp phương sai với SPSS

Tóm tắt: Phân tích hiệp phương sai (ANCOVA) là phương pháp mở rộng của phân tích phương sai một chiều, cho phép kiểm soát thống kê các biến nhiễu trong thực hành kinh tế lượng. Bài viết hướng dẫn chi tiết cách thực hiện ANCOVA trong SPSS, từ thiết lập mô hình đến diễn giải kết quả và kiểm chứng các giả thuyết cần thiết cho phân tích chính xác.

Giới thiệu về phân tích hiệp phương sai

Phân tích hiệp phương sai (ANCOVA) là trường hợp mở rộng của phân tích phương sai một chiều khi bao gồm một hay nhiều biến liên tục để giải thích biến kết quả. Trong thực hành kinh tế lượng, ANCOVA được sử dụng để:

  • Kiểm chứng sự khác nhau về giá trị trung bình giữa hai hay nhiều nhóm độc lập
  • Kiểm soát thống kê đối với biến nhiễu (confounding variable)
  • Tăng độ chính xác của phân tích bằng cách loại bỏ biến động không mong muốn
  • Cải thiện sức mạnh thống kê của kiểm định

Ví dụ minh họa về ứng dụng ANCOVA

Để hiểu rõ hơn về ý nghĩa của phương pháp phân tích hiệp phương sai, chúng ta tìm hiểu thông qua ví dụ thực tế sau:

Tình huống nghiên cứu: Bạn muốn đánh giá hiệu quả của hai chương trình cai thuốc lá A và B. Bạn chọn ngẫu nhiên 150 người hút thuốc và phân chia thành ba nhóm:

  • Nhóm kiểm soát: 50 người hút thuốc như thường lệ
  • Nhóm điều trị A: 50 người tham gia chương trình điều trị A
  • Nhóm điều trị B: 50 người tham gia chương trình điều trị B

Bạn đo lường số lượng thuốc lá được hút ở hai thời điểm: trước và sau khi thực hiện chương trình can thiệp.

Vấn đề với phân tích ANOVA thông thường: Nếu chỉ sử dụng phân tích phương sai một chiều để so sánh lượng thuốc hút sau can thiệp giữa ba nhóm, kết quả có thể bị ảnh hưởng bởi sự khác biệt về mức độ hút thuốc ban đầu giữa các nhóm. Đây chính là lý do cần sử dụng ANCOVA để kiểm soát yếu tố này.

Ví dụ thứ hai – Nghiên cứu về cholesterol:

Một nhà nghiên cứu quan tâm đến việc xác định chương trình tập luyện cường độ thấp hay cường độ cao hiệu quả hơn trong việc giảm nồng độ cholesterol ở nam giới tuổi trung niên. Cả hai chương trình đều được thiết kế trong 6 tuần với cùng lượng calo tiêu hao mỗi ngày.

Trong trường hợp này:

  • Biến phụ thuộc: Nồng độ cholesterol sau can thiệp (After)
  • Biến độc lập: Loại chương trình tập luyện (Group)
  • Hiệp biến: Nồng độ cholesterol trước can thiệp (Before)

Xem thêm: Kiểm định tham số (Parametric tests)

Giả thiết của phân tích hiệp phương sai

Để sử dụng phân tích hiệp phương sai trong thực hành kinh tế lượng, dữ liệu phải thỏa mãn các giả thiết sau:

  1. Tính chất biến: Biến phụ thuộc và hiệp biến phải là biến liên tục (dạng khoảng, tỷ lệ)
  2. Biến độc lập: Là biến danh mục (từ 2 mức trở lên) với giá trị dạng số hoặc chuỗi
  3. Tính độc lập: Các quan sát trong mỗi nhóm và giữa các nhóm độc lập với nhau
  4. Không có điểm dị biệt: Dữ liệu không chứa các điểm dị biệt (outliers)
  5. Phân phối chuẩn: Biến phụ thuộc ở mỗi nhóm có phân phối chuẩn hoặc xấp xỉ chuẩn
  6. Đồng nhất phương sai: Có sự đồng nhất về phương sai của biến phụ thuộc (kiểm định Levene)
  7. Mối quan hệ tuyến tính: Hiệp biến có quan hệ tuyến tính với biến phụ thuộc ở các mức của biến độc lập
  8. Đồng nhất hệ số ước lượng: Không có sự tương tác giữa hiệp biến và các biến giải thích
Lưu ý quan trọng: Việc vi phạm các giả thiết có thể dẫn đến kết quả sai lệch. Đặc biệt, giả thiết về sự đồng nhất hệ số ước lượng rất quan trọng – nếu vi phạm, ANCOVA có thể không phù hợp.

Dữ liệu mẫu và ví dụ thực tế

Trong hướng dẫn này, chúng ta sử dụng bộ dữ liệu nghiên cứu về hiệu quả của các chương trình tập luyện trong việc giảm cholesterol.

Tải dữ liệu ANCOVA

Mô tả dữ liệu:

  • After: Nồng độ cholesterol sau can thiệp (mg/dL) – biến phụ thuộc
  • Group: Loại chương trình (1 = đối chứng, 2 = cường độ thấp, 3 = cường độ cao) – biến độc lập
  • Before: Nồng độ cholesterol trước can thiệp (mg/dL) – hiệp biến

Hướng dẫn thực hành chi tiết

Bước 1: Truy cập menu phân tích

Trong SPSS, điều hướng đến menu phân tích hiệp phương sai:

AnalyzeGeneral Linear ModelUnivariate…

Giao diện menu Analyze - General Linear Model - Univariate trong SPSS

Bước 2: Thiết lập biến phân tích

Cửa sổ Univariate mở ra, thực hiện các thao tác sau:

  • Đưa biến After vào khung Dependent Variable:
  • Đưa biến Group vào khung Fixed Factor(s):
  • Đưa biến Before vào khung Covariate(s):

Cửa sổ Univariate với biến After, Group và Before được thiết lập

Ghi chú: Khi đưa biến vào khung Covariate(s), nút Post hoc sẽ bị vô hiệu hóa. Để so sánh giữa các nhóm, chúng ta sẽ sử dụng công cụ Contrasts của SPSS.

Bước 3: Cấu hình Contrasts

Click nút Contrasts để thiết lập so sánh giữa các nhóm:

  • Chọn Simple từ menu dropdown tại mục Contrast:
  • Chọn First tại mục Reference Category để sử dụng nhóm đối chứng làm tham chiếu

Cửa sổ Univariate Contrasts với thiết lập Simple và First

Click Continue để quay về cửa sổ chính.

Bước 4: Thiết lập tùy chọn hiển thị

Click nút Options… để cấu hình các tùy chọn bổ sung:

  • Chuyển biến Group vào khung Display Means for:
  • Chọn Compare main effects và chọn Bonferroni từ menu điều chỉnh
  • Chọn Descriptive statistics, Parameter estimatesHomogeneity tests

Cửa sổ Options với các tùy chọn thống kê mô tả và kiểm định được chọn

Click Continue để quay về.

Bước 5: Thực thi phân tích

Click OK để bắt đầu phân tích hiệp phương sai.

Đọc và diễn giải kết quả

Thống kê mô tả

Bảng Descriptive Statistics tóm tắt nồng độ cholesterol sau can thiệp theo từng nhóm:

Bảng Descriptive Statistics hiển thị mean, standard deviation và N cho mỗi nhóm

Kết quả cho thấy xu hướng giảm cholesterol: nhóm tập luyện cường độ cao có mức cholesterol thấp nhất, tiếp theo là nhóm cường độ thấp, và cao nhất là nhóm đối chứng.

So sánh ANOVA và ANCOVA

Để minh họa ưu điểm của ANCOVA, chúng ta so sánh kết quả với phân tích phương sai một chiều thông thường:

Bảng Tests of Between-Subjects Effects cho ANOVA thông thường

Kết quả ANOVA thông thường: Biến Group không có ý nghĩa thống kê (Sig = 0.158), cho thấy không có sự khác biệt về cholesterol giữa các nhóm.

Bảng Tests of Between-Subjects Effects cho ANCOVA với hiệp biến Before

Kết quả ANCOVA: Sau khi kiểm soát nồng độ cholesterol ban đầu, biến Group trở nên có ý nghĩa thống kê (Sig = 0.039 < 0.05). Điều này chứng tỏ tầm quan trọng của việc kiểm soát biến nhiễu trong thực hành kinh tế lượng.

Ghi nhớ: ANCOVA đã phát hiện ra sự khác biệt có ý nghĩa mà ANOVA thông thường không thể nhận ra, nhờ việc kiểm soát tác động của nồng độ cholesterol ban đầu.

Ước lượng tham số

Bảng Parameter Estimates cung cấp thông tin chi tiết về hệ số ước lượng:

Bảng Parameter Estimates hiển thị hệ số, standard error và significance

Diễn giải:

  • Nhóm tập luyện cường độ cao có cholesterol thấp hơn đáng kể so với nhóm đối chứng
  • Có mối quan hệ tích cực giữa cholesterol ban đầu và cholesterol sau can thiệp
  • Những người có cholesterol ban đầu cao thường vẫn có cholesterol cao sau can thiệp

So sánh từng cặp nhóm

Bảng Pairwise Comparisons hiển thị sự khác biệt cụ thể giữa các nhóm:

Bảng Pairwise Comparisons hiển thị sự khác biệt giữa từng cặp nhóm

Ở mức ý nghĩa 5%, kết quả cho thấy nhóm đối chứng có cholesterol cao hơn có ý nghĩa so với nhóm tập luyện cường độ cao. Tuy nhiên, chưa có bằng chứng đủ mạnh về sự khác biệt giữa nhóm cường độ thấp và các nhóm khác.

Kiểm chứng giả thuyết

Kiểm tra đồng nhất phương sai

Kiểm định Levene với giả thuyết H0: phương sai của biến phụ thuộc bằng nhau giữa các nhóm.

Kết quả kiểm định Levene's Test of Equality of Error Variances

Với Sig = 0.105 > 0.05, chúng ta chấp nhận giả thuyết H0, nghĩa là có sự đồng nhất về phương sai.

Kiểm tra tính tuyến tính

Bảng Univariate Tests kiểm tra mối quan hệ tuyến tính giữa hiệp biến và biến phụ thuộc:

Bảng Univariate Tests cho hiệp biến Before

Với Sig = 0.039 < 0.05, có bằng chứng về mối quan hệ tuyến tính có ý nghĩa giữa hiệp biến và biến phụ thuộc.

Kiểm tra đồng nhất hệ số ước lượng

Để kiểm tra giả thuyết này, cần thiết lập nút Model… với các bước:

  • Chọn Custom
  • Thêm biến Group vào Model
  • Thêm biến Before vào Model
  • Thêm biến tương tác Group*Before vào Model

Cửa sổ Model với Custom model bao gồm Group, Before và Group*Before

Kết quả sau khi chạy lại:

Bảng Tests of Between-Subjects Effects với biến tương tác Group*Before

Phát hiện vi phạm giả thuyết: Biến tương tác Group*Before có ý nghĩa thống kê (Sig = 0.001), cho thấy giả thuyết về sự đồng nhất hệ số ước lượng bị vi phạm. Điều này có thể ảnh hưởng đến độ tin cậy của kết quả ANCOVA.

Lưu ý quan trọng trong thực hành

Những điểm cần chú ý khi thực hiện ANCOVA:

  • Lựa chọn hiệp biến: Hiệp biến nên có tương quan mạnh với biến phụ thuộc nhưng không tương quan với biến độc lập
  • Số lượng hiệp biến: Không nên sử dụng quá nhiều hiệp biến so với kích thước mẫu
  • Kiểm tra giả thuyết: Phải kiểm tra đầy đủ các giả thuyết trước khi diễn giải kết quả
  • Diễn giải thận trọng: Khi vi phạm giả thuyết đồng nhất hệ số, cần cân nhắc sử dụng phương pháp khác
Lỗi thường gặp:

  • Sử dụng hiệp biến không phù hợp hoặc có tương quan cao với biến độc lập
  • Bỏ qua kiểm tra giả thuyết về tương tác
  • Diễn giải nhân quả khi chỉ có bằng chứng tương quan
  • Không kiểm tra tính tuyến tính của mối quan hệ hiệp biến-biến phụ thuộc

Ứng dụng trong nghiên cứu kinh tế

ANCOVA có nhiều ứng dụng quan trọng trong thực hành kinh tế lượng:

  • Nghiên cứu chính sách: Đánh giá hiệu quả can thiệp trong khi kiểm soát các yếu tố nền
  • Phân tích thị trường: So sánh hiệu quả marketing giữa các nhóm khách hàng
  • Nghiên cứu giáo dục: Đánh giá phương pháp giảng dạy với kiểm soát năng lực ban đầu
  • Y tế công cộng: So sánh hiệu quả điều trị với kiểm soát tình trạng sức khỏe ban đầu

Tổng kết

Phân tích hiệp phương sai là công cụ mạnh mẽ trong thực hành kinh tế lượng, cho phép nhà nghiên cứu kiểm soát các biến nhiễu để có được kết quả chính xác hơn. Thông qua hướng dẫn này, chúng ta đã nắm vững:

  • Quy trình thực hiện ANCOVA trong SPSS từ A đến Z
  • Cách thiết lập và diễn giải các thành phần của mô hình
  • Phương pháp kiểm chứng các giả thuyết quan trọng
  • Cách nhận biết và xử lý các vi phạm giả thuyết
  • Ứng dụng thực tế trong nghiên cứu kinh tế và xã hội

Key Points:

  • ANCOVA kết hợp ưu điểm của ANOVA và hồi quy tuyến tính
  • Kiểm soát biến nhiễu giúp tăng độ chính xác và sức mạnh thống kê
  • Giả thuyết đồng nhất hệ số là quan trọng nhất và thường bị bỏ qua
  • Hiệp biến phù hợp phải tương quan với biến phụ thuộc nhưng không với biến độc lập
  • Kết quả chỉ đáng tin cậy khi tất cả giả thuyết được thỏa mãn

Việc thành thạo ANCOVA sẽ giúp các nhà nghiên cứu có công cụ phân tích mạnh mẽ để đưa ra những kết luận chính xác và đáng tin cậy trong thực hành kinh tế lượng.

1. Khái niệm sự tương tác không bao giờ tồn tại giữa các biến giải thích và biến phụ thuộc hoặc giữa các mức giá trị của cùng một biến giải thích.

Phụ lục: Code syntax cho các phần mềm thống kê

SPSS Syntax

SPSS Syntax (.sps)


* Phân tích hiệp phương sai (ANCOVA) với SPSS
* Tác giả: Hướng dẫn thực hành kinh tế lượng

* Thống kê mô tả cơ bản
DESCRIPTIVES VARIABLES=After Before BY Group
  /STATISTICS=MEAN STDDEV MIN MAX.

* Phân tích hiệp phương sai chính
UNIANOVA After BY Group WITH Before
  /METHOD=SSTYPE(3)
  /INTERCEPT=INCLUDE
  /PRINT=DESCRIPTIVE PARAMETER HOMOGENEITY
  /CRITERIA=ALPHA(.05)
  /DESIGN=Group Before.

* So sánh từng cặp với điều chỉnh Bonferroni
UNIANOVA After BY Group WITH Before
  /EMMEANS=TABLES(Group) WITH(Before=MEAN) COMPARE ADJ(BONFERRONI)
  /PRINT=DESCRIPTIVE PARAMETER.

* Kiểm tra giả thuyết đồng nhất hệ số (tương tác)
UNIANOVA After BY Group WITH Before
  /METHOD=SSTYPE(3)
  /INTERCEPT=INCLUDE
  /PRINT=PARAMETER
  /CRITERIA=ALPHA(.05)
  /DESIGN=Group Before Group*Before.

* Kiểm tra tính tuyến tính bằng đồ thị scatter
GRAPH
  /SCATTERPLOT(BIVAR)=Before WITH After BY Group
  /MISSING=LISTWISE.

* Kiểm tra phân phối chuẩn của residuals
UNIANOVA After BY Group WITH Before
  /SAVE=RESID
  /PRINT=DESCRIPTIVE.

EXAMINE VARIABLES=RES_1
  /PLOT NPPLOT
  /STATISTICS DESCRIPTIVES
  /CINTERVAL 95
  /MISSING LISTWISE
  /NOTOTAL.

Stata Commands

Stata Commands (.do)


* Phân tích hiệp phương sai (ANCOVA) trong Stata
* Sử dụng General Linear Model

* Tải và mô tả dữ liệu
use "ancova_data.dta", clear
describe After Before Group
summarize After Before, detail

* Thống kê mô tả theo nhóm
bysort Group: summarize After Before

* Kiểm tra tương quan giữa các biến
corr After Before
bysort Group: corr After Before

* Thực hiện ANCOVA
anova After Group Before

* Mô hình tương đương với regress
regress After i.Group Before

* So sánh các nhóm (post-hoc)
margins i.Group, at(Before=`r(mean)')
marginsplot

* Kiểm tra giả thuyết đồng nhất hệ số (interaction)
regress After i.Group##c.Before
test 2.Group#c.Before 3.Group#c.Before

* Kiểm tra đồng nhất phương sai (Levene test)
robvar After, by(Group)

* Vẽ đồ thị scatter để kiểm tra tính tuyến tính
scatter After Before, by(Group) || lfit After Before, by(Group)

* Kiểm tra phân phối chuẩn của residuals
regress After i.Group Before
predict residuals, residuals
histogram residuals, normal
qnorm residuals

* Kiểm tra điểm dị biệt
regress After i.Group Before
predict leverage, leverage
predict cook, cooksd
list if cook > 4/e(N)

* Estimated marginal means
margins Group, at(Before=`r(mean)')

R Script

R Script (.R)


# Phân tích hiệp phương sai (ANCOVA) với R
# Sử dụng các gói car, emmeans và ggplot2

# Tải các thư viện cần thiết
library(car)
library(emmeans)
library(ggplot2)
library(dplyr)
library(broom)

# Đọc dữ liệu
data <- read.csv("ancova_data.csv")
data$Group <- as.factor(data$Group) str(data) # Thống kê mô tả summary(data) data %>% 
  group_by(Group) %>%
  summarise(
    n = n(),
    mean_after = mean(After),
    sd_after = sd(After),
    mean_before = mean(Before),
    sd_before = sd(Before)
  )

# Vẽ đồ thị khám phá dữ liệu
ggplot(data, aes(x = Before, y = After, color = Group)) +
  geom_point() +
  geom_smooth(method = "lm") +
  labs(title = "Mối quan hệ giữa Before và After theo Group")

# Boxplot để kiểm tra outliers
ggplot(data, aes(x = Group, y = After)) +
  geom_boxplot() +
  labs(title = "Phân phối After theo Group")

# Thực hiện ANCOVA
ancova_model <- aov(After ~ Group + Before, data = data)
summary(ancova_model)

# Mô hình tương đương với lm
lm_model <- lm(After ~ Group + Before, data = data)
summary(lm_model)

# Kiểm tra các giả thuyết
# 1. Đồng nhất phương sai (Levene test)
leveneTest(After ~ Group, data = data)

# 2. Phân phối chuẩn của residuals
shapiro.test(residuals(ancova_model))

# 3. Tính tuyến tính - vẽ đồ thị residuals vs fitted
plot(ancova_model, which = 1)

# 4. Q-Q plot cho phân phối chuẩn
plot(ancova_model, which = 2)

# 5. Kiểm tra điểm dị biệt
plot(ancova_model, which = 4)

# Kiểm tra giả thuyết đồng nhất hệ số (interaction)
interaction_model <- lm(After ~ Group * Before, data = data)
anova(lm_model, interaction_model)

# Estimated Marginal Means
emm <- emmeans(ancova_model, ~ Group)
print(emm)

# So sánh từng cặp với điều chỉnh Bonferroni
pairwise <- pairs(emm, adjust = "bonferroni")
print(pairwise)

# Vẽ đồ thị estimated marginal means
plot(emm) + 
  labs(title = "Estimated Marginal Means với 95% CI")

# Tính effect size (eta squared)
effectsize::eta_squared(ancova_model)

# Báo cáo kết quả chi tiết
anova_table <- anova(ancova_model)
print(anova_table)

# Confidence intervals cho các hệ số
confint(lm_model)

Python Script

Python Script (.py)


# Phân tích hiệp phương sai (ANCOVA) với Python
# Sử dụng scipy, statsmodels và seaborn

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
from statsmodels.stats.multicomp import pairwise_tukeyhsd
from statsmodels.stats.diagnostic import het_breuschpagan
import statsmodels.api as sm

# Đọc dữ liệu
data = pd.read_csv('ancova_data.csv')
data['Group'] = data['Group'].astype('category')
print(data.info())
print(data.describe())

# Thống kê mô tả theo nhóm
desc_stats = data.groupby('Group').agg({
    'After': ['count', 'mean', 'std'],
    'Before': ['mean', 'std']
}).round(3)
print("Thống kê mô tả theo nhóm:")
print(desc_stats)

# Visualization
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# Scatter plot cho mối quan hệ Before vs After
sns.scatterplot(data=data, x='Before', y='After', hue='Group', ax=axes[0,0])
sns.regplot(data=data, x='Before', y='After', scatter=False, ax=axes[0,0])
axes[0,0].set_title('Mối quan hệ Before vs After')

# Box plot cho After theo Group
sns.boxplot(data=data, x='Group', y='After', ax=axes[0,1])
axes[0,1].set_title('Phân phối After theo Group')

# Histogram cho Before
sns.histplot(data=data, x='Before', hue='Group', ax=axes[1,0])
axes[1,0].set_title('Phân phối Before theo Group')

# Correlation matrix
corr_matrix = data[['After', 'Before']].corr()
sns.heatmap(corr_matrix, annot=True, ax=axes[1,1])
axes[1,1].set_title('Ma trận tương quan')

plt.tight_layout()
plt.show()

# Thực hiện ANCOVA
model = ols('After ~ C(Group) + Before', data=data).fit()
anova_table = anova_lm(model, typ=2)
print("\nKết quả ANCOVA:")
print(anova_table)

# Tóm tắt mô hình
print("\nTóm tắt mô hình:")
print(model.summary())

# Kiểm tra các giả thuyết
print("\n=== KIỂM TRA GIẢ THUYẾT ===")

# 1. Kiểm tra đồng nhất phương sai (Levene test)
from scipy.stats import levene

groups = [group['After'].values for name, group in data.groupby('Group')]
levene_stat, levene_p = levene(*groups)
print(f"Levene test: statistic = {levene_stat:.4f}, p-value = {levene_p:.4f}")

# 2. Kiểm tra phân phối chuẩn của residuals
residuals = model.resid
shapiro_stat, shapiro_p = stats.shapiro(residuals)
print(f"Shapiro-Wilk test: statistic = {shapiro_stat:.4f}, p-value = {shapiro_p:.4f}")

# 3. Vẽ đồ thị diagnostic
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# Residuals vs Fitted
fitted = model.fittedvalues
axes[0,0].scatter(fitted, residuals)
axes[0,0].axhline(y=0, color='red', linestyle='--')
axes[0,0].set_xlabel('Fitted values')
axes[0,0].set_ylabel('Residuals')
axes[0,0].set_title('Residuals vs Fitted')

# Q-Q plot
stats.probplot(residuals, dist="norm", plot=axes[0,1])
axes[0,1].set_title('Q-Q Plot')

# Histogram của residuals
axes[1,0].hist(residuals, bins=20, edgecolor='black')
axes[1,0].set_xlabel('Residuals')
axes[1,0].set_ylabel('Frequency')
axes[1,0].set_title('Histogram of Residuals')

# Scale-Location plot
axes[1,1].scatter(fitted, np.sqrt(np.abs(residuals)))
axes[1,1].set_xlabel('Fitted values')
axes[1,1].set_ylabel('√|Residuals|')
axes[1,1].set_title('Scale-Location Plot')

plt.tight_layout()
plt.show()

# 4. Kiểm tra tương tác (đồng nhất hệ số)
interaction_model = ols('After ~ C(Group) * Before', data=data).fit()
interaction_anova = anova_lm(interaction_model, typ=2)
print("\nKiểm tra tương tác:")
print(interaction_anova)

# So sánh mô hình có và không có tương tác
print("\nSo sánh mô hình:")
print(anova_lm(model, interaction_model))

# Estimated Marginal Means (thủ công)
mean_before = data['Before'].mean()
group_means = []

for group in data['Group'].cat.categories:
    # Tính predicted value cho mỗi group tại mean của Before
    temp_data = pd.DataFrame({
        'Group': [group],
        'Before': [mean_before]
    })
    temp_data['Group'] = temp_data['Group'].astype('category')
    predicted = model.predict(temp_data)
    group_means.append(predicted[0])

emm_df = pd.DataFrame({
    'Group': data['Group'].cat.categories,
    'EMM': group_means
})
print("\nEstimated Marginal Means:")
print(emm_df)

# Post-hoc comparisons (Bonferroni)
# Tính confidence intervals cho EMM
conf_int = model.conf_int()
print("\nConfidence Intervals:")
print(conf_int)

# Effect size (eta squared)
ss_effect = anova_table.loc['C(Group)', 'sum_sq']
ss_total = anova_table['sum_sq'].sum()
eta_squared = ss_effect / ss_total
print(f"\nEta squared cho Group: {eta_squared:.4f}")

# Tóm tắt kết quả
print("\n=== TÓM TẮT KẾT QUẢ ===")
print(f"F-statistic cho Group: {anova_table.loc['C(Group)', 'F']:.4f}")
print(f"p-value cho Group: {anova_table.loc['C(Group)', 'PR(>F)']:.4f}")
print(f"R-squared: {model.rsquared:.4f}")
print(f"Adjusted R-squared: {model.rsquared_adj:.4f}")

Tài liệu tham khảo

  • Field, A. (2018). Discovering Statistics Using IBM SPSS Statistics (5th ed.). SAGE Publications.
  • Hair, J. F., Black, W. C., Babin, B. J., & Anderson, R. E. (2019). Multivariate Data Analysis (8th ed.). Cengage Learning.
  • IBM Corporation. (2023). IBM SPSS Statistics Documentation – General Linear Model. Retrieved from IBM Knowledge Center.
  • Montgomery, D. C. (2017). Design and Analysis of Experiments (9th ed.). John Wiley & Sons.
  • Tabachnick, B. G., & Fidell, L. S. (2019). Using Multivariate Statistics (7th ed.). Pearson.
  • Rutherford, A. (2011). ANOVA and ANCOVA: A GLM Approach (2nd ed.). John Wiley & Sons.
Xem thêm
Back to top button