• 首页
  • 博客
  • 留言墙
  • 关于

动态更新

喜欢我的内容的话不妨订阅支持一下 🫶
加入其他 0 位订阅者,每月一封,随时可以取消订阅。

© 2025 Cali Castle. 网站已开源:GitHub

首页博客留言墙关于
总浏览量 3.3万最近访客来自 Columbus, US🇺🇸
  • R 中回归相关函数概述
  • 回归过程一般性概述
  • R 多元线性回归
  • 数据介绍
  • 回归实现
  • 回归检验
  • 残差分析
  • 影响分析
  • 异方差检验
  • 共线性分析
  • 补充
  • 参考资料
基于R语言的多元线性回归
2015/07/06线性回归, R语言

基于R语言的多元线性回归

介绍使用R语言来进行线性回归建模。

1,234次点击9分钟阅读

由天池大数据竞赛带着我步入了数据挖掘的道路,现在有点停不下来了,感觉前面是一座巨大的 Pizza 山,从上往下看是平囊,但是,如果你从侧边看确实有胸的,突的还是很高的,也就是从不同的维度有不同的信息,哈。

R 中回归相关函数概述

下面只是介绍一些回归中可能用到的函数,如果碍眼,可以直接跳过。

回归过程一般性概述

  1. 模型假设:确定自变量和因变量有哪些
  2. 模型参数:确定回归方程的参数,即为回归系数
  3. 模型求解:利用样本数据,采用最小二乘法求出模型参数,统计上称为参数估计。然后进行回归方程的显著性检验,就是对假设来做假设检验,检验结果拒绝就认为方程是显著的。有三种方法:t 检验、F 检验、相关系数检验法。最后得到区间估计。

R 多元线性回归

数据介绍

对比与一元线性回归,多元的区别在于显著性检验要做两个:一个是方程的显著性检验,一个是系数的显著性检验。前者考察与所有的自变量之间是否存在相关关系;后者的假设是,关注的是每个自变量对因变量的影响是不是可有可无的。需要指出的是一元线性回归也需要或者也可以进行回归检验,但是由于它的自变量个数太少,想到对于多元的情况有差异。

还有一个区别是,在对系数做显著性检验后可能要剔除一些弱的变量,这就是变量选择与最优回归。

这里的数据使用的是天池大数据竞赛的数据。
关于数据的描述,请查看: 资金流入流出赛题与数据。

由于此次决赛是在阿里的云平台 ODPS 上进行数据处理和提交,于是我用 SQL 语句处理下数据之后,将其复制到本地进行调优。数据如下所示:

数据样例

简单说下第一列是日期,官方提供的是 20130701 至 20140831 的数据,但是由于 2013 年那个时候余额宝才刚兴起不久,超高的收益吸引大量的资金流入,从而会导致 2013 年的数据波动非常大。所以我这里选择的是 2014 年 4 月份到 8 月份的数据,这几个月是数据比较稳定,用户沉淀到了一定的时期。中间的好几列都是我自己构造特征,与时间日期相关的特征,很明显这个资金的流入流出是有一定周期性。而最后的两列 purchase_amt 和 redeem_amt 分别表示的是每一天十万个用户总的申购和总的赎回量。单位是分。

回归实现

R 中实现多元回归的方式和上一篇一样,利用 lm() 函数。如下是实现多元回归的方法:

执行完上面的代码之后,我们同样可以使用 summary() 函数查看回归方程:

从上面的输出结果我们看出,有几个解释变量的 P 值超过了 0.05,但是回归方程的检验统计量 F 对应的 P 值远远小于 0.05,修正的可决系数也较高,说明回归效果较显著。这似乎是矛盾的,产生这个矛盾的原因是这几个解释变量之间存在共线性。下面说明如何检验回归方程和选择最优解释变量组合。

回归检验

异常值往往会使回归模型不稳定,回归诊断主要内容有:残差分析、影响分析、异方差检验和共线性检验。

残差分析

得到的回归模型,进行显著性检验后,还要在做残差分析(预测值和实际值之间的差),看假设是否成立。画出残差图。理论上,它是相互独立,近似服从 N(0,1) 分布。故残差散点应该随机分布在 -2 到 +2 的带状区域内。如下图:

方差非齐性时,有时可以通过对因变量做变换来改善。常用:开方变换,对数变换,倒数变换和 BOX-COX 变换。

如下是检验残差的齐性:

输出的结果如下:

显示的残差图较好的符合齐性。否则就要进一步处理。

影响分析

找出对回归结果影响很大的观测点就是影响分析。有四种度量方法:lm.influence()、cook.distance()、diffs()、covration()、influence.measures()。
当 Cook 距离 > 4/n 的点认为是强影响点,n 为样本容量。或者 covration 离 1 越远则影响越强。

这里我们以 influence.measure() 函数为例:

>influcen.measures(purchase_model)

输出结果中以 “*” 标识的数据点为强影响点。

异方差检验

对于多元线性回归模型,如果随机扰动项的方差并非是不变常数,则称为存在异方差。也就是说噪音的方差不是常数。如果存在异方差,则用传统的最小二乘法估计模型,得到的参数估计量不是有效估计量,甚至也不是渐近有效的估计量,此时也无法对模型参数进行有关显著性检验。

我们利用 bptest() 进行检验,使用前要先导入 lmtest 包。

p 值很小时我们认为存在异方差,此时该回归模型存在异方差。

修正异方差的一种方法:

之后输出的结果可以和前一次的对比,同时可以再次检查异方差存在与否。

共线性分析

计算解释变量相关稀疏矩阵的条件数 k,k < 100 多重共线性程度很小,100 < k < 1000 较强, k > 1000 严重

说明共线性比较强,此时我们就要进一步处理,要么手动的更改变量组合来看效果,或者利用函数 eigen() 寻找共线性强的解释变量组合,或者利用函数 step() 逐步回归法修正多重共线性。这里利用 step()。

补充

异常点检测
利用 plot 函数,画出四张图,从中查看效果:

四幅图依次为:

  1. 普通残差与拟合值的残差图
  2. 正态 QQ 的残差图(若残差是来自正态总体分布的样本,则 QQ 图中的点应该在一条直线上)
  3. 标准化残差开方与拟合值的残差图(对于近似服从正态分布的标准化残差,应该有 95% 的样本点落在 [-2,2] 区间内,这也好似判断异常点的直观方法)
  4. cook 统计量的残差图(cook 统计量值越大的点越可能是异常值,但具体阈值较难判别)

参考资料

  1. 回归分析入门
  2. 如何衡量多元线性回归模型优劣
  3. 统计与 R 入门 || 回归分析
  4. R 语言 线性回归
  5. R 语言进行简单多元回归的基本步骤