messenger_logo
Liên hệ qua Messenger
SciEco

[Blog 001] - Ước lượng Hồi quy OLS với R

KH
Khanh Hoang
Ngày viết: 08/06/2023

Ordinary least squares (OLS) hay Bình phương nhỏ nhất là phương pháp hồi quy nhằm tìm được đường thẳng tốt nhất để mô tả mối liên hệ tuyến tính giữa biến độc lập và biến phụ thuộc.

OLS giúp ước lượng phương trình hồi quy sau:

ŷ = b0 + b1x

Trong đó:

Bước 1: Tạo dữ liệu

Tạo dataset có 2 biến với 15 quan sát như sau:

Lưu ý: 15 quan sát này trong thực tế là không đủ tin cậy để ước lượng hồi quy, tuy nhiên vì là ví dụ nên ta chấp nhận quy mô bộ dữ liệu này.

Thực hiện hồi quy OLS, với chi phí quảng cáo là biến độc lập, doanh thu là biến phụ thuộc:

1#create dataset
2chi_phi_quang_cao <- c(10, 15, 20, 25, 30, 35, 40, 45, 50, 55)
3doanh_thu <- c(100, 120, 150, 180, 210, 240, 260, 265, 267, 280)
4df <- data.frame(chi_phi_quang_cao, doanh_thu)
5
6#view dataset
7View(df)

Bước 2: Trực quan hoá

1library(ggplot2)
2
3#create scatter plot
4ggplot(df, aes(x=chi_phi_quang_cao, y=doanh_thu)) +
5	geom_point(size=2)

Một trong các giả định của hồi quy tuyến tính là có mối liên hệ tuyến tính giữa biến độc lập và biến phụ thuộc.

Từ biểu đồ có thể thấy mối liên hệ như sau: khi chi phí quảng cáo tăng, doanh thu cũng tăng tuyến tính theo.

Tiếp theo, ta có thể dùng boxplot để trực quan hóa phân phối doanh thu và kiểm tra các outliers.

Lưu ý: R xác định một quan sát là outlier nếu nó lớn hơn 1,5 lần tính từ phân vị mức 75 của phân phối hoặc nhỏ hơn 1,5 lần tính từ phân vị mức 25.

Nếu một quan sát là outlier, một vòng tròn nhỏ sẽ xuất hiện trong boxplot:

1library(ggplot2)
2
3#create scatter plot
4ggplot(df, aes(y=score)) +
5  geom_boxplot()

Không có vòng tròn nhỏ nào ở hai đầu boxplot, điều đó có nghĩa là không có giá trị outliers nào trong dataset này.

Bước 3: Thực hiện hồi quy OLS

Sử dụng hàm lm() trong R để thực hiện hồi quy OLS, sử dụng chi_phi_quang_cao làm biến độc lập và doanh_thu làm biến phụ thuộc:

1#fit simple linear regression model
2m1 <- lm(doanh_thu~chi_phi_quang_cao, data=df)
3
4#view model summary
5summary(m1)

Kết quả thu được

1Call:
2lm(formula = doanh_thu ~ chi_phi_quang_cao, data = df)
3
4Residuals:
5     Min       1Q   Median       3Q      Max
6-22.4909 -12.7909   0.1515  11.2561  22.2121 
7
8Coefficients:
9                  Estimate Std. Error t value Pr(>|t|)    
10(Intercept)        69.5576    12.9789   5.359 0.000678 ***
11chi_phi_quang_cao   4.2352     0.3653  11.594 2.78e-06 ***
12---
13Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
14
15Residual standard error: 16.59 on 8 degrees of freedom
16Multiple R-squared:  0.9438,	Adjusted R-squared:  0.9368 
17F-statistic: 134.4 on 1 and 8 DF,  p-value: 2.785e-06

Từ model summary, có thể thấy phương trình hồi quy phù hợp là:

doanh_thu = 69.5576 + 4.2352(chi_phi_quang_cao)

Điều này có nghĩa là mỗi đồng chi phí quảng cáo tăng lên sẽ ảnh hưởng và làm tăng trung bình 4.2352 đồng doanh thu.

Hệ số gốc 69.5576 cho biết doanh thu trung bình dự kiến khi không có chi phí quảng cáo.

Ta cũng có thể sử dụng phương trình này để tìm doanh thu dự kiến dựa trên chi phí quảng cáo có được.

Ví dụ: nếu dùng 100 đồng chi phí quảng cáo thì doanh thu sẽ là:

doanh_thu = 69.5576 + 4.2352(100) = 493.0776

Đây là cách giải thích phần còn lại của model summary:

Bước 4: Trực quan đường hồi quy

1ggplot(df, aes(x=chi_phi_quang_cao, y=doanh_thu)) +    
2	geom_point(size=2) +    
3	geom_smooth(method = "lm", se = F)

Bước 5: Residual Plots

Cuối cùng, ta cần vẽ các biểu đồ phân tích phần dư để kiểm tra các giả định về homoscedasticity và normality.

Giả định về homoscedasticity hay phương sai đồng nhất là phần dư của mô hình hồi quy có phương sai gần như bằng nhau ở mỗi cấp độ của một biến phụ thuộc.

