在我最初的回答中,函数glmnetPath
现在位于名为solzy的R包中.
## you may need to first install package "remotes" from CRAN
remotes::install_github("ZheyuanLi/solzy")
## Zheyuan Li's R functions on Stack Overflow
library(solzy)
## use function `glmnetPath` for your example
glmnetPath(fit)
#$enter
# i j ord var lambda
#1 3 2 1 V3 0.15604809
#2 2 19 2 V2 0.03209148
#3 1 24 3 V1 0.02015439
#
#$leave
# i j ord var lambda
#1 1 23 1 V1 0.02211941
#2 2 18 2 V2 0.03522036
#3 3 1 3 V3 0.17126258
#
#$ignored
#[1] i var
#<0 rows> (or 0-length row.names)
Interpretation of 100
当lambda
减少时,变量(数字ID见i
,变量名见var
)依次进入模型(顺序见ord
).该事件对应的lambda
是fit$lambda[j]
.
变量3在lambda=0.15604809时进入模型,是fit$lambda
中的第二个值;
变量2在lambda=0.03209148时进入模型,为fit$lambda
中的第19个值;
变量1在lambda=0.02015439时进入模型,这是fit$lambda
中的第24个值.
Interpretation of 100
当lambda
增加时,变量(数字ID见i
,变量名见var
)依次离开模型(顺序见ord
).该事件对应的lambda
是fit$lambda[j]
.
变量1将模型留在lambda=0.02211941,即fit$lambda
中的第23个值;
变量2使模型的波长为0.03522036,是fit$lambda
中的第18个值;
变量3将模型保留在lambda=0.17126258,这是fit$lambda
中的第一个值.
Interpretation of 100
如果不是空的data.Frame,它会列出从未进入模型的变量.也就是说,它们实际上被忽视了.(是的,这是可能发生的!)
Note: fit$lambda
是递减的,所以j
在enter
中是升序的,但在leave
中是降序的.
为了进一步解释指数i
和j
,请以变量2为例.它在j
=18离开模型(即,其系数变为0),并在j
=19进入模型(即,其系数变为非零).您可以验证这一点:
fit$beta[2, 1:18]
## all zeros
fit$beta[2, 19:ncol(fit$beta)]
## all non-zeros
有关更复杂的示例,请参见Obtain variable selection order from glmnet.