岭回归与Lasso回归

本文探讨了岭回归和Lasso回归在解决多元线性回归中多重共线性问题的方法,包括岭回归的理论推导、岭迹分析和VIF法选择λ,以及Lasso回归的压缩特性。通过实际案例演示了如何在Matlab和Stata中实施这两种方法,以及它们在数据集中的应用效果。
摘要由CSDN通过智能技术生成

岭回归与Lasso回归

为什么引入岭回归

传统的多元线性回归可能存在多重共线性,岭回归可以看作是传统多元线性回归的升级版,可以打破多重共线性的限制。

和多元线性回归相似,岭回归的参数估计也是采用OLS(极大似然估计)原理

多元线性回归的参数估计:
β ^ = a r g min ⁡ β ^ ∑ i = 1 n ( y i − x i ′ β ^ ) 2 \hat{\beta}=\mathrm{arg}\min_{\hat{\beta}}\sum_{i=1}^n(y_i-x_i^{\prime}\hat{\beta})^2 β^=argβ^mini=1n(yixiβ^)2
其中,
β ^ = ( β 1 ^ , β 2 ^ , ⋯   , β k ^ ) ′ \hat{\beta}=(\hat{\beta_1},\hat{\beta_2},\cdots,\hat{\beta_k})^{\prime} β^=(β1^,β2^,,βk^)
岭回归的参数估计:
β ^ = a r g min ⁡ β ^ ∑ i = 1 n ( y i − x i ′ β ^ ) 2 + λ ∑ i = 1 n β i 2 ^ = a r g min ⁡ β ^ ∑ i = 1 n ( Y − X ′ β ^ ) ′ ( Y − X ′ β ^ ) + λ ∑ i = 1 n β ′ ^ β ^ \hat{\beta}=\mathrm{arg}\min_{\hat{\beta}}\sum_{i=1}^n(y_i-x_i^{\prime}\hat{\beta})^2+\lambda\sum_{i=1}^n\hat{\beta_i^2}\\\qquad\qquad\qquad=\mathrm{arg}\min_{\hat{\beta}}\sum_{i=1}^n(Y-X^{\prime}\hat{\beta})^{\prime}(Y-X^{\prime}\hat{\beta})+\lambda\sum_{i=1}^n\hat{\beta^{\prime}}\hat{\beta} β^=argβ^mini=1n(yixiβ^)2+λi=1nβi2^=argβ^mini=1n(YXβ^)(YXβ^)+λi=1nβ^β^
可以得出, λ → 0 \lambda\to0 λ0时,岭回归趋近于多元线性回归, λ → ∞ \lambda\to\infty λ时, β ^ → 0 k × 1 \hat{\beta}\to0_{k\times 1} β^0k×1

后面,有了理论推导,我们就知道,岭回归可以破除多重共线性的限制。

岭回归的理论推导

这里需要几个对向量求导的法则,这不需要大家掌握,只是为了方便推导