Để kiểm tra giả định này, ta có thể tạo một biểu đồ phần dư so với giá trị fitted hay residuals vs. fitted plot.

Trục x hiển thị các giá trị fitted và trục y hiển thị phần dư. Nếu phần dư được phân phối ngẫu nhiên và đồng đều trong biểu đồ xung quanh giá trị 0, ta có thể giả định rằng homoscedasticity không bị vi phạm:

1#define residuals
2residuals <- resid(m1)
3
4#produce residual vs. fitted plot
5plot(fitted(m1), residuals)
6
7#add a horizontal line at 0 
8abline(0,0)

Phần dư gần như được rải ngẫu nhiên xung quanh 0 và không thể hiện bất kỳ patterns đáng chú ý nào, vì vậy giả định này được đáp ứng.

Giả định về normality chỉ ra rằng phần dư của một mô hình hồi quy gần như có phân phối chuẩn.

Để kiểm tra xem giả định này có được đáp ứng hay không, chúng ta có thể tạo biểu đồ Q-Q hay Q-Q plot. Nếu các điểm trong biểu đồ nằm dọc theo đường lý thuyết gần như thẳng ở góc 45 độ, thì dữ liệu được phân phối chuẩn:

1#create Q-Q plot for residuals
2qqnorm(residuals)
3
4#add a straight diagonal line to the plot
5qqline(residuals)

Ta thấy phần dư chệch khỏi đường 45 độ một chút, nhưng không đủ lớn. Chúng ta có thể kết luận rằng giả định được đáp ứng.

Vì phần dư được phân phối chuẩn và phương sai đồng nhất, ta đã xác minh rằng các giả định của mô hình hồi quy OLS được đáp ứng.

Do đó, đầu ra từ mô hình của này là đáng tin cậy.

Lưu ý: Nếu một hoặc nhiều giả định không được đáp ứng, ta có thể thử chuyển đổi dữ liệu.


Bài viết khác
Trong quá trình phân tích dữ liệu, chúng ta thường phải tạo ra rất nhiều bảng kết quả hồi quy với cùng một định dạng và nhãn dán lặp đi lặp lại. Thay vì phải định dạng lại từ đầu cho mỗi bảng báo cáo, Stata cung cấp một giải pháp hiệu quả giúp bạn lưu lại toàn bộ cấu trúc trình bày để tái sử dụng về sau. Bài viết này sẽ hướng dẫn cách lưu các thiết lập định dạng bảng và áp dụng chúng cho những dự án phân tích dữ liệu trong tương lai. Tạo bảng kết quả cơ bản Chúng ta sẽ bắt đầu bằng việc mở tập dữ liệu thông qua lệnh webuse nhanes2l. Sau đó, chúng ta dùng lệnh table để tạo một bảng cơ bản cho mô hình hồi quy logistic với biến phụ thuộc nhị phân là highbp. Bảng này sẽ bao gồm tỷ số chênh, sai số chuẩn, thống kê z, p-value và khoảng tin cậy. Lưu ý rằng ký hiệu biến phân loại của Stata được sử dụng để đưa vào hiệu ứng chính của biến liên tục age, hiệu ứng chính của các biến phân loại sex và diabetes, cùng với sự tương tác giữa age và sex.
Machine learning, deep learning và trí tuệ nhân tạo là tập hợp các thuật toán dùng để nhận diện các mẫu trong dữ liệu. Các thuật toán này thường có tên gọi khá đặc biệt như random forests, neural networks hay spectral clustering. Bài viết này trình bày cách sử dụng một trong những thuật toán phổ biến mang tên Support Vector Machines hay còn được gọi tắt là SVM. Mục tiêu là ứng dụng mô hình SVM để phân biệt những người có khả năng mắc bệnh tiểu đường và những người không mắc bệnh thông qua hai biến số là tuổi và mức HbA1c. Tuổi được tính bằng năm, còn HbA1c là chỉ số xét nghiệm máu đo lường mức độ kiểm soát đường huyết. Mô hình SVM sẽ dự đoán rằng những người lớn tuổi với mức HbA1c cao có nguy cơ mắc bệnh tiểu đường cao hơn, trong khi những người trẻ tuổi với mức HbA1c thấp ít có nguy cơ mắc bệnh hơn. Tải, gộp và làm sạch dữ liệu bằng Stata Dữ liệu được sử dụng lấy từ Khảo sát Kiểm tra Sức khỏe và Dinh dưỡng Quốc gia Hoa Kỳ. Cụ thể, biến số tuổi trích xuất từ tập dữ liệu nhân khẩu học, chỉ số HbA1c từ dữ liệu hemoglobin và trạng thái bệnh từ dữ liệu tiểu đường. Quá trình bắt đầu bằng việc tải các tệp gốc từ trang web, lưu thành các tập dữ liệu Stata cục bộ và tiến hành gộp chúng lại với nhau. Sau khi gộp, các biến số sẽ được đổi tên và mã hóa lại cho đồng nhất. Những quan sát có giá trị bị khuyết sẽ được loại bỏ hoàn toàn để đảm bảo chất lượng cho bước huấn luyện mô hình.
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: science.for.economics@gmail.com
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội