R glmnet 函数给出的系数与教科书计算不同

问题描述

我发现了一个类似的 question ,并且给出了很好的答案。

然而,我和接受的答案做了同样的事情,但令人惊讶的是我得到了不同的系数结果。

我做错了什么?

p.tmp <- 10
n.tmp <- 100

set.seed(123)
X=scale(matrix(rnorm(n.tmP*p.tmp),ncol = p.tmp))
Y=scale(rnorm(n.tmp))

set.seed(123) 
ridge.fit.cv <- cv.glmnet(X,Y,alpha = 0,intercept = FALSE)
ridge.fit.lambda <- ridge.fit.cv$lambda.1se
ridge_mod <- (coef(ridge.fit.cv,s = ridge.fit.lambda))[-1]
###############################
ridge.coef.DEF = solve(t(X) %*% X + n.tmp * ridge.fit.lambda * diag(p.tmp)) %*% t(X) %*% Y
cbind(ridge_mod,ridge.coef.DEF)

系数结果不同如下

> cbind(glmnet=c(ridge_mod),textbook=c(ridge.coef.DEF))
             glmnet      textbook
 [1,]  7.654927e-38  0.0003823413
 [2,] -2.396856e-38 -0.0001195132
 [3,] -1.621789e-37 -0.0008111162
 [4,]  1.977203e-37  0.0009878751
 [5,]  3.457742e-38  0.0001741503
 [6,] -4.169392e-38 -0.0002081700
 [7,]  8.576066e-38  0.0004296001
 [8,]  1.473575e-37  0.0007362285
 [9,] -8.753641e-38 -0.0004371627
[10,]  1.740288e-37  0.0008698664

我希望结果大致相似。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)