我正在使用套索(来自包glmnet)来 Select 变量.我已经安装了一个glmnet的模型,并绘制了与lambda模型的系数图.

library(glmnet)
set.seed(47)
x = matrix(rnorm(100 * 3), 100, 3)
y = rnorm(100)
fit = glmnet(x, y)
plot(fit, xvar = "lambda", label = TRUE)

plot

现在我想得到系数变为0的顺序.换句话说,每个系数在什么波长下变为0?

我在glmnet中找不到一个函数来提取这样的结果.我怎么才能得到它呢?

推荐答案

在我最初的回答中,函数glmnetPath现在位于名为solzyR包中.

## 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).该事件对应的lambdafit$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).该事件对应的lambdafit$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是递减的,所以jenter中是升序的,但在leave中是降序的.


为了进一步解释指数ij,请以变量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.

R相关问答推荐

使用split.zoo界定xts物体的降水事件

R中的Fasttext langue_identification返回太多参数-如何与文本匹配?

通过R访问MoveApps API

根据shiny 应用程序中的数字输入更改图标 colored颜色

如何使用stat_extract_all正确提取我的目标值?

隐藏e_mark_line的工具提示

为什么横向页面会导致officeverse中的页码/节头/页脚出现问题?

如何直接从Fortran到R的数组大小?

使用整齐的计算(curl -curl )和杂音

如何用书面利率绘制geom_bar图

条形图顶部与其错误条形图不对齐

`夹心::vcovCL`不等于`AER::tobit`标准错误

如何将Which()函数用于管道%>;%

使用不同的定性属性定制主成分分析中点的 colored颜色 和形状

如何计算增加10米(0.01公里)的行?

删除数据帧中特定行号之间的每第三行和第四行

仅当后续值与特定值匹配时,才在列中回填Nas

防止正则表达式覆盖以前的语句

整理ggmosaic图的标签

R:使用ApexCharge更改标签在饼图中的位置