Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để vẽ biểu đồ hồi quy tuyến tính theo mô hình thống kê (OLS) một cách rõ ràng trong Matplotlib?

Chúng tôi có thể vẽ biểu đồ hồi quy tuyến tính theo mô hình thống kê (OLS) với một đường cong phi tuyến tính nhưng với dữ liệu tuyến tính.

Các bước

  • Đặt kích thước hình và điều chỉnh phần đệm giữa và xung quanh các ô con.

  • Để tạo một cái mới, chúng ta có thể sử dụng seed () phương pháp.

  • Khởi tạo số lượng biến mẫu và biến sigma.

  • Tạo các điểm dữ liệu tuyến tính x, X, beta, t_true , y và res sử dụng numpy.

  • Res là một phiên bản lớp Least Square bình thường.

  • Tính độ lệch chuẩn. Khoảng tin cậy để dự đoán áp dụng cho WLS và OLS, không áp dụng cho GLS chung, nghĩa là, các quan sát độc lập nhưng không phân bố đồng nhất.

  • Tạo một hình và một tập hợp các lô phụ bằng cách sử dụng subplot () phương pháp.

  • Vẽ tất cả các đường cong bằng cách sử dụng plot () phương thức với (x, y), (x, y_true), (x, res.fittedvalues), (x, iv_u) (x, iv_l) điểm dữ liệu.

  • Đặt chú giải vào cốt truyện.

  • Để hiển thị hình này, hãy sử dụng show () phương pháp.

Ví dụ

import numpy as np
from matplotlib import pyplot as plt
from statsmodels import api as sm
from statsmodels.sandbox.regression.predstd import wls_prediction_std
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
np.random.seed(9876789)
nsample = 50
sig = 0.5
x = np.linspace(0, 20, nsample)
X = np.column_stack((x, np.sin(x), (x - 5) ** 2, np.ones(nsample)))
beta = [0.5, 0.5, -0.02, 5.]
y_true = np.dot(X, beta)
y = y_true + sig * np.random.normal(size=nsample)
res = sm.OLS(y, X).fit()
prstd, iv_l, iv_u = wls_prediction_std(res)
fig, ax = plt.subplots()
ax.plot(x, y, 'o', label="data")
ax.plot(x, y_true, 'b-', label="True")
ax.plot(x, res.fittedvalues, 'r--.', label="OLS")
ax.plot(x, iv_u, 'r--')
ax.plot(x, iv_l, 'r--')
ax.legend(loc='best')
plt.show()

Đầu ra

Làm thế nào để vẽ biểu đồ hồi quy tuyến tính theo mô hình thống kê (OLS) một cách rõ ràng trong Matplotlib?