您的位置:首页 > 其它

数据科学之机器学习4:线性回归3

2014-05-09 14:41 435 查看


“文章原创,转载请注明出处”

这是介绍线性回归的最后一篇,首先回顾一下之前的两篇。第一篇主要就是介绍了如何去估计回归系数得到回归方程,以及在R语言中如何使用自带的函数去实现。第二篇主要介绍了对于回归方程和回归系数的显著性检验,以及给出了我自己写的一个处理线性回归的函数。
这一篇介绍线性回归中回归诊断的一些问题,也就是估计出回归方程,检验了回归方程的显著性以及回归系数的显著性后,对这个模型所做的进一步的诊断分析。然后对存在的问题进行探讨,选择不同的方式去解决这些问题。这大致可以分成三块:残差分析,影响分析以及共线性问题。


一、残差分析


1. 残差


首先看一看残差的定义,常用的残差大致有三种:残差,标准化残差以及学生化残差:

残差:ε^=y−y^=(1−H)y,其中H=X(XTX)−1X称作帽子矩阵;
标准化残差:ZRE=ε^/σ^
学生化残差:SREi=ε^i/(σ^1−hii−−−−−√),其中hii为帽子矩阵对角线上第i个元素。

R语言中
使用
residuals(),rstandard(),rstudent()
函数计算残差,标准化残差以及学生化残差。具体用法,请使用
help
函数查看。


2. 残差图


以残差为纵坐标,观测值、预测值活则观测时间等等作为横坐标的散点图,称为残差图

R语言中

1
2
3
4

model = lm(y~x1+x2)
y_pred = predict(model)
y_res = residuals(model)
plot(y_res ~ y_pred)


3. 异方差问题



a. 问题的提出


在进行回归方程估计之前,一般都会假设误差的方差是齐性的。如果残差图出现类似下面的情况,则这批数据可能存在异方差问题,即方差非齐性。

随着横坐标的增大,纵坐标的值波动越来越大;
随着横坐标的增大,纵坐标的值波动越来越小;
随着横坐标的增大,纵坐标的值波动复杂多变,没有系统关系;

大部分时候,考虑前两种就可以了。那么具体如何数值化地检验异方差呢,一般使用的是等级相关系数法,这里不做介绍(可到线性回归的书籍中寻找)。


b. 问题的解决


一般有两种方式解决异方差问题,一种是加权最小二乘;另一种是对因变量作适当的变化。

加权最小二乘
即是将回归系数的估计转化成:β^=(XTWX)−1XTWy,其中W是一个对角矩阵,用于给每一个数据点加上一个权重。一般使用“核”来对附近的点赋予较高的权重,常用的核就是高斯核,其对应的权重为:

wii=exp(∥x(i)−x∥−2k2)
从上式可以看出,点x离x(i)越近,所得到的权重越高。

对因变量作适当变化
常用的变换有:

z=y√
z=ln(y)(对数变换)
z=1/y
z=xλ−1λ(Box-Cox变换),其中λ=0时,即是对数变换


4. 异常点



a. 问题的提出


一般将标准化残差的绝对值大于等于2的称为可疑点;将标准化残差的绝对值大于等于3的称为异常点。


b. 问题的解决


一般来说,剔除异常数据即可。


5. 自相关问题


在作回归之前,总是会假设cov(εi,εj)=0,∀i≠j。但是实际情况下,可能并不满足这个假设,这就是存在了自相关问题。对于自相关问题,一般使用残差图,自相关系数以及DW检验去进行检验;而处理的方式一般是:迭代法和差分法。这里不做详细介绍,感兴趣的可以去找找相关材料。


二、影响分析

分析观测值对回归结果的影响,从而找出对回归结果影响较大的观测点的分析方法叫做影响分析。一般使用Cook距离去度量第i个观测值对回归影响大小,Cook距离的定义如下:

Di(M,MSE)=(β^(i)−β^)TM(β^(i)−β^)MSE
其中,M为观测数据的离差阵,MSE为回归模型的均方误差。一般∥Di∥⩾4/n时,称其为强影响点。

R语言中
使用
cooks.distance()
函数计算Cook距离。


三、共线性诊断

共线性是指,在多元线性回归中,自变量之间存在线性关系或者近似线性关系。如果出现这种情况,那么在模型内部就会隐藏部分变量的显著性,也会导致参数估计的误差增大,影响模型的稳定性。


a. 检验方法


常用的检验方法有特征值法,条件数和方差膨胀因子(VIF)。


特征值法


首先介绍一个结论:当矩阵XTX至少有一个特征根为0时,X的列向量间必存在多重共线性。
即可证:XTX有多少个特征根接近于零,设计阵X就有多少个多重共线性。

在R语言中
可以使用
eigen()
函数去计算特征值和特征向量。


条件数


上述的特征值法中,特征根近似为0,这个标准好想并不明确。那么这边就给出一个条件数的定义:

ki=λmλi
其中,λm为最大的那个特征根。一般认为,若ki介于10到30之间为弱相关;在30到100之间为中等相关;超过100为强相关。

在R语言中
可以使用
kappa()
函数计算条件数。


VIF


定义VIF为:

VIFi=第i个回归系数的方差自变量不相关时第i个回归系数的方差=11−R2i=1TOLi
其中TOLi称为容忍度;R2i为自变量xi对其余自变量的复决定系数。一般认为,VIF超过10,模型就存在共线性问题。

在R语言中
可以使用
vif()
函数计算VIF的值。


b. 多重共线性的处理


一般有这样几种处理方式:

剔除一些不重要的解释变量

使用变量选择的方式剔除部分变量,作回归;
检验VIF,若存在共线性,删除VIF值最大的变量,作回归;
再次检验VIF,若还存在共线性,再删除其中VIF值最大的那个;
重复直至消除共线性。

增大样本容量
当变量的个数接近样本容量的数值时,自变量间容易产生多重共线性。所以增大样本容量是解决多重共线性的一种方式,但是在现实中,这种做法基本不可能。

主成分回归
这是一个比较大的主题,这里不做介绍。

有偏估计等等。


最后

到这里,除了变量选择问题,线性回归的内容基本上就已经梳理了一遍。变量选择问题,方法简单的非常简单,难的非常难(像lasso),所以暂时还不想写这些内容。

转自:http://jackycode.github.io/blog/2014/04/02/linear-regression3/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: