189 8069 5689

python多元回归函数,python做多元回归分析

多元线性回归中自变量减少预测误差变大回归平方怎么变化

关注

成都创新互联公司专注于企业营销型网站、网站重做改版、新城网站定制设计、自适应品牌网站建设、H5场景定制商城网站建设、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为新城等各大城市提供网站开发制作服务。

当影响因变量的因素是多个时候,这种一个变量同时与多个变量的回归问题就是多元回归,分为:多元线性回归和多元非线性回归。这里直说多元线性回归。对比一元线性回归:

1.1多元回归模型:

y=β0+β1x1+β2x2+…+βkxk+ε

y=β0+β1x1+β2x2+…+βkxk+ε

1.2多元回归方程

E(y)=β0+β1x1+β2x2+…+βkxk

E(y)=β0+β1x1+β2x2+…+βkxk

1.3估计的多元回归方程

y^=β0^+β1^x1+β2^x2+…+βk^xk

y^=β0^+β1^x1+β2^x2+…+βk^xk

2.1**对参数的最小二乘法估计:**

和一元线性回归中提到的最小二乘法估计一样、这不过这里的求导变量多了点、原理是一样的、这里需要借助计算机求导、就不写了。

3 回归方程的拟合优度:

3.1 多重判定系数:(Multiple coefficient of determination)

R2=SSRSST=1−SSESST

R2=SSRSST=1−SSESST

注解:

(1 ) 对于多重判定系数有一点特别重要的需要说明:自变量个数的增加将影响到因变量中被估计的回归方程所解释的变量数量。当增加自变量时,会使预测误差变得较小,从而减小残差平方和 SSESSE。自然就会是 SSRSSR变大。自然就会是 R2R2变大。这就会引发一个问题。如果模型中增加一个自变量,即使这个自变量在统计上并不显著, R2R2的值也会变大。因此为了避免这个问题。提出了 调整的多种判定系数(adjusted multiple coefficient of determination):

R2a=1−(1−R2)(n−1n−k−1)

Ra2=1−(1−R2)(n−1n−k−1)

R2aRa2 同时考虑了样本量 (n)(n) 和模型中自变量的个数 (k)(k) 的影响,这就使得 R2aRa2 的值永远小于 R2R2,而且 R2aRa2 的值不会因为模型中自变量的个数增多而逐渐接近于 11.

(2 ) R2R2 的平方根成为多重相关系数,也称为复相关系数, 它度量了因变量同 kk 个自变量的相关程度。

3.2 估计标准误差

同一元线性回归一样,多元回归中的估计标准误差也是误差项 εε 的方差 σ2σ2 的一个估计值,

se=SSEn−k−1−−−−−−−−√=MSE−−−−−√

se=SSEn−k−1=MSE

4. 显著性检验

在此重点说明,在一元线性回归中,线性关系的检验 (F检验)(F检验) 和回归系数的检验 (t检验)(t检验) 是等价的。 但是在多元回归中,线性关系的检验主要是检验因变量同多个自变量线性关系是否显著,在 kk 个自变量中,只要有一个自变量与因变量的线性关系显著, F检验F检验 就能通过,但这不一定意味着每个自变量与因变量的关系都显著。回归系数检验则是对每个回归系数分别进行单独的检验,它主要用于检验每个自变量对因变量的影响是否都显著。如果某个自变量没有通过检验,就意味着这个自变量对因变量的影响不显著,也许就没有必要将这个自变量放进回归模型中。

4.1 线性关系的检验

步骤:

(1):提出假设

H0:β1=β2=…=βk=0

H0:β1=β2=…=βk=0

H1:β1,β2,…=βk至少有一个不等于0

H1:β1,β2,…=βk至少有一个不等于0

(2):计算检验的统计量F.

F=SSR/kSSE/(n−k−1)≈F(k,n−k−1)

F=SSR/kSSE/(n−k−1)≈F(k,n−k−1)

(3):作出统计决策。

4.2 线性关系的检验

步骤:

(1):提出假设

H0:βi=0

H0:βi=0

H1:βi≠0

H1:βi≠0

(2):计算检验的统计量F.

ti=βi^sβi^≈t(n−k−1)

ti=βi^sβi^≈t(n−k−1)

(3):作出统计决策。

5.1 多重共线性

多重共线性:当回归模型中两个或两个以上的变量彼此相关时,则称回归模型中存在多重共线性。

多重共线性的判别:

(1)模型中中各对自变量之间显著相关

(2)当模型的线性关系检验 (F检验)(F检验) 显著时,几乎所有的回归系数 βiβi 的 tt 检验却不显著。

(3)回归系数的正负号与预期的相反。

(4)容忍度(tolerance) 与 方差扩大因子(variance inflation factor, VIF).

容忍度:某个变量的容忍度等于 1 减去该自变量为因变量而其他 k−1k−1 个自变量为预测变量时所得到的线性回归模型的判定系数。即 1−R2i1−Ri2。 容忍度越小,多重共线性越严重。通常认为 容忍度小于 0.1 时,存在严重的多重共线性。

方差扩大因子:容忍度的倒数。 因此,VIFVIF 越大,多重共线性越严重,一般认为 VIFVIF 的值大于10时,存在严重的多重共线性。

5.2 多重共线性的处理

常见的两种办法:

(1)将一个或多个相关的自变量从模型中剔除,使保留的自变量尽可能不相关。

(2)如果要在模型中保留所有的自变量,那么应该:

(2.1)避免根据 tt统计量对单个参数 ββ 进行检验,

(2.2)对因变量 yy 值的推断(预测和估计)限定在自变量样本值的范围内。

5.3选择变量避免共线性的几种方式,

