从 glmnet 获取变量选择顺序

2024-06-05

我一直在使用 glmnet R 包为一个目标变量 Y(数字)和 762 个协变量构建 LASSO 回归模型。我使用 glmnet() 函数,然后coef(fit, s = 0.056360)获取该特定 lambda 值的系数值。

我现在需要的是变量选择顺序,即首先选择所选协变量中的哪个(首先进入模型),第二个,第三个等等。

使用时plot(fit, label = TRUE)理论上,我可以通过绘制的路径看到顺序,但是,协变量太多,标签难以辨认。

您可以从图像中看到第一个协变量是 267(绿色路径),然后是 12,但其余的难以辨认。


我写了一个函数glmnetPath去做这个。它最初出现在我对最近 Stack Overflow 问答的回答 https://stackoverflow.com/a/73312496/4891738(抱歉,我后来发现了这个问答),但随后以RGitHub 上的包。

## 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)

该功能适用​​于安装的模型glmnet and cv.glmnet.

它的计算效率很高。它是完全矢量化的,无需使用循环。它也不会将稀疏系数矩阵转换为稠密矩阵进行处理。

它提供了非常丰富的系数路径摘要。这是一个可重现的演示示例。

library(glmnet)
library(solzy)
set.seed(42)
x <- matrix(rnorm(100 * 20), 100, 20)
y <- rnorm(100)
fit <- glmnet(x, y)
ans <- glmnetPath(fit)

## Try this if you want. It also works!!
## cvfit <- cv.glmnet(x, y)
## glmnetPath(cvfit)

所结果的ans是 3 个数据框的列表:enter, leave and ignore.

解读enter

As lambda减少,变量(参见i对于数字 ID 和var对于变量名称)依次输入模型(参见ord对于订单)。相应的lambda因为该事件是fit$lambda[j].

ans$enter
#    i  j ord var     lambda
#1   2  2   1  V2 0.16479873
#2   4  2   1  V4 0.16479873
#3  13  4   2 V13 0.13681880
#4   9  8   3  V9 0.09430389
#5  11  9   4 V11 0.08592619
#6  15  9   4 V15 0.08592619
#7   7 11   5  V7 0.07133744
#8  18 11   5 V18 0.07133744
#9  20 12   6 V20 0.06500001
#10  5 13   7  V5 0.05922559
#11 16 13   7 V16 0.05922559
#12 17 14   8 V17 0.05396415
#13  6 16   9  V6 0.04480199
#14  3 17  10  V3 0.04082190
#15 10 18  11 V10 0.03719540
#16 19 19  12 V19 0.03389106
#17  1 22  13  V1 0.02563735
#18 12 26  14 V12 0.01767083
#19 14 26  14 V14 0.01767083

解读leave

As lambda增加,变量(参见i对于数字 ID 和var对于变量名)依次离开模型(参见ord对于订单)。相应的lambda因为该事件是fit$lambda[j].

ans$leave
#    i  j ord var     lambda
#1  14 25   1 V14 0.01939371
#2  12 25   1 V12 0.01939371
#3   1 21   2  V1 0.02813695
#4  19 18   3 V19 0.03719540
#5  10 17   4 V10 0.04082190
#6   3 16   5  V3 0.04480199
#7   6 15   6  V6 0.04917013
#8  17 13   7 V17 0.05922559
#9  16 12   8 V16 0.06500001
#10  5 12   8  V5 0.06500001
#11 20 11   9 V20 0.07133744
#12 18 10  10 V18 0.07829275
#13  7 10  10  V7 0.07829275
#14 15  8  11 V15 0.09430389
#15 11  8  11 V11 0.09430389
#16  9  7  12  V9 0.10349840
#17 13  3  13 V13 0.15015846
#18  4  1  14  V4 0.18086640
#19  2  1  14  V2 0.18086640

解读ignored

如果非空,它会列出从未进入模型的变量。也就是说,它们实际上被忽略了。是的,这可能会发生!

ans$ignored
#  i var
#1 8  V8

Notes:

  1. fit$lambda正在减少,所以j是按升序排列的enter但按降序排列leave.

  2. 多个变量可以同时进入或离开模型!这ord专栏对此提供了非常丰富的信息。例如,变量 2 和 4 同时进入模型。

最后,让我附上由glmnet:

