R bigglasso 结果与 hdm 或 glmnet 不匹配

2024-01-18

我一直在尝试使用 R 包“biglasso”来处理高维数据。但是,我得到的结果与我从“hdm”或“glmnet”获得的 LASSO 函数的结果不匹配。 biglasso 的文档也很差。

在下面的示例中,hdm 和 glmnet 的结果非常接近,但不准确,这是预期的。然而,biglasso 并没有放弃“分享”变量。我已经尝试了所有不同的屏幕设置,但没有什么区别。关于如何让 bigglasso 与其他人更加一致有什么想法吗?谢谢!

编辑:对于给定的 lambda 值,结果非常相似。但每种方法似乎都会选择不同的 lambda ......这对于 hdm 来说是有意义的,因为它是用于因果推理并且不关心样本外预测。 hdm 使用与 Belloni 等人不同的目标函数。 (2012),但我不确定为什么 cv.biglasso 和 cv.glmnet 会有如此大的差异。如果我在没有筛选规则的情况下运行 bigglasso,他们应该仅通过 CV 折叠中的随机差异来最大化相同的目标函数,不是吗?

编辑2:我编辑了下面的代码以包含F.Privé的代码,以使glmnet使用类似于biglasso的算法,以及一些使biglasso模仿glmnet的附加代码。

##########
## PREP ##
##########

## Load required libraries
library(hdm)
library(biglasso)
library(glmnet)

## Read automobile dataset
data(BLP)
df <- BLP[[1]]

## Extract outcome
Y <- scale(df$mpg)

## Rescale variables
df$price <- scale(df$price)
df$mpd <- scale(df$mpd)
df$space <- scale(df$space)
df$hpwt <- scale(df$hpwt)
df$outshr <- scale(df$outshr)

## Limit to variables I want
df <- df[,names(df) %in% c("price","mpd","space","hpwt","share","outshr","air")]

## Convert to matrix
df.mat <- data.matrix(df)
df.bm <- as.big.matrix(df.mat)

#########
## HDM ##
#########

## Set seed for reproducibility
set.seed(1233)

## Run LASSO
fit.hdm <- rlasso(x=df.mat, y=Y, post=FALSE, intercept=TRUE)

## Check results
coef(fit.hdm)

############
## GLMNET ##
############

## Set seed for reproducibility
set.seed(1233)

## LASSO with 10-fold cross-validation
fit.glmnet <- cv.glmnet(df.mat, Y, alpha=1, family="gaussian")

## Check default results
coef(fit.glmnet)

## Try to mimic results of biglasso
coef(fit.glmnet, s = "lambda.min")

##############
## BIGLASSO ##
##############

## LASSO with 10-fold cross-validation
fit.bl <- cv.biglasso(df.bm, Y, penalty="lasso", eval.metric="default",
    family="gaussian", screen="None",
    seed=1233, nfolds=10)

## Check default results
coef(fit.bl) 

## Try to mimic results of glmnet
## Calculate threshold for CV error (minimum + 1 standard error)
thresh <- min(fit.bl$cve) + sd(fit.bl$cve)/sqrt(100)

## Identify highest lambda with CVE at or below threshold
max.lambda <- max(fit.bl$lambda[fit.bl$cve <= thresh])

## Check results for the given lambda
coef(fit.bl$fit)[,which(fit.bl$fit$lambda==max.lambda)]


基本上有两种方法可以在 CV 之后选择“最佳”lambda:

  • 最小化 CV 误差的方法(默认为 {biglasso})

  • CV 误差低于最小值 + 1 标准误差(默认为 {glmnet})的最简约(最高 lambda)的一个。

Try coef(fit.glmnet, s = "lambda.min")使用最小值。

另外,为了确保重现性,请尝试设置 CV 折叠而不是一些种子。有参数foldid in glmnet() and cv.ind in biglasso().

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

