Statsmodels基本介绍
Statsmodels 是 Python 中一个强大的统计分析包,包含了回归分析、时间序列分析、假设检验等等的功能。Statsmodels 在计量的简便性上是远远不及 Stata 等软件的,但它的优点在于可以与 Python 的其他的任务(如 NumPy、Pandas)有效结合,提高工作效率。在本文中,我们重点介绍最回归分析中最常用的 OLS(ordinary least square)功能。
OLS 回归
假设模型为:
Y
=
W
0
X
0
+
W
1
X
1
+
W
2
X
2
+
.
.
.
+
W
n
X
n
Y=W_0X_0 +W_1X_1+W_2X_2+...+W_nX_n
Y=W0X0+W1X1+W2X2+...+WnXn
statsmodels.OLS 是 statsmodels.regression.linear_model 里的一个函数。它的输出结果是一个statsmodels.regression.linear_model.OLS,只是一个类,并没有进行任何运算。在 OLS 的模型之上调用拟合函数 fit(),才进行回归运算,并且得到statsmodels.regression.linear_model.RegressionResultsWrapper,它包含了这组数据进行回归拟合的结果摘要。调用 params 可以查看计算出的回归系数 w_0,w_1,…,w_n。其中sm.add_constant()用于生成常数项,它会在一个 array 左侧加上一列 1。
实战
实战1:
# 导入第三方模块
import pandas as pd
import statsmodels.api as sm
income = pd.read_csv('Salary_Data.csv')
print(income.head())
# 利用收入数据集,构建回归模型
fit = sm.formula.ols('Salary ~ YearsExperience', data = income).fit()
# 返回模型的参数值
print(fit.params)
实战2:
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt # type: ignore
# 生成模拟数据
np.random.seed(12)
square_feet = np.random.randint(800, 2500, 50)
price = 150000 + 300 * square_feet + np.random.normal(0, 50000, 50)
# 创建数据框
df = pd.DataFrame({'SquareFeet': square_feet, 'Price': price})
# 添加常数列
X = sm.add_constant(df['SquareFeet'])
# 拟合线性回归模型
model = sm.OLS(df['Price'], X).fit()
# 打印模型摘要
print(model.summary())
# 绘制拟合结果
plt.scatter(df['SquareFeet'], df['Price'], label='Data')
plt.plot(df['SquareFeet'], model.predict(X), color='red', label='Fitted Line')
plt.xlabel('Square Feet')
plt.ylabel('Price')
plt.title('Linear Regression: House Price vs. Square Feet')
plt.legend()
plt.show()