多元线性回归模型
的最小二乘估计结果为
如果存在较强的共线性,即 中各列向量之间存在较强的相关性,会导致的从而引起对角线上的 值很大
并且不一样的样本也会导致参数估计值变化非常大。即参数估计量的方差也增大,对参数的估计会不准确。
因此,是否可以删除掉一些相关性较强的变量呢?如果p个变量之间具有较强的相关性,那么又应当删除哪几个是比较好的呢?
本文介绍两种方法能够判断如何对具有多重共线性的模型进行变量剔除。即岭回归和LASSO(注:LASSO是在岭回归的基础上发展的)
既然共线性会导致参数估计值变得非常大,那么给最小二乘的目标函数加上基础上加上一个对 的惩罚函数
最小化新的目标函数的时候便也需要同时考虑到 值的大小,不能过大。
在惩罚函数上加上系数k
随着k增大,共线性的影响将越来越小。在不断增大惩罚函数系数的过程中,画下估计参数(k)的变化情况,即为岭迹。
通过岭迹的形状来判断我们是否要剔除掉该参数(例如:岭迹波动很大,说明该变量参数有共线性)。
步骤:
式中,t为 的函数。越大,t越小(这里就是k)
如上图中,相切点便是岭回归得出来的解。是岭回归的几何意义。
可以看出,岭回归就是要控制 的变化范围,弱化共线性对大小的影响。
解得的岭回归的估计结果为:
由岭回归的目标函数可以看出,惩罚函数的系数 (或者k)越大,目标函数中惩罚函数所占的重要性越高。
从而估计参数 也就越小了。我们称系数 (或者k)为岭参数。因为岭参数不是唯一的,所以我们得到的岭回归估计 实际是回归参数 的一个估计族。例如下表中:
将上表中回归估计参数与岭回归参数k之间的变化关系用一张图来表示,便是岭迹图
当不存在奇异性是,岭迹应该是稳定地逐渐趋于0
当存在奇异性时,由岭回归的参数估计结果可以看出来,刚开始k不够大时,奇异性并没有得到太大的改变,所以随着k的变化,回归的估计参数震动很大,当k足够大时,奇异性的影响逐渐减少,从而估计参数的值变的逐渐稳定。
那么,问题来了,趋于0到底是怎样才能看出来呢?能不能程序自动判断呢?如果有好几个回归系数不稳定的,又应该去掉哪个呢?这就需要根据去掉某个变量之后的回归效果来定。这就涉及到扩展的岭回归方法LASSO了。
在此之前,先用R语言运行一个岭回归的例子
R语言中岭回归的包是MASS, 运行岭回归的函数是lm.ridge
1.载入MASS包,使用R内置的longley数据集(宏观经济数据)做为例子。(注:宏观经济数据一般而言都会存在比较严重的共线性问题(
发现有几个变量的结果并不显著,那么是否要删除掉这几个变量呢?我们用岭回归进行变量的剔除。
待解决疑问:到底哪个颜色代表了哪个变量啊。。。尼玛
上图可以用肉眼去选择k值,然后放入lambda中(lm.ridge函数中lambda默认是0)
Selectionator operator)算法
岭回归:
LASSO
可以看出,LASSO的惩罚函数是绝对值形式,其函数形式就更为压缩,用几何意义来说明会更为直观:
下图是LASSO模型的几何表述
下图是岭回归的几何表述
红色是求最小值区域,而蓝色则是约束条件区域。
可以发现,LASSO由于是绝对值形式,其约束条件更为"尖锐"。回归的估计参数更容易为0。
上图左边是岭回归,右边是LASSO。 在每个图中从右往左,k值逐渐增大,可以看到,LASSO在k值增大的过程中,
回归的参数估计经常会有为0的状况,对于这种参数,我们便可以选择对它们进行剔除。便不用我们进行人工选择剔除变量,而可以让程序自动根据是否为0来剔除掉变量了。
现在问题是,LASSO回归由于其惩罚函数是绝对值的形式,难以得到一个确定的估计参数的表达式,如何解决呢?
统计学家们发现,LASSO回归与最小角回归的计算结果是高度相似的,因此可以用最小角回归LAR的结果来对LASSO进行估计。(具体的思路和证明非常复杂,以后有空继续写篇博文进行阐述)。
对LAR模型进行一定的修正后,便能够让LAR的结果与LASSO基本上一致了。因此,我们用LAR的算法来对LASSO进行计算。
包:lars
Library(lars)
使用longley数据集
上图的结果是用LAR算法对线性回归进行最小二乘回归的结果。
可以看到Year和Employed这两个变量被反复删除和使用,这两个是应当被删除掉的
在summary的结果中,CP代表的是对共线性的判断,可以看到,模型在第8步的时候
共线性是最小的,结合laa中第8步的状况,所以剔除掉Year和Employed这两个变量是
比较合适的。