社交网站开发公司,黔江做网站,建设考试网站,视频网站 阿里云03 多元线性回归
3.1 简介
多元线性回归是简单线性回归的扩展#xff0c;允许我们同时研究多个自变量对因变量的影响。多元回归模型可以表示为#xff1a; 其中#xff0c;x1,x2,…,xp是 p 个自变量#xff0c;β0 是截距#xff0c;β1,β2,…,βp是对应的回归系数允许我们同时研究多个自变量对因变量的影响。多元回归模型可以表示为 其中x1,x2,…,xp是 p 个自变量β0 是截距β1,β2,…,βp是对应的回归系数ϵ是误差项。
3.2 估计回归系数
类似于简单线性回归多元线性回归的系数估计也通常使用最小二乘法。我们选择回归系数使得实际观测值与模型预测值之间的残差平方和最小。
在Python中我们可以使用statsmodels库来拟合多元线性回归模型。下面是一个示例代码
import numpy as np
import pandas as pd
import statsmodels.api as sm# 生成模拟数据
np.random.seed(0)
X np.random.rand(100, 2) # 100个样本每个样本有2个自变量
y 2 3 * X[:, 0] 5 * X[:, 1] np.random.randn(100) # 因变量# 拟合多元线性回归模型
X sm.add_constant(X) # 添加截距项
model sm.OLS(y, X).fit()# 输出回归结果
print(model.summary())在这个例子中我们生成了两个自变量并通过多元线性回归模型来估计它们对因变量的影响。
3.3 模型拟合与解释
多元线性回归的拟合结果包含多个回归系数每个系数反映了对应自变量对因变量的影响。通过这些系数我们可以判断每个自变量在控制其他变量的情况下对因变量的边际影响。
例如如果我们在模型中包含了两个自变量 x1和 x2我们可以解释回归系数表示在 x2不变的情况下x1 每增加一个单位y 增加的量。
3.4 假设检验与模型选择
在多元回归分析中我们通常会进行假设检验来评估每个自变量的显著性。我们通常检验的假设是 H0:0即某个自变量对因变量没有显著影响。
在Python中statsmodels 的回归结果会自动提供每个回归系数的 t 值和 p 值这些值可以帮助我们进行假设检验。
此外我们还可以使用 AICAkaike Information Criterion和 BICBayesian Information Criterion等信息准则来比较不同模型的拟合效果从而选择最佳模型。
3.5 多重共线性
多元回归模型的一个潜在问题是多重共线性即自变量之间存在较高的相关性。这可能导致估计的回归系数不稳定并且使得模型对数据中的噪声过于敏感。
为了检测多重共线性我们可以计算方差膨胀因子Variance Inflation Factor, VIF。VIF值越高表明自变量之间的相关性越强通常VIF大于10被认为是共线性较强的标志。
在Python中可以使用statsmodels库的variance_inflation_factor函数来计算VIF值
from statsmodels.stats.outliers_influence import variance_inflation_factor# 计算VIF值
vif pd.DataFrame()
vif[VIF Factor] [variance_inflation_factor(X, i) for i in range(X.shape[1])]
vif[features] [const, x1, x2]print(vif)通过这个表格我们可以识别出具有高VIF值的自变量并考虑是否需要对模型进行调整例如通过去除变量或使用正则化技术。
3.6 模型诊断
在多元线性回归中模型诊断与简单线性回归类似但也存在一些特有的挑战。我们依然需要检查残差的正态性、同方差性和独立性同时还需要关注多重共线性和异常点的影响。
残差正态性
残差的正态性是最小二乘估计量的一个重要假设。可以通过绘制QQ图来检验残差是否服从正态分布。
import matplotlib.pyplot as plt
import scipy.stats as stats# 绘制QQ图
sm.qqplot(model.resid, lines)
plt.show()残差同方差性
同方差性假设要求残差的方差在不同的自变量值上保持恒定。可以通过绘制残差与预测值的散点图来检验这一假设。
# 绘制残差与预测值的散点图
plt.scatter(model.fittedvalues, model.resid)
plt.axhline(y0, colorr, linestyle-)
plt.xlabel(Fitted values)
plt.ylabel(Residuals)
plt.show()如果残差图显示出漏斗形状则可能存在异方差性。
多重共线性
如前所述多重共线性会导致回归系数的不稳定影响模型的解释性。除了使用VIF值外我们还可以通过观察回归系数的变化来识别共线性问题。
异常值与杠杆点
异常值和杠杆点可能会对模型产生过大的影响。可以通过Cook’s距离来识别这些点。
influence model.get_influence()
cooks influence.cooks_distance[0]plt.stem(np.arange(len(cooks)), cooks, markerfmt,)
plt.title(Cook\s Distance)
plt.show()如果某些点的Cook’s距离特别大则表明它们可能对模型拟合有不成比例的影响。
3.7 高维数据中的回归
在实际应用中自变量的数量有时可能远多于观测值的数量。这种情况下传统的最小二乘回归可能不适用因为模型会出现过拟合问题预测能力下降。为了解决这一问题通常采用以下方法
岭回归
岭回归通过在最小二乘目标函数中添加一个惩罚项来抑制回归系数的大小从而减小多重共线性问题对模型的影响。这个惩罚项通常是回归系数的平方和的某个倍数。
from sklearn.linear_model import Ridge# 拟合岭回归模型
ridge_model Ridge(alpha1.0) # alpha为正则化参数
ridge_model.fit(X[:, 1:], y) # 注意在这里我们不包含截距项# 输出回归系数
print(ridge_model.coef_)Lasso回归
Lasso回归Least Absolute Shrinkage and Selection Operator也通过增加一个惩罚项来限制回归系数的绝对值从而可以进行变量选择即将不重要的变量系数缩为零。
from sklearn.linear_model import Lasso# 拟合Lasso回归模型
lasso_model Lasso(alpha0.1)
lasso_model.fit(X[:, 1:], y)# 输出回归系数
print(lasso_model.coef_)弹性网回归
弹性网回归结合了岭回归和Lasso回归的惩罚项适用于特征之间高度相关的情况。
from sklearn.linear_model import ElasticNet# 拟合弹性网回归模型
elastic_net_model ElasticNet(alpha0.1, l1_ratio0.5)
elastic_net_model.fit(X[:, 1:], y)# 输出回归系数
print(elastic_net_model.coef_)3.8 示例犯罪率与社会经济因素
让我们通过一个具体的例子来理解多元线性回归。在这个例子中我们研究一个数据集探索城市中的犯罪率与一系列社会经济因素之间的关系。假设我们有以下变量
犯罪率因变量城市人口密度城市中的失业率平均收入
我们可以通过以下代码来加载数据并拟合多元线性回归模型
# 假设我们有一个数据框包含以上变量
data pd.DataFrame({crime_rate: np.random.rand(100),population_density: np.random.rand(100),unemployment_rate: np.random.rand(100),average_income: np.random.rand(100)
})# 定义自变量和因变量
X data[[population_density, unemployment_rate, average_income]]
y data[crime_rate]# 添加截距项
X sm.add_constant(X)# 拟合多元线性回归模型
model sm.OLS(y, X).fit()# 输出回归结果
print(model.summary())这个模型将帮助我们理解不同社会经济因素如何共同影响犯罪率。通过观察回归系数和p值我们可以识别出哪些因素对犯罪率有显著影响。