回归分析系列1-多元线性回归

news2024/9/22 7:40:49

03 多元线性回归

3.1 简介

多元线性回归是简单线性回归的扩展,允许我们同时研究多个自变量对因变量的影响。多元回归模型可以表示为:

y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p + \epsilon

其中,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​,我们可以解释回归系数\beta_1表示在 x2不变的情况下,x1 每增加一个单位,y 增加的量。

3.4 假设检验与模型选择

在多元回归分析中,我们通常会进行假设检验来评估每个自变量的显著性。我们通常检验的假设是 H0:\beta_j=0,即某个自变量对因变量没有显著影响。

在Python中,statsmodels 的回归结果会自动提供每个回归系数的 t 值和 p 值,这些值可以帮助我们进行假设检验。

此外,我们还可以使用 AIC(Akaike Information Criterion)和 BIC(Bayesian 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, line='s')
plt.show()
残差同方差性

同方差性假设要求残差的方差在不同的自变量值上保持恒定。可以通过绘制残差与预测值的散点图来检验这一假设。

# 绘制残差与预测值的散点图
plt.scatter(model.fittedvalues, model.resid)
plt.axhline(y=0, color='r', 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(alpha=1.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(alpha=0.1)
lasso_model.fit(X[:, 1:], y)

# 输出回归系数
print(lasso_model.coef_)
弹性网回归

弹性网回归结合了岭回归和Lasso回归的惩罚项,适用于特征之间高度相关的情况。

from sklearn.linear_model import ElasticNet

# 拟合弹性网回归模型
elastic_net_model = ElasticNet(alpha=0.1, l1_ratio=0.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值,我们可以识别出哪些因素对犯罪率有显著影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2043390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32项目】在FreeRtos背景下的实战项目的实现过程(一)

个人主页~ 这篇文章是我亲身经历的,在做完一个项目之后总结的经验,虽然我没有将整个项目给放出来,因为这项目确实也是花了米让导师指导的,但是这个过程对于STM32的实战项目开发都是非常好用的,可以说按照这个过程&…

Layout 布局组件快速搭建

文章目录 设置主题样式变量封装公共布局组件封装 Logo 组件封装 Menu 菜单组件封装 Breadcrumb 面包屑组件封装 TabBar 标签栏组件封装 Main 内容区组件封装 Footer 底部组件封装 Theme 主题组件 经典布局水平布局响应式布局搭建 Layout 布局组件添加 Layout 路由配置启动项目 …

关于Idea中的debug模式只能执行一次的问题

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、为什么debug模式只有生效一次三、补充说明其他调试功能四、最后 开篇说明 记录一…

设计模式学习优质网站分享:refactoring.guru

地址 英文版地址:https://refactoring.guru/design-patterns 中文版地址:https://refactoringguru.cn/design-patterns 介绍 这个网站是专门学习 设计模式 和 软件重构 的网站 整体来说并不花哨,但我觉得他最大的优点就是: 概…

PyTorch 基础学习(2)- 张量 Tensors

PyTorch张量简介 张量是数学和计算机科学中的一个基本概念,用于表示多维数据,是AI世界中一切事物的表示和抽象。可以将张量视为一个扩展了标量、向量和矩阵的通用数据结构。以下是对张量的详细解释: 张量的定义 标量(0阶张量&am…

Assembly(七)实验环境搭建

本篇文章将讲解在win11环境下的王爽老师的汇编语言的环境搭建 首先凑齐这些文件: 随后安装好Dosbox,去官网下载就好 打开箭头所指文件 找到文件最后部分 [autoexec] # Lines in this section will be run at startup. # You can put your MOUNT lines here. MOUNT C D:\Debug …

快速搭建Vue_cli以及ElementUI简单项目学生管理系统雏形

为了帮助大家快速搭建Vue_cli脚手架还有ElementUI的简单项目,今天我给大家提供方法. 因为这个搭建这个项目步骤繁多,容易忘记,所以给大家提供这个资料希望可以帮助到你们. 废话不多说开始搭建项目: 搭建Vue_cli项目 首先点开HBuilder左上角的文件点击新建,点击项目,选择vue项…

2024年人工智能固态硬盘采购容量预计超过45 EB

根据TrendForce发布的最新市场报告,人工智能(AI)服务器客户在过去两个季度显著增加了对企业级固态硬盘(SSD)的订单。为了满足AI应用中不断增长的SSD需求,上游供应商正在加速工艺升级,并计划在20…

智慧交通物联网应用,5G路由器赋能高速道路监控数据传输

高速道路为了保障交通的高速、安全运行,沿线部署了控制设施、监视设施、情报设施、传输设施、显示设施及控制中心等。在传统的高速管理中,这些设施的传输设施多采用光纤线缆进行数据传输,但高速道路覆盖范围广、距离远,布线与施工…

韩顺平 集合

集合 一、体系结构图二、Collection2.1 Collection 接口和常用方法2.2 集合遍历2.2.1 迭代器2.2.2 增强for循环 三、List接口及其常用方法3.1 三种遍历方式3.2 ArrayList3.3 LinkedList 四 MAP4.1 hashmap 一、体系结构图 集合主要是两组 单列和双列集合 Collection接口有两个重…

第十五章:高级调度

本章内容包括: 使用节点污点和pod容忍度组织pod调度到特定节点将节点亲和性规则作为节点选择器的一种替代使用节点亲和性进行多个pod的共同调度使用节点非亲和性来分离多个pod Kubernetes允许你去影响pod被调度到哪个节点。起初,只能通过在pod规范⾥指定…

Linux安装Nginx后,无法解析Windows主机Hosts文件

问题展示: 配置好Linux的Nginx配置后,Windows同样配置好host,而通过浏览器只能用IP地址成功访问,而域名则不行 解决方法: 点击Windows图标,搜索记事本,选择以管理员身份运行,编辑…

php-xlswriter实现数据导出excel单元格合并,内容从指定行开始写

最终效果图: 代码: public function export_data() {$list $this->get_list_organ();$content [];$content[] []; // 第2行不设置内容,设置为空foreach ($list as $key > $value) {$content[] [$value[organ_name], $value[clas…

防火墙技术与地址转换

文章目录 前言一、四种区域二、实验拓扑图基础配置防火墙配置测试结果 前言 防火墙是计算机网络中的一种安全设备或软件功能,旨在监控和控制进出网络的网络流量。其核心目的是保护内部网络免受外部攻击或不必要的访问。防火墙通过设定一系列安全规则,允…

【iOS】UITableViewCell的重用问题解决方法

我自己在实验中对cell的重用总结如下: 非自定义Cell和非自定义cell的复用情况一样: 第一次加载创建tableView的时候,是屏幕上最多也显示几行cell就先创建几个cell,此时复用池里什么都没有开始下滑tableView,刚开始滑…

可视化编程-七巧低代码入门02

1.1.什么是可视化编程 非可视化编程是一种直接在集成开发环境中(IDE)编写代码的编程方式,这种编程方式要求开发人员具备深入的编程知识,开发效率相对较低,代码维护难度较大,容易出现错误,也需要…

最新的APS高级计划排程系统推动的MRP供应链计划是什么?

在当下“内卷”的市场环境下,制造业的订单需求从过去大批量标准品生产已经演变成小批量、多订单的非标订单生产,这对制造业的供应链提出了更高的要求。为了应对市场实现产销平衡,中大型的企业都开始重视供应链的建设工作,以应对企…

数字签名和CA数字证书的核心原理和作用

B站讲解视频,讲述HTTPS CA认证的整个行程过程与原理 https://www.bilibili.com/video/BV1mj421d7VE

[Qt][Qt 文件]详细讲解

目录 1.输入输出设备类2.文件读写类3.文件和目录信息类 1.输入输出设备类 在Qt中,⽂件读写的类为QFile,其⽗类为QFileDevice QFileDevice提供了⽂件交互操作的底层功能QFileDevice的⽗类是QIODevice,其⽗类为QObject QIODevice是Qt中所有I/O…

【数学建模备赛】Ep05:斯皮尔曼spearman相关系数

文章目录 一、前言🚀🚀🚀二、斯皮尔曼spearman相关系数:☀️☀️☀️1. 回顾皮尔逊相关系数2. 斯皮尔曼spearman相关系数3. 斯皮尔曼相关系数公式4. 另外一种斯皮尔曼相关系数定义5. matlab的用法5. matlab的用法 三、对斯皮尔曼相…