用Python进行多元线性回归分析(附代码)

article/2025/10/8 21:35:47

https://developer.51cto.com/art/202008/624683.htm

很多人在做数据分析时会经常用到一元线性回归,这是描述两个变量间统计关系的最简单的回归模型。但现实问题中,我们往往会碰到多个变量间的线性关系的问题,这时就要用到多元线性回归,多元线性回归是一元回归的一种推广,其在实际应用中非常广泛,本文就用python代码来展示一下如何用多元线性回归来解决实际问题。

图1. 多元回归模型中要用到的公式

如图1所示,我们假设随机变量y与一般变量x1、x2、...、xp之间线性回归模型为(1)式,式中y为因变量,x1、x2、...、xp是自变量,β1、β2、...、βp是回归系数,β0是回归常数。对于一个实际问题,如果我们获得n组观测数据(xi1,xi2,...,xip;y)(i = 1,2,...,n),则我们可以把这n组观测数据写成矩阵形式y=Xβ+ε。

在求出了回归方程之后,我们往往还要对回归方程进行显著性检验。这里的显著性检验主要包括三部分。第一个是F检验,也就是检验自变量x1、x2、...、xp从整体上对y是否有明显的影响,主要用到(2)、(3)、(4)式,其中(2)和(3)式是一个式子,不过是用不同符号表示;第二个是t检验,是对每个自变量进行显著性检验,就是看每个自变量是否对y有显著性影响,这和前面从整体上检验还是有区别的;第三个是拟合优度,也就是R2,其取值在0到1之间,越接近1,表明回归拟合的效果越好,越接近于0,则效果越差,但R只能直观反映拟合的效果,不能代替F检验作为严格的显著性检验。

上面是多元线性回归的一个简单介绍,其详细原理内容较多,有兴趣的读者可以去查阅一下相关文献,这里不再赘述,只重点讲解如何用python进行分析。下面我们还是用代码来展示一下多元线性回归的分析过程。

这里我们用到的数据来源于2013年《中国统计年鉴》,数据以居民的消费性支出为因变量y,其他9个变量为自变量,其中x1是居民的食品花费,x2是衣着花费,x3是居住花费,x4是医疗保健花费,x5是文教娱乐花费,x6是职工平均工资,x7是地区的人均GDP,x8是地区的消费价格指数,x9是地区的失业率。在这所有变量里面,x1至x7以及y的单位是元,x9是百分数,x8没有单位,因为其是消费价格指数。数据的总体大小为31x10,即31行、10列,大体内容如图2所示。

图2. 数据集部分内容

首先还是导入需要的库。

 
  1. import numpy as np  
  2. import pandas as pd  
  3. import statsmodels.api as sm 