在建立回归模型时,我们总是希望用最少的变量来说明问题,选择自变量的原则通常是对统计量进行显著性检验,检验的根据是:将一个或一个以上的自变量引入回归模型中时,是否使残差平方和 (SSE)(SSE) 显著减少,如果增加一个自变量使残差平方和 (SSE)(SSE) 显著减少,则说明有必要将这个变量引入回归模型中,否则,没有必要将这个变量引入回归模型中。确定在模型中引入自变量 xixi 是否使残差平方和 (SSE)(SSE) 显著减少的方法,就是使用 FF 统计量的值作为一个标准,以此来确定在模型中增加一个自变量,还是从模型中剔除一个自变量。

变量选择方式:

5.3.1 向前选择;

第一步: 对 kk 个自变量分别与因变量 yy 的一元线性回归模型,共有 kk 个,然后找到 FF 统计量的值最大的模型及其自变量 xixi 并将其首先引入模型。

第二步: 在已经引入模型的 xixi 的基础上,再分别拟合 xixi 与模型外的 k−1k−1 个自变量的线性回归模型,挑选出 FF 值最大的含有两个自变量的模型, 依次循环、直到增加自变量不能导致 SSESSE 显著增加为止,

5.3.2向后剔除

第一步:先对所有的自变量进行线性回归模型。然后考察 pkpk 个去掉一个自变量的模型,使模型的SSE值减小最少的自变量被挑选出来从模型中剔除,

第二步:考察 p−1p−1 个再去掉一个自变量的模型,使模型的SSE值减小最少的自变量被挑选出来从模型中剔除,直到剔除一个自变量不会使SSE值显著减小为止,这时,模型中的所剩自变量自然都是显著的。

5.3.3逐步回归

是上面两个的结合、考虑的比较全,以后就用这个就可以。

具体的分析过程、咱们以spss的多元回归分析结果为例。

文章知识点与官方知识档案匹配

算法技能树首页概览

31292 人正在系统学习中

点击阅读全文

打开CSDN,阅读体验更佳

线性回归与非线性回归em分析/em简明教程(python版)-全程干货无废话

p 本课程主要讲述如何使用python进行线性回归与非线性回归分析,包括: /p p br / /p ul li 基于statsmodel的线性回归方法 /li li 基于sklearn的线性回归方法 /li li 基于Numpy的一元多项式非线性回归方法 /li li 基于sklearn的多元多项式非线性回归方法 /li li 基于scipy的通用曲线拟合非线性回归方法 /li /ul

继续访问

最新发布 判别分析在SPSS上的实现与结果分析——基于SPSS实验报告

已知分组类别,判断样本的类别

继续访问

多元回归分析(实例,讲解,详实).doc

非常好的多元回归分析资料。 多元回归分析原理 回归分析是一种处理变量的统计相关关系的一种数理统计方法。回归分析的基本思想是: 虽然自变量和因变量之间没有严格的、确定性的函数关系, 但可以设法找出最能代表它们之间关系的数学表达形式。

SPSS多元回归分析实例

用SPSS 在大多数的实际问题中,影响因变量的因素不是一个而是多个,我们称这类回问题为多元回归分析。可以建立因变量y与各自变量xj(j=1,2,3,…,n)之间的多元线性回归模型

SPSS的线性回归分析

使用SPSS软件进行线性回归分析,包括回归分析概述 线性回归分析 回归方程的统计检验 多元回归分析中的其他问题 线性回归分析的基本操作 线性回归分析的应用举例 曲线估计

spss进行多元线性回归并分析表格

本博客主要包含以下内容: 1.如何使用spss进行多元线性回归。 2.分析生成结果,并判断回归是否可行。 一、使用spss进行多元线性回归: 1.输入数据 2. 3. 4. 5. 6. 二、表格结果分析: R方是检验回归是否成功的重要要素之一,DW是残差独立性检验,衡量标准如下: 再看下一个表格: F的值是F检验的结果,他对应的P就是表格...

继续访问

《统计学》笔记:第12章 多元线性回归

《统计学(第六版)》贾俊平 第12章 多元线性回归 多元回归模型 multiple regression model 设因变量为y,k个自变量分别为x1,x2,…,xk,描述因变量y如何依赖于自变量x1,x2,…,xk和误差项ε的方程称为多元回归模型。其一般形式可表示为: y=β0+β1x1+β2x2+...+βkxk+ϵ y=\beta_0+\beta_1x_1+\beta_2x_2+...+\beta_kx_k+\epsilon y=β0+β1x1+β2x2+...+βkxk+ϵ 式中,β

继续访问

多元线性回归分析spss结果解读_Spss的线性回归做法及结果解读

上一节我们讲过了eviews做多元回归,但是很多同学做问卷之类的都需要用到spss,所以这节我教一下大家如何用spss做多元回归,并对结果进行解读,再对大家所疑惑的显著水平做一些白话的解释。一.线性回归的操作将因变量和自变量移入对应的框中,方法选择进入就好了。方法这里我们最多用的就是进入和逐步。二.回归模型的结果解读模型汇总模型RR 方调整 R 方标准 估计的误差1.905a.818.8...

继续访问

多重共线性详解

目录 1、多重共线性的现象 2、出现的原因 3、判别标准 4、检验方法 5、多重共线性有什么影响 6、多重共线性处理方法 7、其他说明 8、多重共线性识别-python代码8.1、vif检验8.2 相关系数8.3 聚类 9、宏观把握共线性问题9.1、共线性的一般性的影响9.2、共线性对线性回归、逻辑回归的影响 10、statsmodel库DF Residuals:残差的自由度Df Model:模型参数个数(不包含常量参数)R-squared:可决系数adj-R-squared:修正可决系数 1、多重共线性

继续访问

r语言多元线性回归_第三十一讲 R多元线性回归中的多重共线性和方差膨胀因子...