plot(fit, label = TRUE)
plot(fit, xvar = "lambda", label = TRUE)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 glmnet 获取变量选择顺序 的相关文章

  • 绘图不适合 R 窗口

    我正在使用metaR 中的包对比例进行荟萃分析 我的分析中有大约一百项研究 当我打字时forest result 创建我的森林图 它可以工作 但图形在顶部和底部被切掉 无论我做什么 它都不适合绘图窗口 我对如何解决这个问题感到困惑 有任何想
  • 为什么 ggplot2 图例不结合手动填充和缩放值?

    预期行为 如果我用 ggplot2 创建一个绘图并使用单独的形状和填充比例来描绘数据 我希望图例会在 白色 填充点 看起来是空心的 和 黑色 填充点 看起来不空洞的 在下面的示例代码中 Windows 的图例项应为白色空心点 Linux 的
  • 您使用 Attach() 或按名称或切片调用变量吗?

    许多介绍 R 的书籍和指南都是从附加一个 R 语言的实践开始的 data frame这样您就可以通过名称调用变量 我一直发现用以下方式调用变量是有利的 符号或方括号切片 2 这样我就可以使用多个data frames 而不混淆它们和 或使用
  • 在 R 中使用两个 for 循环创建矩阵/数据框

    这是我在 SO 上的第一篇文章 所以请友善 我的问题与这个问题隐约相关 R中的双for循环创建矩阵 https stackoverflow com questions 44376020 double for loop in r creati
  • R 中具有 NA 值的聚合栅格

    我在 R 中有一个分辨率为 1 公里的栅格 其 NA 值分布广泛 但位置不规则 即 包含数据的单元格不连续 并且 NA 值分散 我正在尝试使用用户定义的平均圆角函数 包括在下面 以 5 公里分辨率 因子 5 聚合此栅格 使用 raster
  • 在 R/ggplot2 中将字符串转换为函数参数的最佳方法? [复制]

    这个问题在这里已经有答案了 我正在开发一个闪亮的应用程序 用户可以选择可以使用 ggplot2 绘制哪些变量 但是我完全不确定将字符串 即要绘制的变量的名称 转换为合适的函数参数的最佳方法 考虑以下非常人为的 有效的示例 df lt dat
  • 有没有办法将字母扩展到超过 26 个字符,例如 AA、AB、AC...?

    我大部分时间都使用字母来表示我的因素 但今天我尝试超过 26 个字符 LETTERS 1 32 期待有自动递归因式分解 AA AB AC 但很失望 这只是字母的限制还是有办法使用其他函数来获取我正在寻找的内容 702够吗 LETTERS70
  • 如何在闪亮的应用程序中显示矩阵,并用条件指定颜色?

    我有一个具有正值和负值的矩阵 M 我正在尝试使用 DT 包在闪亮的应用程序中显示为表格 我想用不同的颜色显示矩阵 红色的正数和负数 例如 到目前为止 我只能以一对一的方式添加颜色 但我想以这种方式添加颜色 如果matrix values g
  • R:使用 as.formula 修复模型中的模型调用

    我有一个gls模型 其中我将公式 来自另一个对象 分配给模型 equation lt as formula aic obj row model gt equation temp avg I year 1950 mod1 lt gls equ
  • 如何重试错误语句?

    如果某个语句出错 我如何简单地告诉 R 重试该语句几次 例如 我希望做类似的事情 tryCatch dbGetQuery Query database error function e if is locking error e If da
  • R 中整数向量的大小

    我原以为 R 有一个用于存储对象的标准开销 看起来是 24 字节 至少对于整数向量而言 但一个简单的测试表明它比我意识到的要复杂 例如 采用长度为 100 的整数向量 使用随机采样 希望避免任何可能存在的偷偷摸摸的序列压缩技巧 https
  • 插值时间序列

    我有两组具有不同时间戳的数据 一组数据包含校准数据 另一组包含样本数据 校准的频率比样品少得多 我想做的是将校准数据 低频 插值到采样时间序列 高频 上 sam lt textConnection time value 01 00 52 2
  • 如何连接 R 列表中的多个 .wav 文件?

    我有一个 wav 文件列表my list library seewave library tuneR data tico audio lt tico freq lt 22050 breaks lt c 0 0 2 0 4 0 6 0 8 i
  • 如何在 R 中使用 msgbox [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在中显示消息框R 我正在寻找类似的东西msgbox在 VBA 中 因此我可以向用户发出有关问题的警报 此外 我想允许一些用户交互 例如
  • 在 R 中使用 ggplot2 叠加两个图

    有两个数据框 df1 df2我需要使用 ggplot2 创建线图并显示在同一个图表上 df1 x y 2 30 4 25 6 20 8 15 df2 x y 2 12 4 16 6 20 8 24 用于绘制第一个 df p1 lt ggpl
  • 如何对plot_ly()图表进行分面?

    Using ggplot2 and plotly制作交互式散点图facet wrap library ggplot2 library plotly g lt iris gt ggplot aes x Sepal Length y Sepal
  • R 中的频率加权,与 Stata 的结果比较

    我正在尝试分析明尼苏达大学 IPUMS 数据集中的数据1990 年美国人口普查 http usa ipums org usa sampdesc shtml us1990a in R 我正在使用survey http faculty wash
  • 在ggplot2中添加水平线到绘图和图例

    这段代码创建了一个漂亮的图 但我想在 y 50 处添加一条水平黑线 并让图例显示一条黑线 并在图例中显示文本 cutoff 但在图例中保留源点 我可以使用 geom line 添加该行 但无法在图例中获取该行 library ggplot2
  • 动态显示仪表板页面

    我有一个实用的闪亮应用程序 它使用shinydashboard包裹 新功能需要特定于用户的行为 例如 针对不同的用户名使用不同的数据集 因此我打算 显示登录表单 验证凭据并设置反应值LoggedIn to true如果成功的话 显示实际情况
  • 修改x轴刻度标签

    我正在尝试更改由生成的箱线图的 x 轴刻度标签ggplot2 x 轴是一个分类变量 HabFac 我想要的是将其刻度更改为 6 个化学品 A E 下面是我的代码 raw data read table Read data p TT ggpl

随机推荐