接下来是数据预处理,因为原数据的列标太长,我们要处理一下,去除其中的中文,只留下英文名称。

 
  1. file = r'C:\Users\data.xlsx'  
  2. data = pd.read_excel(file)  
  3. data.columns = ['y', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9'] 

然后我们就开始生成多元线性模型,代码如下。

 
  1. x = sm.add_constant(data.iloc[:,1:]) #生成自变量  
  2. y = data['y'] #生成因变量  
  3. model = sm.OLS(y, x) #生成模型  
  4. result = model.fit() #模型拟合  
  5. result.summary() #模型描述 

很明显,这里的自变量是指x1到x9这9个自变量,代码data.iloc[:,1:]就是去掉原数据中第一列,也就是y那一列的数据,result.summary()则是生成一份结果描述,其内容如图3所示。

图3. 包含所有自变量的回归结果

在这个结果中,我们主要看“coef”、“t”和“P>|t|”这三列。coef就是前面说过的回归系数,const这个值就是回归常数,所以我们得到的这个回归模型就是y = 320.640948 + 1.316588 x1 + 1.649859 x2 + 2.17866 x3 - 0.005609 x4 + 1.684283 x5 + 0.01032 x6 + 0.003655 x7 -19.130576 x8 + 50.515575 x9。而“t”和“P>|t|”这两列是等价的,使用时选择其中一个就行,其主要用来判断每个自变量和y的线性显著关系,后面我们会讲到。从图中还可以看出,Prob (F-statistic)为4.21e-20,这个值就是我们常用的P值,其接近于零,说明我们的多元线性方程是显著的,也就是y与x1、x2、...、x9有着显著的线性关系,而R-squared是0.992,也说明这个线性关系比较显著。理论上,这个多元线性方程已经求出来了,而且效果还不错,我们就可以用其进行预测了,但这里我们还是要进行更深一步的探讨。前面说过,y与x1、x2、...、x9有着显著的线性关系,这里要注意x1到x9这9个变量被看作是一个整体,y与这个整体有显著的线性关系,但不代表y与其中的每个自变量都有显著的线性关系,我们在这里要找出那些与y的线性关系不显著的自变量,然后把它们剔除,只留下关系显著的,这就是前面说过的t检验,t检验的原理内容有些复杂,有兴趣的读者可以自行查阅资料,这里不再赘述。我们可以通过图3中“P>|t|”这一列来判断,这一列中我们可以选定一个阈值,比如统计学常用的就是0.05、0.02或0.01,这里我们就用0.05,凡是P>|t|这列中数值大于0.05的自变量,我们都把它剔除掉,这些就是和y线性关系不显著的自变量,所以都舍去,请注意这里指的自变量是x1到x9,不包括图3中const这个值。但是这里有一个原则,就是一次只能剔除一个,剔除的这个往往是P值最大的那个,比如图3中P值最大的是x4,那么就把它剔除掉,然后再用剩下的x1、x2、x3、x5、x6、x7、x8、x9来重复上述建模过程,再找出P值最大的那个自变量,把它剔除,如此重复这个过程,直到所有P值都小于等于0.05,剩下的这些自变量就是我们需要的自变量,这些自变量和y的线性关系都比较显著,我们要用这些自变量来进行建模。

我们可以将上述过程写成一个函数,命名为looper,代码如下。

 
  1. def looper(limit):  
  2.     cols = ['x1', 'x2', 'x3', 'x5', 'x6', 'x7', 'x8', 'x9']  
  3.     for i in range(len(cols)):  
  4.         datadata1 = data[cols]  
  5.         x = sm.add_constant(data1) #生成自变量  
  6.         y = data['y'] #生成因变量  
  7.         model = sm.OLS(y, x) #生成模型  
  8.         result = model.fit() #模型拟合  
  9.         pvalues = result.pvalues #得到结果中所有P值  
  10.         pvalues.drop('const',inplace=True) #把const取得  
  11.         pmax = max(pvalues) #选出最大的P值  
  12.         if pmax>limit:  
  13.             ind = pvalues.idxmax() #找出最大P值的index  
  14.             cols.remove(ind) #把这个index从cols中删除  
  15.         else:  
  16.             return result  
  17. result = looper(0.05)  
  18. result.summary() 

其结果如图4所示。从结果中可以看到最后剩下的有效变量为x1、x2、x3和x5,我们得到的多元线性模型为y = -1694.6269 + 1.3642 x1 + 1.7679 x2 + 2.2894 x3 + 1.7424 x5,这个就是我们最终要用到的有效的多元线性模型。

图4. 剔除无效变量后的回归模型

那么问题来了,前面我们得到的包含所有自变量的多元线性模型和这个剔除部分变量的模型,我们要选择哪一个,毕竟第一个模型的整体线性效果也挺显著,依据笔者的经验,这个还是要看具体的项目要求。因为我们实际项目中遇到的问题都是现实生活中真实存在的例子,不再是单纯的数学题了,比如本例中的x8消费价格指数和x9地区的失业率,这两个肯定对y是有一定影响的,如果盲目剔除,可能会对最终的结果产生不良影响,所以我们还是要根据实际需求来做决定。

最后还有一个问题要讨论一下,就是本例中没有对原始数据进行数据标准化。那么我们在数据分析中是否要对原始数据进行标准化?

这个也是要视情况而定。像本例中这些数据都是带有具体的量纲和单位,那么就不要对其进行标准化,我们得到的这个线性回归模型是在原始变量基础上进行拟合所得的结果,这个式子是包含物理单位的,说白了它们都是有一定实际意义的。在这种情况下,我们输入特定的自变量的值,即可得到相应的y值,预测效果直截了当,这是采取原始数据进行线性拟合的好处。

如果我们对原始数据采取了标准化处理,情况就不同了。标准化处理后自变量、因变量的物理单位没有了,我们拿此时的模型做预测时就会十分麻烦,要对新的自变量取值进行标准化,得到的y还是一个标准化后的数据,一眼看不到它的实际大小和物理意义。当然有些纯数学问题,其变量没有单位,这时候可以对其进行标准化,这会有利于对问题的分析。所以这个还是要视情况而定。


http://chatgpt.dhexx.cn/article/PVUvZM71.shtml

相关文章

R语言 —— 多元线性回归

一、模型简介 一元线性回归是一个主要影响因素作为自变量来解释因变量的变化,在现实问题研究中,因变量的变化往往受几个重要因素的影响,此时就需要用两个或两个以上的影响因素作为自变量来解释因变量的变化,这就是多元回归亦称多…

机器学习10—多元线性回归模型

多元线性回归模型statsmodelsols 前言什么是多元线性回归分析预测法 一、多元线性回归二、多元线性回归模型求解2.1最小二乘法实现参数估计—估计自变量X的系数2.2决定系数:R 与调整后 R2.3F检验参数2.4对数似然、AIC与BIC2.5回归系数标准差2.6回归系数的显著性t检验…

线性回归——简单线性回归、多元线性回归

回归分析是用来评估变量之间关系的统计过程。用来解释自变量X与因变量Y的关系。即当自变量X发生改变时,因变量Y会如何发生改变。 线性回归是回归分析的一种,评估的自变量X与因变量Y之间是一种线性关系。当只有一个自变量时,称为简单线性回归&…

[学习笔记]多元线性回归分析——理解篇

回归分析是数据分析中最基础最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的任务就是,通过研究自变量x和因变量y的相关关系,尝试去解释y的形成机制,进而达到通过x去预测y的目的。 常…

用 Python 进行多元线性回归分析(附代码)

很多人在做数据分析时会经常用到一元线性回归,这是描述两个变量间统计关系的最简单的回归模型。但现实问题中,我们往往会碰到多个变量间的线性关系的问题,这时就要用到多元线性回归,多元线性回归是一元回归的一种推广,…

【数学建模】-多元线性回归分析

文章目录 回归的思想回归分析:研究X和Y之间相关性的分析。相关性因变量Y自变量X 回归分析的使命回归分析的分类数据的分类一元线性回归对于线性的理解回归系数的解释内生性的探究内生性的蒙特卡罗模拟核心解释变量和控制变量回归系数的解释什么时候取对数&#xff1…

多元回归分析

建模复习 目录 前言 一、回归的思想 1,介绍 2,回归分析的分类 3,数据类型 二、一元线性回归 1,一元线性函数拟合 2,一元线性回归模型 3,回归系数 1,回归系数的解释 2,内生性 3&…

VC2015运行库安装失败

VC2015安装失败,0x80240017-未指定的错误。 32位操作系统 64位操作系统 依次安装即可。 网盘链接:https://pan.baidu.com/s/1FGSAbpPuxTwszrQGMblPRg 提取码:z6ah 如遇到缺少什么.dll,可以通过增加某dll至环境变量中。

VC运行库修复安装一键安装

VC.RedistInstaller1.6.rar: http://u1.share.orcy.net.cn/file/12559096-413098201 如果上述安装不成功可尝试下载: Visual C AIO v2019.05.21(自动强制安装谨慎双击).zip: http://u1.share.orcy.net.cn/file/12559096-413098413 ------…

phpstudy没有安装VC11、VC14运行库

文章目录 出现问题解决方案安装步骤安装VC11安装VC14验证结果出现问题 phpstudy2018–>切换版本php-5.5.36时—>提示错误 解决方案

Windows 技术篇-通过注册表查找vc运行库所在位置实战演示,通过ProductCode查看vc++运行库安装位置

vc 运行库各个版本的位置安装位置不尽相同,而且根据安装方式不同也有一定区别,总结了一套自己的方法,我们自己来探索: 我用 vc2015 举例,2015 有很多版本,每个版本对应的产品代码是不一样的,我…

vc2005运行库彻底卸载_VC运行库安装卸载工具-Visual C ++ AIO(VC运行库安装卸载工具)下载 v2019.05.21官方版--pc6下载站...

VisualCAIOVC运行库安装卸载工具包含了所有VisualC最新版,可以通过命令行静默安装,可以卸载所有已安装版本及更新为最新版,总之这是一个不错的VisualC运行库安装卸载程序。。 相关软件软件大小版本说明下载地址 Visual C AIO(VC运行库安装卸…

c语言 运行库 下载,Visual C++运行库合集

Visual C++运行库合集是基于Windows操作系统打造的可视化集成开发环境,能够为用户提供C、标准C++、ATL、MFC、OpenMP以及MSDIA等类库的运行支持,助广大用户能够更好在自己的电脑上运行VisualC++ 开发的应用程序。 Visual C++运行库具有集成开发环境,可提供编辑C语言,C++以及…

win10自带vc运行库吗?

运行库是系统中非常重要的组件,像一些绿化版的软件如果电脑没有运行库就无法运行,但是也不一定就要安装VC运行库一般而言,将相关的.dll文件复制出来,放在相关程序所在目录中就可以了。比如小编从网上下载了一款破解版的QQ&#xf…

phpStudy启动失败提示:缺少VC9运行库

镜像是官方2008 64位中文版 按照提示安装了VC9以后 软件依旧无法运行阿帕奇,提示缺少VC9运行库这是因为:64位系统除了要装64位的运行库也要装32位的运行库32位的VC9运行库下载:http://www.microsoft.com/zh-CN/download/details.aspx?id5582…

php程序检测不到vc9,XAMPP2016中文精简版启动失败 缺少运行库解决办法

[摘要] XAMPP是一款强大的建站集成软件包,但XAMPP2016 中文精简版在启动的时候会出现“缺少运行库”“程序检测不到VC9运行库”等问题,其实只需要正确安装vc9库就能解决问题了。 XAMPP是一款强大的建站集成软件包,对于经常折腾WordPress的博主…

请自行检查是否安装VC9运行库??

phpStudy是一款PHP调试环境的程序集成包,该程序包集成最新的ApachePHPMySQLphpMyAdminZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。 1、程序自带FTP服务器,支持多用户,无需…

phpStudy启动失败时的解决方法 提示缺vc9运行库

php5.3、5.4和apache都是用vc9编译,电脑必须安装vc9运行库才能运行。 php5.5、5.6是vc11编译,如用php5.5、5.6必须安装vc11运行库。 php7.0、7.1是vc14编译,如用php7.0、7.1必须安装vc14运行库。 vc9和vc11运行库下载:http://www.…

django2.0调用银联支付接口实现银联支付

准备工作: 1.银联技术开放平台注册:https://open.unionpay.com/tjweb/acproduct/list?apiservId448 2.点击网关支付 --> 我要测试 (按照提示下载密钥) 3.安装需要的模块 pip install pyOpenSSL 代码实现: 目录结…

小程序调银联支付接口

这几天接了一个需求,将之前的项目支付接口改成银联的支付接口,简单说一下,对于没有接触过支付的小伙伴可能会有那么一丢丢启发… 环境:微信小程序银联支付 文档:公司提供的开发文档银联官方文档 框架:Dub…