向量x的求导公式:
{ ∂ A X ∂ X = A T ∂ X T A X ∂ X = ( A + A T ) X \begin{cases}\frac{\partial AX}{\partial X}=A^T\\\frac{\partial X^TAX}{\partial X}=(A+A^T)X\end{cases} {XAX=ATXXTAX=(A+AT)X

L = a r g min ⁡ β ^ ∑ i = 1 n ( Y − X ′ β ^ ) ′ ( Y − X ′ β ^ ) + λ ∑ i = 1 n β ′ ^ β ^ L=\mathrm{arg}\min_{\hat{\beta}}\sum_{i=1}^n(Y-X^{\prime}\hat{\beta})^{\prime}(Y-X^{\prime}\hat{\beta})+\lambda\sum_{i=1}^n\hat{\beta^{\prime}}\hat{\beta} L=argminβ^i=1n(YXβ^)(YXβ^)+λi=1nβ^β^

∂ L ∂ β ^ = − 2 X ′ Y + 2 X ′ X β ^ + 2 λ β ^ = 0 \frac{\partial L}{\partial \hat{\beta}}=-2X^{\prime}Y+2X^{\prime}X\hat{\beta}+2\lambda\hat{\beta}=0 β^L=2XY+2XXβ^+2λβ^=0得出 ( X ′ X + λ I ) β ^ = X ′ Y (X^{\prime}X+\lambda I)\hat{\beta}=X^{\prime}Y (XX+λI)β^=XY

由于 X ′ X X^{\prime}X XX半正定,则 X ′ X X^{\prime}X XX的特征值均为非负数,加上 λ I \lambda I λI后, X ′ X + λ I X^{\prime}X+\lambda I XX+λI的特征值均为正数,所以
β ^ = ( X ′ X + λ I ) − 1 X ′ Y ( λ > 0 ) \hat{\beta}=(X^{\prime}X+\lambda I)^{-1}X^{\prime}Y\quad(\lambda>0) β^=(XX+λI)1XY(λ>0)

我们可以通过下面几种方法选择 λ \lambda λ

岭迹分析

岭迹: λ \lambda λ从0到 + ∞ +\infty +变化,得到的 β ^ = ( β 1 ^ , β 2 ^ , ⋯   , β k ^ ) ′ \hat{\beta}=(\hat{\beta_1},\hat{\beta_2},\cdots,\hat{\beta_k})^{\prime} β^=(β1^,β2^,,βk^)中每个分量的变化曲线

这是我用Matlab跑出来的一个岭迹

在这里插入图片描述

岭迹法选择 λ \lambda λ的一般原则是:

(1)各回归系数的岭估计基本稳定

(2)用最小二乘估计时符号不合理的回归系数,其岭估计的符号变得合理

(3)回归系数没有不合乎经济意义的绝对值

(4)残差平方和增大不太多

可以选择 λ = 50 \lambda=50 λ=50

VIF法(方差膨胀因子)

VIF是方差膨胀因子,定义如下

假设现在有 k k k个自变量,那么第 m m m个自变量的 V I F m VIF_m VIFm定义为
V I F m = 1 1 − R 1 ∼ k \ m VIF_m=\frac{1}{1-R_{1\sim k\backslash m}} VIFm=1R1k\m1
其中, R 1 s i m k \ m R_{1\\sim k\backslash m} R1simk\m是将第 m m m个自变量作为因变量,对剩下的 k − 1 k-1 k1个自变量回归得到的拟合优度, V I F m VIF_m VIFm越大。说明第 m m m个变量和其他 k − 1 k-1 k1个自变量相关性越强

回归模型的 V I F VIF VIF定义为
V I F = max ⁡ { V I F 1 , V I F 2 , ⋯   , V I F k } VIF=\max \{VIF_1,VIF_2,\cdots,VIF_k\} VIF=max{VIF1,VIF2,,VIFk}
如果 V I F > 10 VIF>10 VIF>10,可以认为存在多重共线性

可以不断增加 λ \lambda λ,直到所有的 β ^ < 0 \hat{\beta}<0 β^<0

可以使用stata计算VIF

例1:对下列数据进行多元回归,检验多重共线性

年份单产种子费化肥费农药费机械费灌溉费
19901017106.05495.15305.145.956.1
19911036.5113.55561.45343.868.5593.3
1992792104.55584.8541473.2104.55
1993861132.75658.35453.7582.95107.55
1994901.5174.3904.05625.05114152.1
1995922.5230.41248.75834.45143.85176.4
1996916.5238.21361.55720.75165.15194.25
1997976.5260.11337.4727.65201.9291.75
19981024.5270.61195.8775.5220.5271.35
19991003.5286.21171.8610.95195284.55
20001069.5282.91151.55599.85190.65277.35
20011168.5317.851105.8553.8211.05290.1
20021228.5319.651213.05513.75231.6324.15
20031023368.41274.1567.45239.85331.8
20041144.5466.21527.9487.35408336.15
20051122449.851703.25555.15402.3358.8
20061276.55371888.5637.2480.75428.4
20071233565.52009.85715.65562.05456.9

先导入数据

在这里插入图片描述

需要勾选“将第一行作为变量名”
在这里插入图片描述
进行多元线性回归可以输入语句

reg 单产 种子费 化肥费 农药费 机械费 灌溉费

在回归完成后输入下列语句

estat vif

结果如下
在这里插入图片描述

VIF=68.23,说明多重共线性比较严重,需要剔除变量种子费,再继续回归。直到无多重共线性为止。

岭回归的Matlab实现

例2:对下列数据进行分析

序号需求量本品价格竞品价格平均收入水平广告投入
1128906569.224343.171170
21285065.970.674347.591162.26
31318065.474.774356.441164.06
41378565.34754369.711193.13
51388066754387.41241.55
6126806977.294409.511254.15
7132906979.064436.051149.57
81349869.2581.374467.011200.06
91198074.56844502.41220.4
10120857891.614542.21082.7
data=[12890	65.00	69.22	4343.17	1170.00
12850	65.90	70.67	4347.59	1162.26
13180	65.40	74.77	4356.44	1164.06
13785	65.34	75.00	4369.71	1193.13
13880	66.00	75.00	4387.40	1241.55
12680	69.00	77.29	4409.51	1254.15
13290	69.00	79.06	4436.05	1149.57
13498	69.25	81.37	4467.01	1200.06
11980	74.56	84.00	4502.40	1220.40
12085	78.00	91.61	4542.20	1082.70];%数据矩阵

Y=data(:,1);%因变量组成的向量
[size_n,~]=size(data);%size_n表示样本容量
X=[ones(size_n,1),data(:,2:5)];%自变量矩阵左侧拼接全是1的向量
corr=corrcoef(data);%计算相关系数矩阵
Xtag={'需求量','本品价格','竞品价格','平均收入水平','广告投入'};
figure
heatmap(Xtag,Xtag,corr)%绘制相关系数热力图
beta=[];
[~,size_x]=size(X);
One_sq=linspace(0,100,1001);
for lambda=0:0.1:100
    betanew=(X'*X+lambda*eye(size_x))^(-1)*X'*Y;
    beta=[beta,betanew];%对每一个lambda,计算其回归系数
end
figure
for j=2:size_x
    plot(One_sq,beta(j,:))%绘制岭迹图
    hold on
end
legend(['\beta_' num2str(1)],['\beta_' num2str(2)],['\beta_' num2str(3)],['\beta_' num2str(4)])
title('岭迹分析')
xlabel('\lambda')
ylabel('\beta')

运行结果
在这里插入图片描述
可以发现,竞品价格与本品价格之间相关性较强,竞品价格与平均收入水平之间相关性较强,平均收入水平与本品价格之间相关性较强。存在多重共线性,应该使用岭回归。
在这里插入图片描述

λ = 50 \lambda=50 λ=50时, y = 0.1992 − 107.1376 x 1 − 19.3472 x 2 + 4.4527 x 3 + 1.8729 x 4 y=0.1992-107.1376x_1-19.3472x_2+4.4527x_3+1.8729x_4 y=0.1992107.1376x119.3472x2+4.4527x3+1.8729x4

逐步回归的进化——Lasso回归

Lasso回归的参数估计
β ^ = a r g min ⁡ β ^ ∑ i = 1 n ( y i − x i ′ β ^ ) 2 + λ ∑ i = 1 n ∣ β i ∣ ^ \hat{\beta}=\mathrm{arg}\min_{\hat{\beta}}\sum_{i=1}^n(y_i-x_i^{\prime}\hat{\beta})^2+\lambda\sum_{i=1}^n\hat{|\beta_i|} β^=argβ^mini=1n(yixiβ^)2+λi=1nβi^

与岭回归相比,Lasso回归的出现也是为了克服多重共线性,最大的优点是可以把不重要的变量回归系数压缩到0,而岭回归的任何回归系数都不会压缩到0,这比较像升级版的逐步回归。

Lasso回归的stata实现

这里用的数据还是例1的数据

先在stata的命令行内输入命令

findit lassopack

在这里插入图片描述

选择蓝色链接 lassopack from……
在这里插入图片描述

点击click here to install

第一步导入Excel数据
在这里插入图片描述

需要勾选“将第一行作为变量名”
在这里插入图片描述

输入下列内容

cvlasso 单产 种子费 化肥费 农药费 机械费 灌溉费,lopt seed(520)

tip:可以在变量窗口双击变量名,快速把变量输入到命令窗口

在这里插入图片描述

在这里插入图片描述

运行结果如下
在这里插入图片描述

这说明,除了种子费,农药费,灌溉费,其他的变量均为引起多重共线性的变量,被剔除

我们的回归得出的模型如下:
y = 956.8974544 + 0.3205122 x 1 − 0.3173749 x 3 + 0.6905996 x 5 y=956.8974544+0.3205122x_1-0.3173749x_3+0.6905996x_5 y=956.8974544+0.3205122x10.3173749x3+0.6905996x5

  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Logistic..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值