
Tóm tắt: Hồi quy tuyến tính giản đơn là công cụ cơ bản trong thực hành kinh tế lượng, cho phép dự báo một biến phụ thuộc dựa trên một biến độc lập duy nhất. Bài hướng dẫn này trình bày chi tiết cách thực hiện simple linear regression trong SPSS, từ kiểm tra giả thiết đến diễn giải kết quả, kèm theo ví dụ thực tế về mối quan hệ giữa kinh nghiệm và thu nhập lao động tại Việt Nam.
Giới thiệu về hồi quy tuyến tính giản đơn
Nội dung chính
- Giới thiệu về hồi quy tuyến tính giản đơn
- Các giả thiết của hồi quy tuyến tính giản đơn
- Ví dụ thực tế từ thị trường lao động Việt Nam
- Hướng dẫn thực hành chi tiết trong SPSS
- Diễn giải kết quả chi tiết
- Lưu ý quan trọng về vi phạm giả thiết
- Ứng dụng trong nghiên cứu kinh tế Việt Nam
- Tổng kết
- Phụ lục – Code tương đương cho các phần mềm khác
- Tài liệu tham khảo
Trong bối cảnh kinh tế Việt Nam, hồi quy tuyến tính giản đơn có nhiều ứng dụng thực tiễn:
- Dự báo thu nhập theo số năm kinh nghiệm của người lao động
- Phân tích mối quan hệ giữa chi tiêu tiêu dùng và thu nhập hộ gia đình
- Nghiên cứu tác động của giá cả đến lượng cầu sản phẩm
- Đánh giá hiệu quả đầu tư theo quy mô doanh nghiệp
Khi mô hình có từ hai biến độc lập trở lên, hồi quy tuyến tính giản đơn sẽ trở thành hồi quy đa biến.
Các giả thiết của hồi quy tuyến tính giản đơn
Để sử dụng phương pháp hồi quy tuyến tính trong thực hành kinh tế lượng, dữ liệu phải thỏa mãn các giả thiết sau:
- Tính chất của biến: Hai biến trong mô hình phải là biến liên tục (dạng tỉ lệ hoặc khoảng)
- Mối quan hệ tuyến tính: Tồn tại mối quan hệ tuyến tính giữa hai biến
- Không có điểm dị biệt: Dữ liệu không chứa các điểm dị biệt nghiêm trọng
- Tính độc lập: Các quan sát độc lập với nhau
- Phương sai đồng nhất: Phương sai của phần dư không đổi
- Phân phối chuẩn: Sai số có phân phối chuẩn
Kiểm tra mối quan hệ tuyến tính
Mối quan hệ tuyến tính có thể được kiểm tra bằng đồ thị phân tán. Mối quan hệ tuyến tính lý tưởng được thể hiện như sau:
Nếu dữ liệu có dạng phi tuyến, cần thực hiện biến đổi biến thông qua các hàm toán học phù hợp để đáp ứng giả định tuyến tính.
Phát hiện điểm dị biệt
Điểm dị biệt có thể làm sai lệch kết quả ước lượng nghiêm trọng:
Tham khảo: Để hiểu rõ hơn về tác động của các giả thiết, xem bài viết các khuyết tật của mô hình hồi quy
Ví dụ thực tế từ thị trường lao động Việt Nam
Để minh họa ứng dụng hồi quy tuyến tính giản đơn, chúng ta nghiên cứu mối quan hệ giữa kinh nghiệm và thu nhập của người lao động tại Thủ Dầu Một, Bình Dương.
Câu hỏi nghiên cứu:
- Mối quan hệ giữa thu nhập (triệu đồng/năm) và số năm kinh nghiệm như thế nào?
- Tăng thêm 1 năm kinh nghiệm có thể cải thiện bao nhiêu phần trăm thu nhập?
- Kinh nghiệm có thể dự báo được bao nhiêu phần trăm biến động thu nhập?
Mô tả dữ liệu
Bộ dữ liệu nghiên cứu gồm 44 quan sát là các nhân viên làm việc tại các doanh nghiệp trên địa bàn Tp. Thủ Dầu Một, phân bổ theo 4 loại hình:
- CTCP (A): Công ty cổ phần
- Công ty tư nhân (B): Doanh nghiệp tư nhân
- FDI (C): Doanh nghiệp đầu tư nước ngoài
- DNNN (D): Doanh nghiệp nhà nước
Các biến trong mô hình:
- Biến phụ thuộc (y): Thu nhập hiện tại (triệu đồng/năm)
- Biến độc lập (x): Số năm kinh nghiệm
Hướng dẫn thực hành chi tiết trong SPSS
Bước 1: Truy cập chức năng hồi quy tuyến tính
Để bắt đầu phân tích hồi quy tuyến tính giản đơn, thực hiện theo trình tự:
Vào menu Analyze → Regression → Linear…
Bước 2: Thiết lập các biến trong mô hình
Trong cửa sổ Linear Regression, thực hiện phân bổ biến:
- Đưa biến
y
(thu nhập) vào ô Dependent - Đưa biến
x
(kinh nghiệm) vào ô Independent(s)
Bước 3: Cấu hình thống kê mô hình
Bấm vào nút Statistics và thiết lập các tùy chọn sau:
- Estimates: Hệ số ước lượng
- Model fit: Độ phù hợp mô hình (R², F-test)
- Collinearity diagnostics: Kiểm tra đa cộng tuyến
- Durbin-Watson: Kiểm định tự tương quan
Bước 4: Thiết lập đồ thị chẩn đoán
Bấm vào nút Plots để tạo đồ thị kiểm tra giả thiết:
Các đồ thị cần thiết:
- Scatter plot: ZPRED vs ZRESID (kiểm tra phương sai đồng nhất)
- Histogram: Phân phối phần dư
- Normal P-P plot: Kiểm tra phân phối chuẩn
Bước 5: Kiểm tra tùy chọn hệ số chặn
Bấm vào nút Options và đảm bảo Include constant in equation được chọn:
Sau mỗi bước thiết lập, bấm Continue để quay về cửa sổ chính, rồi bấm OK để chạy phân tích.
Diễn giải kết quả chi tiết
Bảng Model Summary – Đánh giá độ phù hợp
Bảng đầu tiên cung cấp thông tin tổng quan về chất lượng mô hình:
Các chỉ số quan trọng:
- \(R^2 = 0.667\): Mô hình giải thích được 66.7% biến động thu nhập
- \(R^2\) hiệu chỉnh = 0.659: Điều chỉnh theo bậc tự do
- Durbin-Watson = 2.327: Nằm trong khoảng [1.5, 2.5], không có tự tương quan
Kết quả cho thấy biến số năm kinh nghiệm dự báo được hơn 2/3 biến động trong thu nhập của người lao động.
Bảng ANOVA – Kiểm định tổng thể
Bảng ANOVA kiểm định giả thiết \(H_0: \beta = 0\) (mô hình không có ý nghĩa):
- Sig. = 0.000 < 0.05: Bác bỏ \(H_0\)
- Kết luận: Mô hình có ý nghĩa thống kê
- Ý nghĩa: Kinh nghiệm có tác động có ý nghĩa đến thu nhập
Bảng Coefficients – Hệ số ước lượng
Bảng này cung cấp thông tin chi tiết về phương trình hồi quy:
Phương trình hồi quy ước lượng:
\[\hat{Y} = \alpha + \beta X\]Trong đó:
- Hệ số chặn (\(\alpha\)): Thu nhập cơ bản khi kinh nghiệm = 0
- Hệ số góc (\(\beta\)): Tác động của 1 năm kinh nghiệm thêm
- Hệ số \(\beta\) = 0.816: Tăng 1 năm kinh nghiệm → tăng 816 nghìn đồng thu nhập
Cả hai hệ số đều có ý nghĩa thống kê ở mức 5%, xác nhận mối quan hệ tuyến tính giữa kinh nghiệm và thu nhập.
Bảng Residuals Statistics
Bảng này thống kê các thông tin về phần dư, giá trị dự báo, và các chỉ số chẩn đoán mô hình như giá trị trung bình, độ lệch chuẩn, giá trị min/max.
Đồ thị chẩn đoán
Histogram và Normal P-P Plot
Kết quả đồ thị cho thấy:
- Histogram: Phần dư có dạng phân phối chuẩn
- Normal P-P Plot: Các điểm gần sát đường thẳng chéo
- Kết luận: Giả thiết phân phối chuẩn được thỏa mãn
Scatter Plot phần dư
Đồ thị Scatter Plot cho thấy:
- Phần dư không phân tán đồng đều quanh trục 0
- Xuất hiện hiện tượng phương sai thay đổi (heteroscedasticity)
- Vi phạm giả thiết phương sai đồng nhất
Lưu ý quan trọng về vi phạm giả thiết
Sự vi phạm giả thiết phương sai đồng nhất có các tác động sau:
- Không ảnh hưởng: Độ phù hợp \(R^2\) và hệ số ước lượng \(\beta\) vẫn chính xác
- Ảnh hưởng: Sai số chuẩn của ước lượng bị sai lệch
- Hậu quả: Giá trị thống kê t, F và mức ý nghĩa bị thay đổi
- Giải pháp: Sử dụng robust standard errors hoặc weighted least squares
- Luôn kiểm tra đồ thị phần dư trước khi kết luận
- Xem xét biến đổi biến nếu vi phạm nghiêm trọng
- Sử dụng các phương pháp điều chỉnh khi cần thiết
Ứng dụng trong nghiên cứu kinh tế Việt Nam
Hồi quy tuyến tính giản đơn có nhiều ứng dụng trong các lĩnh vực khác nhau:
- Kinh tế lao động: Phân tích tác động giáo dục đến thu nhập
- Kinh tế vĩ mô: Mối quan hệ giữa tiêu dùng và thu nhập quốc dân
- Tài chính: Dự báo lợi nhuận theo quy mô đầu tư
- Marketing: Tác động chi phí quảng cáo đến doanh số
Tổng kết
Hồi quy tuyến tính giản đơn là công cụ cơ bản nhưng mạnh mẽ trong thực hành kinh tế lượng. Thông qua ví dụ về mối quan hệ kinh nghiệm-thu nhập, chúng ta đã thấy:
- Cách thực hiện phân tích từ A đến Z trong SPSS
- Tầm quan trọng của việc kiểm tra giả thiết
- Phương pháp diễn giải kết quả một cách khoa học
- Cách xử lý các vi phạm giả thiết cơ bản
Kết quả nghiên cứu cho thấy kinh nghiệm có tác động tích cực và có ý nghĩa đến thu nhập lao động, giải thích được 66.7% biến động thu nhập. Điều này có ý nghĩa quan trọng đối với chính sách đào tạo và phát triển nguồn nhân lực.
Hồi quy tuyến tính giản đơn có nhiều điểm tương đồng với phân tích tương quan. Cả hai đều cho thấy mối liên hệ giữa hai biến và cho p-value giống nhau trong kiểm định giả thuyết. Tuy nhiên, hồi quy cung cấp thêm thông tin về chiều hướng nhân quả và độ lớn tác động, trong khi tương quan chỉ đo lường mức độ liên hệ tuyến tính.
Key Points:
- Hồi quy tuyến tính giản đơn phù hợp khi có một biến độc lập liên tục
- Kiểm tra đầy đủ 6 giả thiết cơ bản trước khi diễn giải kết quả
- Đồ thị chẩn đoán cung cấp thông tin quan trọng về chất lượng mô hình
- Vi phạm giả thiết cần được xử lý thích hợp để đảm bảo tính tin cậy
- SPSS cung cấp giao diện thân thiện cho phân tích hồi quy cơ bản
Phụ lục – Code tương đương cho các phần mềm khác
SPSS Syntax
SPSS Syntax (.sps)
* Thực hiện hồi quy tuyến tính giản đơn
REGRESSION
/MISSING LISTWISE
/STATISTICS COEFF OUTS CI(95) R ANOVA COLLIN TOL CHANGE ZPP
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT y
/METHOD=ENTER x
/SCATTERPLOT=(*ZRESID ,*ZPRED)
/RESIDUALS NORMPROB(ZRESID)
/RESIDUALS HISTOGRAM(ZRESID)
/SAVE PRED COOK RESID ZRESID ZPRED.
* Kiểm tra thống kê mô tả
DESCRIPTIVES VARIABLES=x y
/STATISTICS=MEAN STDDEV MIN MAX.
* Tạo đồ thị phân tán
GRAPH
/SCATTERPLOT(BIVAR)=x WITH y
/MISSING=LISTWISE.
Stata
Code Stata (.do)
* Đọc dữ liệu
use "simple-ols.dta", clear
* Thống kê mô tả
summarize x y
* Tạo đồ thị phân tán
scatter y x, title("Mối quan hệ giữa kinh nghiệm và thu nhập") ///
xtitle("Số năm kinh nghiệm") ytitle("Thu nhập (triệu đồng/năm)")
* Thực hiện hồi quy tuyến tính giản đơn
regress y x
* Kiểm tra giả thiết
* Durbin-Watson test
estat dwatson
* Kiểm tra phân phối chuẩn của phần dư
predict residuals, residuals
histogram residuals, normal title("Phân phối phần dư")
qnorm residuals
* Kiểm tra phương sai đồng nhất
predict fitted, xb
scatter residuals fitted, title("Đồ thị phần dư vs giá trị dự báo")
* Đồ thị regression line
twoway (scatter y x) (lfit y x), ///
title("Đường hồi quy tuyến tính") ///
legend(label(1 "Dữ liệu quan sát") label(2 "Đường hồi quy"))
* Kiểm định tính ổn định của mô hình
ovtest
* Tính confidence intervals
regress y x, level(95)
R
Code R (.R)
# Load thư viện cần thiết
library(ggplot2)
library(car)
library(lmtest)
# Đọc dữ liệu
data <- read.csv("simple-ols.csv")
# Thống kê mô tả
summary(data$x)
summary(data$y)
# Tạo đồ thị phân tán
ggplot(data, aes(x = x, y = y)) +
geom_point() +
geom_smooth(method = "lm", se = TRUE) +
labs(title = "Mối quan hệ giữa kinh nghiệm và thu nhập",
x = "Số năm kinh nghiệm",
y = "Thu nhập (triệu đồng/năm)")
# Thực hiện hồi quy tuyến tính giản đơn
model <- lm(y ~ x, data = data)
summary(model)
# Tính confidence intervals
confint(model)
# Kiểm tra giả thiết
# Durbin-Watson test
dwtest(model)
# Kiểm tra phân phối chuẩn của phần dư
shapiro.test(residuals(model))
# Đồ thị chẩn đoán
par(mfrow = c(2, 2))
plot(model)
# Histogram phần dư
hist(residuals(model), breaks = 10, main = "Histogram phần dư",
xlab = "Phần dư", ylab = "Tần suất")
# Q-Q plot
qqnorm(residuals(model))
qqline(residuals(model))
# Kiểm tra phương sai đồng nhất
bptest(model)
# Đồ thị phần dư vs fitted values
plot(fitted(model), residuals(model),
main = "Phần dư vs Giá trị dự báo",
xlab = "Giá trị dự báo", ylab = "Phần dư")
abline(h = 0, col = "red")
# Tính R-squared
summary(model)$r.squared
summary(model)$adj.r.squared
# Dự báo với dữ liệu mới
new_data <- data.frame(x = c(5, 10, 15))
predictions <- predict(model, new_data, interval = "prediction")
print(predictions)
Python
Code Python (.py)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
import statsmodels.api as sm
from statsmodels.stats.diagnostic import het_breuschpagan
from statsmodels.stats.stattools import durbin_watson
# Đọc dữ liệu
data = pd.read_csv('simple-ols.csv')
# Thống kê mô tả
print("Thống kê mô tả:")
print(data[['x', 'y']].describe())
# Tạo đồ thị phân tán
plt.figure(figsize=(10, 6))
plt.scatter(data['x'], data['y'], alpha=0.6)
plt.plot(np.unique(data['x']), np.poly1d(np.polyfit(data['x'], data['y'], 1))(np.unique(data['x'])), 'r--')
plt.xlabel('Số năm kinh nghiệm')
plt.ylabel('Thu nhập (triệu đồng/năm)')
plt.title('Mối quan hệ giữa kinh nghiệm và thu nhập')
plt.grid(True, alpha=0.3)
plt.show()
# Chuẩn bị dữ liệu
X = data[['x']]
y = data['y']
# Thực hiện hồi quy tuyến tính với statsmodels
X_with_const = sm.add_constant(X)
model = sm.OLS(y, X_with_const).fit()
print("\nKết quả hồi quy tuyến tính:")
print(model.summary())
# Tính R-squared
r_squared = model.rsquared
adj_r_squared = model.rsquared_adj
print(f"\nR-squared: {r_squared:.4f}")
print(f"Adjusted R-squared: {adj_r_squared:.4f}")
# Kiểm tra giả thiết
residuals = model.resid
fitted_values = model.fittedvalues
# Durbin-Watson test
dw_stat = durbin_watson(residuals)
print(f"\nDurbin-Watson statistic: {dw_stat:.4f}")
# Kiểm tra phân phối chuẩn của phần dư
shapiro_stat, shapiro_p = stats.shapiro(residuals)
print(f"Shapiro-Wilk test: statistic={shapiro_stat:.4f}, p-value={shapiro_p:.4f}")
# Kiểm tra phương sai đồng nhất
bp_stat, bp_p, _, _ = het_breuschpagan(residuals, X_with_const)
print(f"Breusch-Pagan test: statistic={bp_stat:.4f}, p-value={bp_p:.4f}")
# Đồ thị chẩn đoán
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# Histogram phần dư
axes[0, 0].hist(residuals, bins=10, edgecolor='black', alpha=0.7)
axes[0, 0].set_title('Histogram phần dư')
axes[0, 0].set_xlabel('Phần dư')
axes[0, 0].set_ylabel('Tần suất')
# Q-Q plot
stats.probplot(residuals, dist="norm", plot=axes[0, 1])
axes[0, 1].set_title('Q-Q Plot')
# Phần dư vs fitted values
axes[1, 0].scatter(fitted_values, residuals, alpha=0.6)
axes[1, 0].axhline(y=0, color='red', linestyle='--')
axes[1, 0].set_title('Phần dư vs Giá trị dự báo')
axes[1, 0].set_xlabel('Giá trị dự báo')
axes[1, 0].set_ylabel('Phần dư')
# Leverage plot
leverage = model.get_influence().hat_matrix_diag
axes[1, 1].scatter(leverage, residuals, alpha=0.6)
axes[1, 1].set_title('Leverage Plot')
axes[1, 1].set_xlabel('Leverage')
axes[1, 1].set_ylabel('Phần dư')
plt.tight_layout()
plt.show()
# Dự báo với dữ liệu mới
new_x = np.array([5, 10, 15]).reshape(-1, 1)
new_x_with_const = sm.add_constant(new_x)
predictions = model.predict(new_x_with_const)
pred_intervals = model.get_prediction(new_x_with_const).conf_int()
print("\nDự báo cho giá trị mới:")
for i, x_val in enumerate([5, 10, 15]):
print(f"Kinh nghiệm {x_val} năm: {predictions[i]:.2f} triệu đồng")
print(f" Confidence interval: [{pred_intervals[i, 0]:.2f}, {pred_intervals[i, 1]:.2f}]")
# Hiển thị phương trình hồi quy
intercept = model.params[0]
slope = model.params[1]
print(f"\nPhương trình hồi quy: y = {intercept:.3f} + {slope:.3f}*x")
- Tất cả các phiên bản code đều thực hiện cùng phân tích hồi quy tuyến tính giản đơn
- Kết quả có thể khác biệt nhỏ do thuật toán tính toán khác nhau
- Python cung cấp nhiều thư viện mạnh mẽ cho machine learning và visualization
- R có hệ sinh thái phong phú cho phân tích thống kê