在前两讲中,我们介绍了多元线性回归的概念以及多元线性回归中的交互作用。今天学习的主要内容是多元线性回归中的多重共线性和方差膨胀因子。1. 共线性的概念1共线性在多元回归中,两个或多个预测变量可能彼此相关,这种情况称为共线性(multicollinearity)。2多重共线性存在一种称为多重共线性的极端情况,其中三个或更多变量之间存在共线性,即使没有一对变量具有特别高的相关性。这意味着预测...

继续访问

Multiple Linear Regressions 多元线性回归 (R)

多元回归 多元回归是线性回归模型的自然延伸。它用于从几个解释变量预测响应的值。每个解释变量都有自己的系数。响应变量由所有变量乘以各自系数的组合来预测。 其基本原理与简单回归相同:我们寻求预测因子的线性组合,以最小化与结果变量的差异。 the parallel slopes model 平行斜率模型 数据展示 当我们遇到两个 变量的场景,其中一个是 数字型变量(温度),其中一个是 分类型变量(是否是周末),我们定义了下面这样的模型: X1 是“温度”,X2是 “是否是周末” ..

继续访问

多元线性回归分析spss结果解读_SPSS 多元线性回归结果重要参数解读

当自变量过多时,选择步进,此方法可以自动剔除对因变量影响小的变量。选择共线性诊断用于判断多个变量之间是否相互关联以及关联的程度德宾-沃森(Durbin-Watson)DW用来检验回归分析中的残差项是否存在自相关(序列相关)现象“DEPENDNT”:因变量“ZPRED”:标准化预测值“ZRESID”:标准化残差“DRESID”:删除残差“ADJPRED”:调节预测值“SRESID”:学生化残差“SD...

继续访问

回归方程的拟合优度-多重判定系数-估计标准误差

2019独角兽企业重金招聘Python工程师标准 ...

继续访问

多元线性回归原理

例子先行 一元线性:拿房价预测来说,房价就只与一个特征size(feet^2)有关: 多元线性: 房子除了面积,还会有其他的特征:number of bedrooms;number of floors; age of home....,为了引入这些特征,有了多元线性回归,x1,x2,x3,x4为特征,y为预测的价格。 符号引入: n:特征的数量 ...

继续访问

SPSS软件介绍

SPSS软件界面描述 IBM SPSS是目前常用的一种统计分析软件,SPSS(Statistical Product and Service Solutions)是统计产品和服务解决方案软件,操作简单,无需写代码,只需确定要分析的数据及之间的因变、自变关系,以及需要做单因素、多因素、混合等分析即可。 SPSS的基本功能包括数据管理、统计分析、图表分析、输出管理等等。SPSS统计分析过程包括描述性统计、均值比较、一般线性模型、相关分析、回归分析、对数线性模型、聚类分析、数据简化、生存分析、时间序列分析、多重响

继续访问

多重共线性一些指标解释

