为什么我用glmnet获得收缩参数lambda的不同结果并受到惩罚?

时间:2018-02-22 12:22:00

标签: r cross-validation glmnet lasso

我正在使用LASSO(最小绝对收缩和选择算子)和Cox模型研究变量选择,我使用两个R包glmnet并惩罚。 我使用cv.glmnet和optL1来找到最佳收缩参数$ \ lambda $。

我的问题是:当我使用cv.glmnet和optL1惩罚时,为什么我得到$ \ lambda $的不同结果?

这是我的R代码:

library(glmnet) 

n=500

p=30 

nzc=trunc(p/10) 

x=matrix(rnorm(n*p),n,p)  

beta=rnorm(nzc) 

fx=x[,seq(nzc)]%*%beta/3  

hx=exp(fx) 

ty=rexp(n,hx)  

tcens=rbinom(n=n,prob=.3,size=1) 

y=cbind(time=ty,status=1-tcens) 

NFOLD = 5 

foldid=sample(rep(seq(NFOLD),length=n)) 

fit1_cv = cv.glmnet(x,y,family="cox",foldid=foldid, thresh = 1e-16) 

fit1_cv$lambda.min 

library(penalized) 

cv.penal <- optL1(Surv(y[, 'time'], y[, 'status']), penalized = x, fold = foldid) 

cv.penal$lambda 

cv.penal$fullfit@penalized 

fit1_cv$cvm 

whichLambda <- which( fit1_cv$lambda == fit1_cv$lambda.min ) 

fit <- glmnet(x,y,family="cox",lambda = fit1_cv$lambda.min, thresh = 1e-16) 

res <- cbind(CV.GLMNET = fit1_cv$glmnet.fit$beta [, whichLambda], 

'GLMNET.NAIF' = as.numeric(fit$beta), 

'penalized' = cv.penal$fullfit@penalized) 

res #different Lambda => different beta !

0 个答案:

没有答案