我基于岭回归公式实现了simpe ridge回归代码。 然后我得到一些beta系数然后使用相同的数据集我用 glmnet 尝试了但是我得到了不同的结果。为简单起见,我只使用了一个lambda来查看结果是否正确。这是简单的R代码:
#Ridge regression
set.seed(110)
n = 5
p = 2
x=matrix(rnorm(n*p), nrow=n, ncol=p)
y=as.matrix(rnorm(n))
int <- rep(1, length(y))
x <- cbind(int, x)
lambda=0.1
lambda.identity=lambda* diag(ncol(x))
beta_ridge=solve(t(x)%*%x+lambda.identity, t(x)%*%y)
beta_ridge
#using glmnet
library(glmnet)
fit=glmnet(x,y,alpha = 0, lambda = 0.1, standardize = FALSE)
coef(fit)
结果如下:
#without glmnet
[,1]
int 1.2318648
-0.3213297
0.7596814
#with glmnet
s0
(Intercept) 1.3167044
V1 -0.3809595
V2 0.6795089
我没有标准化这些值,所以我认为我会得到相同的输出。我尝试使用 glmnet 代码,但它非常复杂。
我的代码中有什么问题?我非常感谢任何建议。