ANOVA中 F检验是对整个模型而已的,看是不是自变量系数不全为0,这里F检验值23,对应P概率=0,显著性P0.05,H1成立,说明显著性非常高 系数中 t检验则是分别针对某个自变量的,看每个自变量是否有显著预测效力。这里t检验对应概率大于0.05,即显著性一列为0.23和0.48,说明显著性很差 SPSS对于多重共线性的判断指标有以下几种:容忍度(Tolerance)、方差膨胀因子(V...

继续访问

第12章 多元线性回归-整理2

12.2 回归方程的拟合优度 12.2.1 多重判定系数 多重判定系数(multiple coefficient of determination)是多元回归中的回归平方和占总平方和的比例,它是度量多元回归方程拟合程度的一个统计量,反映了因变量y的变差中被估计的回归方程所解释的比例。 R2=SSRSST=1−SSESSTR^2=\frac{SSR}{SST}=1-\frac{SSE}{SST}R2=SSTSSR=1−SSTSSE调整的多重判定系数: Ra2=1−(1−R2)(n−1n−k−1)R^2_

继续访问

热门推荐 SPSS多元线性回归输出结果的详细解释

先说一句题外话,如果当年在大学里数理统计等课程结合SPSS,SAS,R等软件来讲,应该效果会好很多。 最近做了一些用SPSS进行线性回归的实验,还是感觉很多细节把握不好,这里结合我的实验结果,以及网上别人的介绍总结一下,先贴几张SPSS的输出: 下面简单解释一下这三张图中的结果: 第一个表模型汇总表中,R表示拟合优度(goodness of fit),它是用来衡量估计的模型对观测...

继续访问

多元回归分析--学习笔记

回归系数解释:回多元回归情形下,对每一个回归系数的解释如下,当所有其他自变量保持不变时,bi是因变量y对应于自变量xi改变一个单位时所做的改变的估计值。 多元判定系数(R-sq):计算方法同简单线性回归,乘以100即可解释为:因变量y中的变异性能被估计多元线性回归方程解释的百分比 修正多元判定系数:多元判定系数的值总是随着新的自变量进入模型而增加,即使新增的变量在统计学上并不显

python里面多元非线性回归有哪些方法

SciPy 里面的子函数库optimize, 一般情况下可用curve_fit函数直接拟合或者leastsq做最小二乘

python数据统计分析

1. 常用函数库

  scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立的statsmodels包。

 scipy的stats包含一些比较基本的工具,比如:t检验,正态性检验,卡方检验之类,statsmodels提供了更为系统的统计模型,包括线性模型,时序分析,还包含数据集,做图工具等等。

2. 小样本数据的正态性检验

(1) 用途

 夏皮罗维尔克检验法 (Shapiro-Wilk) 用于检验参数提供的一组小样本数据线是否符合正态分布,统计量越大则表示数据越符合正态分布,但是在非正态分布的小样本数据中也经常会出现较大的W值。需要查表来估计其概率。由于原假设是其符合正态分布,所以当P值小于指定显著水平时表示其不符合正态分布。

 正态性检验是数据分析的第一步,数据是否符合正态性决定了后续使用不同的分析和预测方法,当数据不符合正态性分布时,我们可以通过不同的转换方法把非正太态数据转换成正态分布后再使用相应的统计方法进行下一步操作。

(2) 示例

(3) 结果分析

 返回结果 p-value=0.029035290703177452,比指定的显著水平(一般为5%)小,则拒绝假设:x不服从正态分布。

3. 检验样本是否服务某一分布

(1) 用途

 科尔莫戈罗夫检验(Kolmogorov-Smirnov test),检验样本数据是否服从某一分布,仅适用于连续分布的检验。下例中用它检验正态分布。

(2) 示例

(3) 结果分析

 生成300个服从N(0,1)标准正态分布的随机数,在使用k-s检验该数据是否服从正态分布,提出假设:x从正态分布。最终返回的结果,p-value=0.9260909172362317,比指定的显著水平(一般为5%)大,则我们不能拒绝假设:x服从正态分布。这并不是说x服从正态分布一定是正确的,而是说没有充分的证据证明x不服从正态分布。因此我们的假设被接受,认为x服从正态分布。如果p-value小于我们指定的显著性水平,则我们可以肯定地拒绝提出的假设,认为x肯定不服从正态分布,这个拒绝是绝对正确的。

4.方差齐性检验

(1) 用途

 方差反映了一组数据与其平均值的偏离程度,方差齐性检验用以检验两组或多组数据与其平均值偏离程度是否存在差异,也是很多检验和算法的先决条件。

(2) 示例

(3) 结果分析

 返回结果 p-value=0.19337536323599344, 比指定的显著水平(假设为5%)大,认为两组数据具有方差齐性。

5. 图形描述相关性

(1) 用途

 最常用的两变量相关性分析,是用作图描述相关性,图的横轴是一个变量,纵轴是另一变量,画散点图,从图中可以直观地看到相关性的方向和强弱,线性正相关一般形成由左下到右上的图形;负面相关则是从左上到右下的图形,还有一些非线性相关也能从图中观察到。

(2) 示例

(3) 结果分析

 从图中可以看到明显的正相关趋势。

6. 正态资料的相关分析

(1) 用途

 皮尔森相关系数(Pearson correlation coefficient)是反应两变量之间线性相关程度的统计量,用它来分析正态分布的两个连续型变量之间的相关性。常用于分析自变量之间,以及自变量和因变量之间的相关性。

(2) 示例

(3) 结果分析

 返回结果的第一个值为相关系数表示线性相关程度,其取值范围在[-1,1],绝对值越接近1,说明两个变量的相关性越强,绝对值越接近0说明两个变量的相关性越差。当两个变量完全不相关时相关系数为0。第二个值为p-value,统计学上,一般当p-value0.05时,可以认为两变量存在相关性。

7. 非正态资料的相关分析

(1) 用途

 斯皮尔曼等级相关系数(Spearman’s correlation coefficient for ranked data ),它主要用于评价顺序变量间的线性相关关系,在计算过程中,只考虑变量值的顺序(rank, 值或称等级),而不考虑变量值的大小。常用于计算类型变量的相关性。

(2) 示例

(3) 结果分析

 返回结果的第一个值为相关系数表示线性相关程度,本例中correlation趋近于1表示正相关。第二个值为p-value,p-value越小,表示相关程度越显著。

8. 单样本T检验

(1) 用途

 单样本T检验,用于检验数据是否来自一致均值的总体,T检验主要是以均值为核心的检验。注意以下几种T检验都是双侧T检验。

(2) 示例

(3) 结果分析

 本例中生成了2列100行的数组,ttest_1samp的第二个参数是分别对两列估计的均值,p-value返回结果,第一列1.47820719e-06比指定的显著水平(一般为5%)小,认为差异显著,拒绝假设;第二列2.83088106e-01大于指定显著水平,不能拒绝假设:服从正态分布。

9. 两独立样本T检验

(1) 用途

 由于比较两组数据是否来自于同一正态分布的总体。注意:如果要比较的两组数据不满足方差齐性, 需要在ttest_ind()函数中添加参数equal_var = False。

(2) 示例

(3) 结果分析

 返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.19313343989106416,比指定的显著水平(一般为5%)大,不能拒绝假设,两组数据来自于同一总结,两组数据之间无差异。

10. 配对样本T检验

(1) 用途

 配对样本T检验可视为单样本T检验的扩展,检验的对象由一群来自正态分布独立样本更改为二群配对样本观测值之差。它常用于比较同一受试对象处理的前后差异,或者按照某一条件进行两两配对分别给与不同处理的受试对象之间是否存在差异。

(2) 示例

(3) 结果分析

 返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.80964043445811551,比指定的显著水平(一般为5%)大,不能拒绝假设。

11. 单因素方差分析

(1) 用途

 方差分析(Analysis of Variance,简称ANOVA),又称F检验,用于两个及两个以上样本均数差别的显著性检验。方差分析主要是考虑各组之间的平均数差别。

 单因素方差分析(One-wayAnova),是检验由单一因素影响的多组样本某因变量的均值是否有显著差异。

 当因变量Y是数值型,自变量X是分类值,通常的做法是按X的类别把实例成分几组,分析Y值在X的不同分组中是否存在差异。

(2) 示例

(3) 结果分析

 返回结果的第一个值为统计量,它由组间差异除以组间差异得到,上例中组间差异很大,第二个返回值p-value=6.2231520821576832e-19小于边界值(一般为0.05),拒绝原假设, 即认为以上三组数据存在统计学差异,并不能判断是哪两组之间存在差异 。只有两组数据时,效果同 stats.levene 一样。

12. 多因素方差分析

(1) 用途

 当有两个或者两个以上自变量对因变量产生影响时,可以用多因素方差分析的方法来进行分析。它不仅要考虑每个因素的主效应,还要考虑因素之间的交互效应。

(2) 示例

(3) 结果分析

 上述程序定义了公式,公式中,"~"用于隔离因变量和自变量,”+“用于分隔各个自变量, ":"表示两个自变量交互影响。从返回结果的P值可以看出,X1和X2的值组间差异不大,而组合后的T:G的组间有明显差异。

13. 卡方检验

(1) 用途

 上面介绍的T检验是参数检验,卡方检验是一种非参数检验方法。相对来说,非参数检验对数据分布的要求比较宽松,并且也不要求太大数据量。卡方检验是一种对计数资料的假设检验方法,主要是比较理论频数和实际频数的吻合程度。常用于特征选择,比如,检验男人和女人在是否患有高血压上有无区别,如果有区别,则说明性别与是否患有高血压有关,在后续分析时就需要把性别这个分类变量放入模型训练。

 基本数据有R行C列, 故通称RC列联表(contingency table), 简称RC表,它是观测数据按两个或更多属性(定性变量)分类时所列出的频数表。

(2) 示例

(3) 结果分析

 卡方检验函数的参数是列联表中的频数,返回结果第一个值为统计量值,第二个结果为p-value值,p-value=0.54543425102570975,比指定的显著水平(一般5%)大,不能拒绝原假设,即相关性不显著。第三个结果是自由度,第四个结果的数组是列联表的期望值分布。

14. 单变量统计分析

(1) 用途

 单变量统计描述是数据分析中最简单的形式,其中被分析的数据只包含一个变量,不处理原因或关系。单变量分析的主要目的是通过对数据的统计描述了解当前数据的基本情况,并找出数据的分布模型。

 单变量数据统计描述从集中趋势上看,指标有:均值,中位数,分位数,众数;从离散程度上看,指标有:极差、四分位数、方差、标准差、协方差、变异系数,从分布上看,有偏度,峰度等。需要考虑的还有极大值,极小值(数值型变量)和频数,构成比(分类或等级变量)。

 此外,还可以用统计图直观展示数据分布特征,如:柱状图、正方图、箱式图、频率多边形和饼状图。

15. 多元线性回归

(1) 用途

 多元线性回归模型(multivariable linear regression model ),因变量Y(计量资料)往往受到多个变量X的影响,多元线性回归模型用于计算各个自变量对因变量的影响程度,可以认为是对多维空间中的点做线性拟合。

(2) 示例

(3) 结果分析

 直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P0.05则认为自变量具有统计学意义,从上例中可以看到收入INCOME最有显著性。

16. 逻辑回归

(1) 用途

 当因变量Y为2分类变量(或多分类变量时)可以用相应的logistic回归分析各个自变量对因变量的影响程度。

(2) 示例

(3) 结果分析

 直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P0.05则认为自变量具有统计学意义。

多元回归可以用一个数据集进行预测吗r

前几天写了一篇直接在PowerBI里面使用度量值做一元回归的内容,虽然灵活性很高,但是实际中对一个结果影响的因素是很多的,还是使用多元回归的场景更多。而且我们借助统计分析包不仅可以计算出回归参数,还可以看看一些衡量模型的重要指标,比如R2/调整的R2,还可以通过置信区间的设置来求出预测区间。

我们这次的案例是有四个影响GMV值得因素,UV访客数、推广费用的投入、整体商品降价水平(优惠力度)和客服的服务评分,通过计算这四个因素的具体影响值来求出预测GMV,本次使用的是在PowerBI数据集的基础上调用R script来实现,下次再来用Python实现。数据和模型会放在最后供下载学习使用,数据如下↓

下面开始实现,首先在PowerQuery里面加载数据,加载的数据和我们原始数据内容一样,当然如果是订单明细数据,只需要进行一下按日期Group by就行了。

这就是我们需要处理的数据样式,就是表格,在R语言里面叫做数据框,然后我们需要在PowerQuery里面调用R语言脚本,在Transform菜单下面最后一列↓

点击后就会出现R语言脚本的编辑器,这里就不介绍R语言如何实现多元线性回归模型的了,我记得之前R语言的集合里面有详细介绍《R语言_018回归》,有兴趣的可以翻去看看。主要就是使用lm拟合多个参数,然后我们这里再把拟合的结果求出来就行了,代码也很简单,如下↓

fit - lm(gmv ~ uv + promotion_exp + price_diff + service_score,

data=dataset)

df- data.frame(coef(fit))

names(df)[names(df)=="coef.fit."] - "coefficients"

df['variables'] - row.names(df)

再多说一句,不管是调用R语言还是Python,不管PowerQuery里面当前的流程是怎么命名的,在脚本编辑器里面的数据集都是用dataset命名的。最后运行结果如下↓

于是我们已经得到了我们最需要的几个参数,根据我们的历史数据,得出来的截距是-41045,uv的影响是12.62(每新增100个用户就会带来1262的GMV),费用投入影响是24.21(每投入100元带来2421的GMV),降价影响1074(每降价1元带来1074GMV),服务评分影响是8855(评分每增加0.1分GMV增加885)。总体看来各项因素对GMV都有一定的影响,在此基础上,我们如果想要达到目标的GMV,就可以从这几方面入手了。

然后回到PowerBI,我们把这几个参数用度量值写下来,再把公式写出来,DAX语句和结果如下↓

Intercept = CALCULATE(SUM('回归系数'[coefficients]),'回归系数'[variables]="(Intercept)")

UV = CALCULATE(SUM('回归系数'[coefficients]),'回归系数'[variables]="uv")

promotion_exp = CALCULATE(SUM('回归系数'[coefficients]),'回归系数'[variables]="promotion_exp")

price_diff = CALCULATE(SUM('回归系数'[coefficients]),'回归系数'[variables]="price_diff")

service_score = CALCULATE(SUM('回归系数'[coefficients]),'回归系数'[variables]="service_score")

关键值和预测GMV的公式我们都有了,我们就可以带入相关值进行预测了,只需要新建四个参数就行了,然后新建一个预测的度量值就行了,度量值和结果如下↓

预测公式 =

"预计GMV公式 = " UNICHAR(10)

FORMAT([Intercept],"#0")

" + UV*" FORMAT([UV],"#0.00")

" + 费用*" FORMAT([promotion_exp],"#0.00")

" + 降价*" FORMAT([price_diff],"#0")

" + 服务分*" FORMAT([service_score],"#0")

当然我们还没有结束,前面说过我们我们还可以加入很多值来判断这个模型的好坏,其中一个很重要的指标就是R2和调整的R2,当然我们还可以检验线性关系、共线性等问题。这里我们以R2举例,还是在PowerQuery里面来实现,只需要把R语言代码改一下就行了,代码和结果如下↓

fit - lm(gmv ~ uv + promotion_exp + price_diff + service_score,

data=dataset)

s1 - summary(fit)

df - data.frame(name = c("R2","R2ajd"),

values = c(s1$r.squared,s1$adj.r.squared))

得到了R2和调整的R2,0.78,说明这个多元线性回归模型还是相当的不错,如果在真实场景中有这么高的R2,就烧高香把。简单说明前面的4个因素就已经能够解释78%的结果了,价值非常高,再去找找其他因素整个模型就越来越完美了,然后我们照例把度量值建立起来,等一下放在图里面,DAX语句如下↓

R2 = CALCULATE(SUM([values]),'R2'[name]="R2")

R2ajd = CALCULATE(SUM([values]),'R2'[name]="R2ajd")

上面我们是进行点预测的,就是影响参数值固定的,变量后预测的结果是一个固定的值,有时候我们还想看看预测的区间,看看整个区间我们能不能够接受,这里我们就可以调用R语言里面回归拟合结果的置信区间范围值了,默认是95%的置信区间,我们就选用默认值,然后会求出区间两界限的参数值,R语言代码和结果如下↓

fit - lm(gmv ~ uv + promotion_exp + price_diff + service_score,

data=dataset)

dfc - confint(fit)#提供模型参数的置信区间(默认95%)

dfcd - data.frame(name = c("Intercept","uv","promotion_exp","price_diff","service_score"),

pct2.5 = dfc[,1],

pct97.5 = dfc[,2])

从结果我们就可以很清晰的看到上界和下界参数值了,然后我们再在PowerBI里面把各参数的度量值写出来,DAX语句如下↓

p25 Intercept = CALCULATE(SUM([pct2.5]),'置信区间'[name]="Intercept")

p25 price_diff = CALCULATE(SUM([pct2.5]),'置信区间'[name]="price_diff")

p25 promotion_exp = CALCULATE(SUM([pct2.5]),'置信区间'[name]="promotion_exp")

p25 service_score = CALCULATE(SUM([pct2.5]),'置信区间'[name]="service_score")

p25 UV = CALCULATE(SUM([pct2.5]),'置信区间'[name]="uv")

p97 Intercept = CALCULATE(SUM([pct97.5]),'置信区间'[name]="Intercept")

p97 price_diff = CALCULATE(SUM([pct97.5]),'置信区间'[name]="price_diff")

p97 promotion_exp = CALCULATE(SUM([pct97.5]),'置信区间'[name]="promotion_exp")

p97 service_score = CALCULATE(SUM([pct97.5]),'置信区间'[name]="service_score")

p97 UV = CALCULATE(SUM([pct97.5]),'置信区间'[name]="uv")

然后根据度量值,把上下界的GMV预测函数写出来,顺便把合并的区间写出来,DAX语句如下↓

预计GMV上线 =

[p97 Intercept] + [p97 UV]*[UV Value] + [p97 promotion_exp]*[推广费用 Value] + [p97 price_diff]*[价格降低 Value] + [p97 service_score]*[服务评分 Value]

预计GMV下线 =

[p25 Intercept] + [p25 UV]*[UV Value] + [p25 promotion_exp]*[推广费用 Value] + [p25 price_diff]*[价格降低 Value] + [p25 service_score]*[服务评分 Value]

预计GMV区间 = "[" FORMAT([预计GMV下线],"#,##0") " - " FORMAT([预计GMV上线],"#,##0") "]"

最后我们把所有度量值,点预测和区间预测结果,R2值放在一起,只需要进行参数调整就可以来进行数据预测了↓

当然这里我们不能够选择历史数据的范围,如果我们需要调整历史数据的范围,我们只能在PowerQuery里面进行调整,或者我们可以写固定的日期值,比如我们可以固定最近90天或者180天的数据,这里每天数据就会自动滚动变化了,用最新的只预测效果应该也会更好,我们这里使用90天的数据来看一下结果↓

可以看到结果还是有所差异的,不过R2还是很不错,说明这个模型还是不错的,今天写的有点多了,过两天再来用Python实现一下。

如何用python实现含有虚拟自变量的回归

利用python进行线性回归

理解什么是线性回归

线性回归也被称为最小二乘法回归(Linear Regression, also called Ordinary Least-Squares (OLS) Regression)。它的数学模型是这样的:

y = a+ b* x+e

其中,a 被称为常数项或截距;b 被称为模型的回归系数或斜率;e 为误差项。a 和 b 是模型的参数。

当然,模型的参数只能从样本数据中估计出来:

y'= a' + b'* x

我们的目标是选择合适的参数,让这一线性模型最好地拟合观测值。拟合程度越高,模型越好。

那么,接下来的问题就是,我们如何判断拟合的质量呢?

这一线性模型可以用二维平面上的一条直线来表示,被称为回归线。

模型的拟合程度越高,也即意味着样本点围绕回归线越紧密。

如何计算样本点与回归线之间的紧密程度呢?

高斯和勒让德找到的方法是:被选择的参数,应该使算出来的回归线与观测值之差的平房和最小。用函数表示为:

这被称为最小二乘法。最小二乘法的原理是这样的:当预测值和实际值距离的平方和最小时,就选定模型中的两个参数(a 和 b)。这一模型并不一定反映解释变量和反应变量真实的关系。但它的计算成本低;相比复杂模型更容易解释。

模型估计出来后,我们要回答的问题是:

我们的模型拟合程度如何?或者说,这个模型对因变量的解释力如何?(R2)

整个模型是否能显著预测因变量的变化?(F 检验)

每个自变量是否能显著预测因变量的变化?(t 检验)

首先回答第一个问题。为了评估模型的拟合程度如何,我们必须有一个可以比较的基线模型。

如果让你预测一个人的体重是多少?在没有任何额外信息的情况下,你可能会用平均值来预测,尽管会存在一定误差,但总比瞎猜好。

现在,如果你知道他的身高信息,你的预测值肯定与平均值不一样。额外信息相比平均值更能准确地预测被预测的变量的能力,就代表模型的解释力大小。

上图中,SSA 代表由自变量 x 引起的 y 的离差平方和,即回归平方和,代表回归模型的解释力;SSE 代表由随机因素引起的 y 的离差平方和,即剩余平方和,代表回归模型未能解释的部分;SST 为总的离差平方和,即我们仅凭 y 的平均值去估计 y 时所产生的误差。

用模型能够解释的变异除以总的变异就是模型的拟合程度:

R2=SSA/SST=1-SSE

R2(R 的平方)也被称为决定系数或判定系数。

第二个问题,我们的模型是否显著预测了 y 的变化?

假设 y 与 x 的线性关系不明显,那么 SSA 相对 SSE 占有较大的比例的概率则越小。换句话说,在 y 与 x 无线性关系的前提下,SSA 相对 SSE 的占比越高的概率是越小的,这会呈现一定的概率分布。统计学家告诉我们它满足 F 分布,就像这样:

如果 SSA 相对 SSE 占比较大的情况出现了,比如根据 F 分布,这个值出现的概率小于 5%。那么,我们最好是拒绝 y 与 x 线性关系不显著的原始假设,认为二者存在显著的线性关系较为合适。

第三个问题,每个自变量是否能显著预测因变量的变化?换句话说,回归系数是否显著?

回归系数的显著性检验是围绕回归系数的抽样分布(t 分布)来进行的,推断过程类似于整个模型的检验过程,不赘言。

实际上,对于只有一个自变量的一元线性模型,模型的显著性检验和回归系数的检验是一致的,但对于多元线性模型来说,二者就不能等价了。

利用 statsmodels 进行最小二乘回归

#导入相应模块

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: import statsmodels.api as sm

#将数据导入 pandas 的 dataframe 对象,第一列(年份)作为行标签

In [4]: df=pd.read_csv('/Users/xiangzhendong/Downloads/vincentarelbundock-Rdatasets-1218370/csv/datasets/longley.csv', index_col=0)

#查看头部数据

In [5]: df.head()

Out[5]:

GNP.deflator      GNP  Unemployed  Armed.Forces  Population  Year  \

1947          83.0  234.289       235.6         159.0     107.608  1947

1948          88.5  259.426       232.5         145.6     108.632  1948

1949          88.2  258.054       368.2         161.6     109.773  1949

1950          89.5  284.599       335.1         165.0     110.929  1950

1951          96.2  328.975       209.9         309.9     112.075  1951

Employed

1947    60.323

1948    61.122

1949    60.171

1950    61.187

1951    63.221

#设置预测变量和结果变量,用 GNP 预测 Employed

In [6]: y=df.Employed #结果变量

In [7]: X=df.GNP #预测变量

#为模型增加常数项,即回归线在 y 轴上的截距

In [8]: X=sm.add_constant(X)

#执行最小二乘回归,X 可以是 numpy array 或 pandas dataframe(行数等于数据点个数,列数为预测变量个数),y 可以是一维数组(numpy array)或 pandas series

In [10]: est=sm.OLS(y,X)

使用 OLS 对象的 fit() 方法来进行模型拟合

In [11]: est=est.fit()

#查看模型拟合的结果

In [12]: est.summary()

Out[12]:

#查看最终模型的参数

In [13]: est.params

Out[13]:

const    51.843590

GNP       0.034752

dtype: float64

#选择 100 个从最小值到最大值平均分布(equally spaced)的数据点

In [14]: X_prime=np.linspace(X.GNP.min(), X.GNP.max(),100)[:,np.newaxis]

In [15]: X_prime=sm.add_constant(X_prime)

#计算预测值

In [16]: y_hat=est.predict(X_prime)

In [17]: plt.scatter(X.GNP, y, alpha=0.3) #画出原始数据

#分别给 x 轴和 y 轴命名

In [18]: plt.xlabel("Gross National Product")

In [19]: plt.ylabel("Total Employment")

In [20]: plt.plot(X_prime[:,1], y_hat, 'r', alpha=0.9) #添加回归线,红色

多元线性回归(预测变量不止一个)

我们用一条直线来描述一元线性模型中预测变量和结果变量的关系,而在多元回归中,我们将用一个多维(p)空间来拟合多个预测变量。下面表现了两个预测变量的三维图形:商品的销量以及在电视和广播两种不同媒介的广告预算。

数学模型是:

Sales = beta_0 + beta_1*TV + beta_2*Radio

图中,白色的数据点是平面上的点,黑色的数据点事平面下的点。平面的颜色是由对应的商品销量的高低决定的,高是红色,低是蓝色。

利用 statsmodels 进行多元线性回归

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: import statsmodels.api as sm

In [4]: df_adv=pd.read_csv('g.csv',index_col=0)

In [6]: X=df_adv[['TV','Radio']]

In [7]: y=df_adv['Sales']

In [8]: df_adv.head()

Out[8]:

TV  Radio  Newspaper  Sales

1  230.1   37.8       69.2   22.1

2   44.5   39.3       45.1   10.4

3   17.2   45.9       69.3    9.3

4  151.5   41.3       58.5   18.5

5  180.8   10.8       58.4   12.9

In [9]: X=sm.add_constant(X)

In [10]: est=sm.OLS(y,X).fit()

In [11]: est.summary()

Out[11]:

你也可以使用 statsmodels 的 formula 模块来建立多元回归模型

In [12]: import statsmodels.formula.api as smf

In [13]: est=smf.ols(formula='Sales ~ TV + Radio',data=df_adv).fit()

处理分类变量

性别或地域都属于分类变量。

In [15]: df= pd.read_csv('httd.edu/~tibs/ElemStatLearn/datasets/SAheart.data', index_col=0)

In [16]: X=df.copy()

利用 dataframe 的 pop 方法将 chd 列单独提取出来

In [17]: y=X.pop('chd')

In [18]: df.head()

Out[18]:

sbp  tobacco   ldl  adiposity  famhist  typea  obesity  alcohol  \

row.names

1          160    12.00  5.73      23.11  Present     49    25.30    97.20

2          144     0.01  4.41      28.61   Absent     55    28.87     2.06

3          118     0.08  3.48      32.28  Present     52    29.14     3.81

4          170     7.50  6.41      38.03  Present     51    31.99    24.26

5          134    13.60  3.50      27.78  Present     60    25.99    57.34

age  chd

row.names

1           52    1

2           63    1

3           46    0

4           58    1

5           49    1

In [19]: y.groupby(X.famhist).mean()

Out[19]:

famhist

Absent     0.237037

Present    0.500000

Name: chd, dtype: float64

In [20]: import statsmodels.formula.api as smf

In [21]: df['famhist_ord']=pd.Categorical(df.famhist).labels

In [22]: est=smf.ols(formula="chd ~ famhist_ord", data=df).fit()

分类变量的编码方式有许多,其中一种编码方式是虚拟变量编码(dummy-encoding),就是把一个 k 个水平的分类变量编码成 k-1 个二分变量。在 statsmodels 中使用 C 函数实现。

In [24]: est=smf.ols(formula="chd ~ C(famhist)", data=df).fit()

In [26]: est.summary()

Out[26]:

处理交互作用

随着教育年限(education)的增长,薪酬 (wage) 会增加吗?这种影响对男性和女性而言是一样的吗?

这里的问题就涉及性别与教育年限的交互作用。

换言之,教育年限对薪酬的影响是男女有别的。

#导入相关模块

In [1]: import pandas as pd

In [2]: import numpy as np

In [4]: import statsmodels.api as sm

#导入数据,存入 dataframe 对象

In [5]: df=pd.read_csv('/Users/xiangzhendong/Downloads/pydatafromweb/wages.csv')

In [6]: df[['Wage','Education','Sex']].tail()

Out[6]:

Wage  Education  Sex

529  11.36         18    0

530   6.10         12    1

531  23.25         17    1

532  19.88         12    0

533  15.38         16    0

由于性别是一个二分变量,我们可以绘制两条回归线,一条是 sex=0(男性),一条是 sex=1(女性)

#绘制散点图

In [7]: plt.scatter(df.Education,df.Wage, alpha=0.3)

In [9]: plt.xlabel('education')

In [10]: plt.ylabel('wage')

#linspace 的作用是生成从最小到最大的均匀分布的 n 个数

In [17]: education_linspace=np.linspace(df.Education.min(), df.Education.max(),100)

In [12]: import statsmodels.formula.api as smf

In [13]: est=smf.ols(formula='Wage ~ Education + Sex', data=df).fit()

In [18]: plt.plot(education_linspace, est.params[0]+est.params[1]education_linspace+est.params[2]0, 'r')

In [19]: plt.plot(education_linspace, est.params[0]+est.params[1]education_linspace+est.params[2]1, 'g')

以上两条线是平行的。这是因为分类变量只影响回归线的截距,不影响斜率。

接下来我们可以为回归模型增加交互项来探索交互效应。也就是说,对于两个类别,回归线的斜率是不一样的。

In [32]: plt.scatter(df.Education,df.Wage, alpha=0.3)

In [33]: plt.xlabel('education')

In [34]: plt.ylabel('wage')

#使用*代表我们的回归模型中除了交互效应,也包括两个变量的主效应;如果只想看交互效应,可以用:代替,但通常不会只看交互效应

In [35]: est=smf.ols(formula='Wage ~ Sex*Education', data=df).fit()

In [36]: plt.plot(education_linspace, est.params[0]+est.params[1]0+est.params[2]education_linspace+est.params[3]0education_linspace, 'r')

In [37]: plt.plot(education_linspace, est.params[0]+est.params[1]1+est.params[2]education_linspace+est.params[3]1education_linspace, 'g')

参考资料:

DataRobot | Ordinary Least Squares in Python

DataRoboe | Multiple Regression using Statsmodels

AnalyticsVidhya | 7 Types of Regression Techniques you should know!

python怎么保存回归结果

1、需要使用公式将回归结果计算出来。

2、选择回归。

3、结果将其另存为,另存为到word中就可以保存了。


网站栏目:python多元回归函数,python做多元回归分析
浏览地址:http://cdxtjz.cn/article/hdigec.html

其他资讯