前言
OLS(Ordinary Least Squares)回归模型是一种经典的线性回归模型,用于建立自变量和因变量之间的关系。基于最小二乘法的原理,通过最小化观测值与模型预测值之间的残差平方和来估计模型的参数。
在OLS回归模型中,假设因变量(或响应变量) 与自变量(或特征) 之间存在线性关系。模型的形式可以表示为:
其中, 是因变量, 、 、...、 是自变量, 、 、 、...、 是待估计的参数, 是误差项。
OLS回归模型的目标是找到一组最佳的参数估计值,使得观测值与模型预测值的残差平方和最小化。残差定义为观测值与模型预测值之间的差异。
通过最小化残差平方和,OLS回归模型提供了对参数的最优无偏估计。它可以用来解释自变量对因变量的影响程度,以及自变量之间的相互关系。模型的参数估计结果可以用于预测新的观测值,评估变量的重要性,进行因果推断等。
OLS回归模型的优点在于它是一种数学上可行且易于实现的方法,对于满足线性关系的问题具有较好的拟合效果。然而,需要注意的是,OLS回归模型对于数据中存在的非线性关系、异方差性、自相关等问题可能表现不佳,需要进行适当的模型检验和处理。
用以下数学公式表示拟合过程:
其中, 是第 个观测值的因变量值, 是第 个观测值的自变量值, 是模型对于自变量 的预测值。目标是找到最佳的模型参数,使得残差平方和的总和最小化。
总而言之,OLS回归模型是一种基于最小二乘法的线性回归模型,用于建立自变量和因变量之间的线性关系,并估计模型的参数。 它是统计学和经济学等领域中最常用的回归模型之一,具有广泛的应用和解释能力。
代码实现
import pandas as pd
encodings = ['utf-8', 'gbk', 'gb18030']
for encoding in encodings:
try:
data = pd.read_csv('数据.csv', encoding=encoding)
print(f"成功读取文件,使用的编码为:{encoding}")
break
except UnicodeDecodeError as e:
print(f"{encoding} 编码解析失败")
data = data.set_index('year')
print('数据维度:',data.shape)
print('数据缺失值:',data.isnull().sum())
print('重复值数量:',data.duplicated().sum())
data.head()
数据集维度为 (23, 6),数据不存在缺失值,重复值数量为 0。其中 "Y" 是因变量(目标变量),而 "X1"、"X2"、"X3"、"X4" 和 "X5" 是自变量(特征变量)。利用这个数据集来进行OLS(普通最小二乘)实验,尝试通过拟合一个线性回归模型来探索自变量与因变量之间的关系。
import seaborn as sns
import matplotlib.pyplot as plt
sns.pairplot(data[['Y','X1','X2','X3','X4','X5']])
plt.show()
绘制数据框data中Y与X1-X5这几个变量之间的散点图对角矩阵,以完成变量之间关系的探索性分析,根据两个变量之间的散点图,观察两个变量之间的关系可知Y与X1-X5存在一定的线性关系,为OLS回归提供了重要的参考和指导。
# 定义自变量和因变量
x = data.iloc[:,1:6]
y = data['Y']
# 添加截距项
x = sm.add_constant(x)
# 构建线性回归模型
model = sm.OLS(y, x)
results = model.fit()
# 输出完整模型评估结果
print(results.summary())
# 预测值
y_pred = results.predict(x)
# 散点图
plt.scatter(y, y_pred)
plt.xlabel('Actual')
plt.ylabel('Predicted')
plt.show()
R-squared(R平方):该值表示模型拟合的好坏程度,介于0和1之间。R平方值为0.944,说明模型能够解释因变量(Y)的94.4%的方差。
Adj. R-squared(调整后的R平方):这是经过修正的R平方值,考虑了模型中自变量数量的影响。Adj. R平方值为0.928,比R平方值稍低,但仍然很高。
F-statistic(F统计量)和Prob (F-statistic)(F统计量的概率):F统计量用于检验整个回归模型的显著性。F统计量的值为57.63,对应的概率为4.64e-10,这意味着模型整体上是显著的。
回归模型的关系式可以表示为:
其中,
表示因变量,而
、
、
、
和
分别表示自变量。
对于自变量的显著性影响:
的系数为0.0049,对应的P>|t|值为0.338。由于 值大于通常的显著性水平(0.05),不能得出 对 的影响是显著的结论。
的系数为-0.6519,对应的P>|t|值为0.002。 由于 值小于显著性水平,可以认为 对 的影响是显著的,且为负相关。
的系数为0.2432,对应的P>|t|值为0.015。
值小于显著性水平,说明 对 的影响是显著的,且为正相关。
的系数为0.1043,对应的P>|t|值为0.158。
值大于显著性水平,不能得出 对 的影响是显著的结论。
的系数为-0.0711,对应的P>|t|值为0.480。
值大于显著性水平,不能得出 对 的影响是显著的结论。
综上 所述,根据该回归模型的结果, 和 对Y的影响是显著的,且分别为负相关和正相关。 而 、 和 对 的影响在统计上不显著。
根据结果可知模型还存在较强的多重共线性,自变量之间存在高度相关性,这可能导致参数估计不稳定或难以解释。需要进一步修正模型,于是剔除显著性大于0.05的 、 和 ,利用 和 对 构建新的OLS回归模型。
x = data[['X2','X3']]
y = data['Y']
x = sm.add_constant(x)
model = sm.OLS(y, x)
results = model.fit()
print(results.summary())
y_pred = results.predict(x)
plt.scatter(y, y_pred)
plt.xlabel('Actual')
plt.ylabel('Predicted')
plt.show()
新的回归模型的关系式表示为:
R方为0.867,说明约86.7%的Y的方差可以由 和 的线性组合来解释。虽然R方有细微的减小,但是避免了多重共线性的影响。