R bigglasso 结果与 hdm 或 glmnet 不匹配 的相关文章

  • 机器学习的周期性数据(例如度角 -> 179 与 -179 相差 2)

    我使用 Python 进行核密度估计 并使用高斯混合模型对多维数据样本的可能性进行排名 每一条数据都是一个角度 我不确定如何处理机器学习的角度数据的周期性 首先 我通过添加 360 来删除所有负角 因此所有负角都变成了正角 179 变成了
  • R + ggplot2 - 无法分配大小为 128.0 Mb 的向量

    我有一个 4 5MB 9 223 136 行 的文件 其中包含以下信息 0 0 0 0147938 3 67598e 07 0 0226194 7 35196e 07 0 0283794 1 10279e 06 0 033576 1 470
  • 是否有 R 函数可以将这些数据从长形重塑为宽形?

    数据现在看起来如何 Coach ID Student score 1 A 8 1 B 3 2 A 5 2 B 4 2 C 7 看起来像这样 Coach ID Student score student 2 score 2 student 3
  • 神经网络的激活函数选择[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们可以对神经网络的隐藏层和输出层使用不同的激活函数吗 使用这种方案有什么明显的优势吗 对于网络的最后一层 激活单元也取决于任务 分类
  • 列值的切换功能

    我有一个缩写变量 名称错误地分散在整个列表中 请参阅下面的示例结构 ID lt c SPW SM DLS SJ joe schmoe CEJ teddy roos GVF MJC LH sally fields Full names sho
  • 如何解决在Windows中运行R时出现“剪贴板缓冲区已满且输出丢失”错误?

    我正在尝试将一些数据直接从 R 复制到我的 Windows 计算机中的剪贴板 我发现在一些网站上使用 file clipboard 可以工作 确实如此 但对于非常小的数据集 例如 如果我复制一个小数据集 100 个 obs 它会顺利工作 d
  • 为什么我收到保存错误、软盘错误的消息?

    我最近更新了 R 和 R studio 当我尝试保存文件时 收到一条错误消息 保存 文件名 时出错 驱动器中的软盘错误 将 2 卷序列号 3 插入驱动器 1 这是第一次看到这个错误信息 不知道该怎么办 我也无法 另存为 感谢您的帮助 尝试使
  • R 中带有变音符号的字符列表

    我试图将字符串中的电话 字符 出现次数制成表格 但变音符号单独作为字符制成表格 理想情况下 我有一个国际音标的单词列表 其中包含大量变音符号以及它们与基本字符的几种组合 我在这里给出了仅包含一个单词的 MWE 但对于单词列表和更多类型的组合
  • 删除ggplot2 geom_bar中没有数据的日期列[重复]

    这个问题在这里已经有答案了 我想隐藏 ggplot2 中没有数据的列 这是使用 nycflights13 库的可重现示例 library nycflights13 library dplyr library ggplot2 small da
  • R中不重复的组合

    我试图获取变量元素长度为 3 的所有可能组合 虽然它部分地与combn 一起工作 但我没有完全得到我正在寻找的输出 这是我的例子 x lt c a b c d e t combn c x x 3 我得到的输出看起来像这样 1 2 3 1 a
  • 将从数据透视表包生成的数据透视表转换为数据帧

    我正在尝试制作一个数据透视表pivottabler包裹 我想将数据透视表对象转换为数据框 以便我可以将其转换为数据表 带有 DT 并在 Shiny 应用程序中渲染它 以便可以下载 library pivottabler pt qpvt mt
  • 使管道工 API 可通过互联网使用

    我对 R 中的管道工包相当陌生 我有一个可以在我的计算机上本地运行的工作 API 我可以使用以下代码从网络上的实时 JS 应用程序访问它 r lt plumb my api code r r run host 0 0 0 0 port 80
  • rle 命令帮助

    我在使用 rle 命令时遇到了一些麻烦 该命令旨在找到参与者连续达到 8 个连续参与者的点 例如 如果 x lt c 0 1 0 1 1 1 1 1 1 1 1 1 我想返回值 11 感谢 DWin 我一直在使用这段代码 which rle
  • R 如何按行值进行分组、拆分或子集

    这是上一个问题的延续R 如何按行值分组 分裂 https stackoverflow com questions 64602607 r how to group by row value split 输入数据帧的变化是 id str c x
  • 在 R 中,如何让 PRNG 在平台之间给出相同的浮点数?

    在 R 4 1 1 中运行以下代码会在平台之间产生不同的结果 set seed 1 x lt rnorm 3 3 print x 22 0 83562861241004716 intel windows 0 8356286124100471
  • R tidyr regex:从字符列中提取有序数字

    假设我有一个像这样的数据框 df lt data frame x c This script outputs 10 visualizations This script outputs 1 visualization This script
  • 如何将xtable对象放置在页面左侧

    问题 如何将 xtable 对象放置到页面左侧或如何全局禁用居中 我正在努力弄清楚如何将 xtable 对象放置在左侧 我有一个 Rmd 文件 所有这些都转到相关的 r 块 require xtable df lt data frame x
  • 三角形内的热图

    考虑以下示例 triangle lines lt data frame X c 0 0 1 1 0 5 0 5 Y c 0 0 0 0 1 1 grp c 1 2 1 3 2 3 df lt matrix c c 0 2 0 5 0 8 c
  • Dplyr select_ 和starts_with 对变量列表中的多个值进行选择

    我正在从不同位置的不同传感器收集数据 数据输出类似于 df lt data frame date c 2011 2012 2013 2014 2015 Sensor1 Temp c 15 18 15 14 19 Sensor1 Pressu
  • 获得各州的边界

    编辑7 经过相当多的帮助后 我已经能够得到一张接近我需要的结果的地图 但我仍然需要在地图上显示州边界 但我无法弄清楚 为了制作一个合适的可重现示例 我需要链接到数据集 因为输出太大 为了使事情变得简单 我只对三个状态进行子集化 但边界线不显

随机推荐