Statsmodels: Chạy hồi quy tuyến tính R ngay trong Python
Khám phá thư viện statsmodels, công cụ cho phép các nhà phân tích dữ liệu thực hiện hồi quy tuyến tính với cú pháp R quen thuộc và nhận kết quả chi tiết.
Sức mạnh của statsmodels trong phân tích thống kê
Python là một ngôn ngữ lập trình phổ biến trong lĩnh vực phân tích thống kê nhờ hệ sinh thái thư viện phong phú. Trong số các kỹ thuật thống kê, hồi quy tuyến tính là một trong những phương pháp được sử dụng rộng rãi nhất. Thư viện statsmodels cung cấp các công cụ mạnh mẽ để thực hiện hồi quy và phân tích phương sai, đặc biệt hữu ích cho những ai đã quen thuộc với cú pháp của ngôn ngữ R.
statsmodels là thư viện Python chuyên dụng cho việc thực hiện các kiểm định thống kê. Thư viện này đặc biệt mạnh trong phân tích hồi quy, tương tự như các phương pháp trong kinh tế lượng. Một ưu điểm lớn của statsmodels là kết quả của nó đã được kiểm tra chéo về độ chính xác với các phần mềm thống kê chuyên nghiệp khác như R, Stata và SAS, đảm bảo độ tin cậy cao cho các nghiên cứu học thuật và chuyên sâu.

Hồi quy tuyến tính đơn giản với cú pháp kiểu R
Hồi quy tuyến tính đơn giản được sử dụng để xác định mối quan hệ giữa một biến phụ thuộc (y) và một biến độc lập (x). Với statsmodels, người dùng có thể dễ dàng thực hiện điều này bằng cú pháp công thức tương tự như trong R.
Đầu tiên, cần nhập các thư viện cần thiết:
import statsmodels.formula.api as smf
import statsmodels.api as sm
import seaborn as sns
import numpy as np
Sử dụng bộ dữ liệu 'tips' có sẵn trong thư viện Seaborn để phân tích mối quan hệ giữa tiền boa ('tip') và tổng hóa đơn ('total_bill').
tips = sns.load_dataset('tips')

Để khớp mô hình hồi quy, ta sử dụng hàm smf.ols (Ordinary Least Squares – Bình phương tối thiểu thông thường) với cú pháp công thức:
results = smf.ols('tip ~ total_bill', data=tips).fit()
Trong đó, 'tip ~ total_bill' chỉ định 'tip' là biến phụ thuộc và 'total_bill' là biến độc lập. Để xem kết quả chi tiết của mô hình, sử dụng lệnh:
print(results.summary())

Mở rộng sang hồi quy đa biến và mô hình phi tuyến tính
Hồi quy tuyến tính đa biến cho phép phân tích mối quan hệ giữa biến phụ thuộc và nhiều biến độc lập, giúp kiểm soát các biến gây nhiễu tiềm ẩn. Cú pháp trong statsmodels rất đơn giản, chỉ cần thêm các biến mới vào công thức bằng dấu cộng (+).
Ví dụ, để xem xét ảnh hưởng của cả tổng hóa đơn và kích thước bữa tiệc ('size') đến tiền boa:
results = smf.ols('tip ~ total_bill + size', data=tips).fit()
print(results.summary())

Ngoài ra, statsmodels cũng hỗ trợ mô hình hóa các mối quan hệ phi tuyến tính, chẳng hạn như phương trình bậc hai. Cần sử dụng hàm I() để thông báo cho statsmodels rằng đây là một phép toán trên biến hiện có:
results = smf.ols('y ~ x + I(x**2)', data=df).fit()
print(results.summary())

Giải mã bảng kết quả hồi quy
Bảng tóm tắt kết quả từ statsmodels cung cấp nhiều thông tin quan trọng để đánh giá mô hình:
- R-squared (Hệ số xác định): Cho biết mức độ biến thiên của biến phụ thuộc được giải thích bởi các biến độc lập. Giá trị càng gần 1, mô hình càng phù hợp.
- Adjusted R-squared: Tương tự R-squared nhưng được điều chỉnh cho số lượng biến trong mô hình, hữu ích hơn khi so sánh các mô hình hồi quy đa biến.
- Coefficients (Hệ số): Cho biết mức độ thay đổi của biến phụ thuộc khi biến độc lập tương ứng thay đổi một đơn vị.
- Std err (Sai số chuẩn): Đo lường độ chính xác của hệ số ước lượng. Giá trị càng thấp, ước lượng càng đáng tin cậy.
- p-value (Giá trị p): Dùng để kiểm định ý nghĩa thống kê của từng biến. Nếu giá trị p nhỏ hơn một ngưỡng xác định trước (thường là 0.05), biến đó có ảnh hưởng đáng kể về mặt thống kê.

Phân tích phương sai (ANOVA)
Phân tích phương sai (ANOVA) được sử dụng để so sánh giá trị trung bình của một biến số trên nhiều nhóm của một biến phân loại.
ANOVA một chiều
Khi chỉ có một biến phân loại, ta sử dụng ANOVA một chiều. Ví dụ, để kiểm tra xem loài chim cánh cụt ('species') có phải là yếu tố dự đoán đáng kể về chiều dài mỏ ('bill_length_mm') hay không:
penguin_lm = smf.ols('bill_length_mm ~ species', data=penguins).fit()
results = sm.stats.anova_lm(penguin_lm)
print(results)

ANOVA đa chiều
Khi có nhiều hơn một biến phân loại, ta có thể sử dụng ANOVA đa chiều. Ví dụ, thêm biến hòn đảo ('island') vào mô hình:
penguin_multi_lm = smf.ols('bill_length_mm ~ species * island', data=penguins).fit()
results = sm.stats.anova_lm(penguin_multi_lm)
print(results)

Việc sử dụng dấu hoa thị (*) trong công thức cho phép mô hình xem xét cả tác động riêng lẻ của từng biến và tác động tương tác giữa chúng.

Kết luận
Thư viện statsmodels mang lại khả năng thực hiện các mô hình thống kê phức tạp như hồi quy tuyến tính và ANOVA trực tiếp trong môi trường Python. Bằng cách sử dụng cú pháp công thức kiểu R quen thuộc, statsmodels giúp đơn giản hóa quá trình xây dựng và phân tích mô hình, cho phép các nhà khoa học dữ liệu và nhà phân tích biến dữ liệu thô thành những hiểu biết sâu sắc và các quyết định dựa trên bằng chứng.
