为什么有时R函数“ lm”拟合的系数与lambda = 0的“ glmnet”拟合的系数相差很大?

问题描述 投票:0回答:1

我遇到了一个奇怪的情况,其中lambda = 0的lmglmnet在同一数据上产生了不同的结果。

这两个函数的调用类似:

# linear regression
fit <- lm(y ~ X - 1)

# lasso regression with lambda=0
fit <- glmnet::glmnet(X, y, intercept=FALSE, alpha=1, lambda=0)

lm个已安装对象的摘要:

Call:
lm(formula = working_yj ~ working_xj - 1)

Residuals:
       Min         1Q     Median         3Q        Max 
-2.250e-05 -5.275e-06  3.337e-06  7.596e-06  1.897e-05 

Coefficients:
                  Estimate Std. Error  t value Pr(>|t|)    
working_xjterm_f 1.2001391  0.0003452 3476.547   <2e-16 ***
working_xj       0.0000658  0.0002888    0.228    0.821    
working_xj       0.8994978  0.0014870  604.920   <2e-16 ***

glmnet拟合的系数:

# fit$beta
3 x 1 sparse Matrix of class "dgCMatrix"
               s0
term_f  1.4736546
        0.2163814
       -0.2560925

您可以从上方看到,两个拟合结果并不相同。 (此回归是更大算法的一部分。就我的整个算法而言,线性回归给出了更好的估计,因为真实系数为c(1.2,0,0.9))

从我的角度来看,在理想情况下,两个拟合应该给出完全相同的系数,因为它们具有相同的目标函数。设计X的相关矩阵可能会提供一些有关此奇怪结果的线索:

# dim(X) is c(50, 3)
# length*y) is 50
# print(cor(X))
          [,1]      [,2]     [,3]
[1,] 1.0000000 0.9619002 0.994115
[2,] 0.9619002 1.0000000 0.985752
[3,] 0.9941150 0.9857520 1.000000

X的列是高度相关的,这可能会导致回归问题。但我不知道一切如何发生或如何进一步研究这个问题。

r regression lm glmnet lasso-regression
1个回答
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.