glmnet 的公式接口

2024-01-06

在过去的几个月里,我参与了许多项目,在这些项目中我使用了glmnet适合弹性网模型的封装。它很棒,但与大多数 R 建模函数相比,其界面相当简陋。特别是,您必须给出响应向量和预测矩阵,而不是指定公式和数据框。您还会失去常规界面提供的许多生活质量方面的东西,例如对因素的合理(?)处理、缺失值、将变量按正确顺序排列等。

因此,我通常最终编写自己的代码来重新创建公式/数据框界面。由于客户保密问题,我最终也留下了这段代码,并且不得不为下一个项目再次编写它。我想我不妨硬着头皮创建一个实际的包来做到这一点。然而,在我这样做之前有几个问题:

  • 是否存在任何使使用弹性网络模型的公式/数据框接口变得复杂的问题? (我知道标准化和虚拟变量 https://stackoverflow.com/questions/17887747/how-does-glmnets-standardize-argument-handle-dummy-variables,并且广泛的数据集可能需要稀疏模型矩阵。)
  • 是否有任何现有的包可以做到这一点?

嗯,看起来没有预先构建的公式界面,所以我继续制作自己的公式界面。你可以从 Github 下载它:https://github.com/hong-Revo/glmnetUtils https://github.com/Hong-Revo/glmnetUtils

或者在 R 中,使用devtools::install_github:

install.packages("devtools")
library(devtools)
install_github("hong-revo/glmnetUtils")
library(glmnetUtils)

来自自述文件:

一些提高生活质量的功能可简化装配过程 弹性网络模型glmnet, 具体来说:

  • glmnet.formula提供公式/数据框接口glmnet.
  • cv.glmnet.formula做了类似的事情cv.glmnet.
  • 方法predict and coef对于上述两者。
  • 一个功能cvAlpha.glmnet通过交叉验证选择 alpha 和 lambda 参数,遵循中描述的方法 的帮助页面cv.glmnet。可选择进行交叉验证 平行线。
  • 方法plot, predict and coef对于上述情况。

顺便说一句,在写上面的时候,我想我意识到why以前没有人这样做过。 R 处理模型框架和模型矩阵的核心是terms对象,其中包括一个矩阵,每个变量一行,每个主效应和交互作用一列。实际上,这(至少)大约是p x p矩阵,其中p是模型中变量的数量。什么时候p是 16000,这在当今的宽数据中很常见,所得矩阵的大小约为 1 GB。

尽管如此,我在使用这些对象时还没有遇到任何问题。如果这成为一个主要问题,我会看看是否能找到解决方法。


2016 年 10 月更新

我已向存储库推送了更新,以解决上述问题以及与因素相关的问题。从文档中:

glmnetUtils 可以通过两种方式从公式和数据帧生成模型矩阵。第一种是使用标准 R 机器,包括model.frame and model.matrix;第二种是一次构建一个变量矩阵。下面讨论和对比这些选项。

使用 model.frame

这是更简单的选项,也是与其他 R 建模函数最兼容的选项。这model.frame函数接受一个公式和数据框并返回一个模型架:带有特殊信息的数据框,让 R 能够理解公式中的术语。例如,如果公式包含交互项,则模型框架将指定数据中的哪些列与交互相关,以及应如何处理它们。同样,如果公式包含如下表达式exp(x) or I(x^2)在右侧,model.frame将计算这些表达式并将它们包含在输出中。

使用的主要缺点model.frame是它生成一个术语对象,该对象对变量和交互的组织方式进行编码。该对象的属性之一是一个矩阵,每个变量一行,每个主效应和交互作用一列。至少,这(大约)是一个 p x p 方阵,其中 p 是模型中主效应的数量。对于 p > 10000 的宽数据集,该矩阵的大小可能接近或超过 1 GB。即使有足够的内存来存储此类对象,生成模型矩阵也可能需要大量时间。

标准 R 方法的另一个问题是因素的处理。通常情况下,model.matrix会将 N 级因子转化为 N-1 列的指标矩阵,其中删除一列。这对于与 lm 和 glm 拟合的非正则模型是必要的,因为 N 列的完整集合是线性相关的。对于通常的治疗对比,解释是删除的列代表基线水平,而其他列的系数代表相对于基线的响应差异。

这可能不适合与 glmnet 配合的正则化模型。正则化过程将系数缩小到零,这迫使与基线的估计差异更小。但这只有在预先选择基线水平时才有意义,或者作为默认值才有意义;否则,它会有效地使级别更类似于任意选择的级别。

手动构建模型矩阵

为了处理上面的问题,glmnetUtils默认会避免使用model.frame,而不是逐项构建模型矩阵。这避免了创建一个的内存成本terms对象,并且可以明显比标准方法更快。它还将在模型矩阵中包含一个因子中所有级别的一列;也就是说,不假设基线水平。在这种情况下,系数表示与总体平均响应的差异,将它们缩小到零是有意义的(通常)。

不使用的主要缺点model.frame就是公式只能比较简单。目前,只有简单的公式,例如y ~ x1 + x2 + ... + x_p由代码处理,其中 x 是数据中已存在的列。不支持交互项和计算表达式。如果可能,您应该事先计算此类表达式。


2017 年 4 月更新

经过一番折腾,终于是这样了on CRAN. https://cran.r-project.org/web/packages/glmnetUtils/index.html

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

glmnet 的公式接口 的相关文章

  • 如何获得 STAN 中最大似然估计的标准误差?

    我在 Stan 中使用最大似然优化 但不幸的是optimizing 函数不报告标准错误 gt MLb4c lt optimizing get stanmodel fitb4c data win data init inits STAN OP
  • decompose() 的周期太少[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 错误看起来像这样 decompose
  • 如何提取与 R 中主题 ID 列表匹配的行?

    我有一个包含许多主题 ID 的数据框 每个主题都有重复观察 我还有一个单独的数据框 其中只有一个主题 ID 列表 我想从更大的数据框中匹配和提取 如何以允许我引用不同数据帧中的SubjectID列表的方式编写代码 不确定我是否完全理解这个问
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • 将 Instagram/youtube 嵌入 Shiny R 应用程序

    我想通过点击图表来播放 Instagram 或 Youtube 视频 例如显示异常值等 到目前为止 明确告诉 Shiny 视频内容是有效的 require shiny require ggplot2 data df lt data fram
  • 计算例如具有多列 data.frames 的列表中的平均值

    我有几个 data frames 的列表 每个 data frame 有几列 通过使用mean mylist first dataframe a我可以得到这个 data frame 中 a 的平均值 但是我不知道如何计算列表中存储的所有 d
  • 如何在R中删除重复项

    我有一个非常大的数据集 如下所示 df lt data frame school c a a a b b c c c year c 3 3 1 4 2 4 3 1 GPA c 4 4 4 3 3 3 2 2 school year GPA
  • 将年月格式转换为 POSIXct [重复]

    这个问题在这里已经有答案了 我有一些年月形式的数据 我想将其格式化以用于绘图ggplot date lt c 2016 03 2016 04 2016 05 2016 06 2016 07 2016 08 2016 09 2016 10 2
  • 在 R 中创建一个运行计数变量?

    我有一个足球比赛结果的数据集 我希望通过创建一组类似于世界足球 Elo 公式的运行评级来学习 R 我遇到了麻烦 在 Excel 中看似简单的事情在 R 中并不完全直观 例如 4270 个观察中的前 15 个具有必要的变量 date t 1
  • 如何用外部图像填充地图边界?

    我正在创建一张带有州边界的巴西地图 这可以直接使用ggplot2 and geom sf 然而 这一次 我不想用数据填充每个状态的颜色 而是想用外部图像 png 填充每个状态的边界 类似于this https online olivet e
  • 计算每个唯一值出现的次数

    假设我有 v rep c 1 2 2 2 25 现在 我想计算每个唯一值出现的次数 unique v 返回唯一值是什么 但不返回它们的数量 gt unique v 1 1 2 我想要一些能给我的东西 length v v 1 1 25 le
  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • 将每列的值乘以 R 中另一个 data.frame 中的权重

    我有两个data frames df and weights 代码如下 df看起来像这样 id a b d EE f 1 this 0 23421153 0 02324956 0 5457353 0 73068586 0 5642554 2
  • 使用 Shiny 发布平行坐标图表时出现“错误:路径[1]="”:没有这样的文件或目录”

    我有一个似乎很常见但我还没有找到解决方案的问题 当尝试使用 rCharts Parcoords 发布 Web 应用程序时 出现以下错误 错误 路径 1 没有这样的文件或目录 奇怪的是 该应用程序在我的笔记本电脑上运行得很好 下面是我正在使用
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这

随机推荐

  • 重写Subject.next方法

    我有以下代码 我想在其中覆盖next有一些自定义逻辑 这种方式行不通 但只有在以下情况下才有效next是一个带有箭头函数的属性 其背后的原因是什么 export class Store
  • 合并具有相似名称的列

    我有一个带有非常烦人的变量名的数据框 基本上我对同一变量的观察分布在变量 g1 param1 g2 param1 g3 param1 等中 我想将它们全部加入到 1 个名为 param1 的变量 列中 g1 param1 g2 param1
  • 谷歌地点 API 是免费的吗? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我想用谷歌地点 API在网络应用程序中 我只是想确认API是否免费 如果是付费功能那么收费是多少 您可以查看每个API的定价here
  • C# 应用程序在远程上总是冻结

    我正在开发一个 C 应用程序 Net 3 5 Win Forms 该应用程序在服务器上运行 并由用户使用远程桌面访问 应用程序在远程计算机上看似随机的情况下一直冻结 即所有 GUI 组件都变成白色 任务管理器报告应用程序没有响应 但在本地运
  • 如何通过邮递员发送graphql查询?

    I use POST type URL http graphql Body query query noteTypes name label labelColor groupName groupLabel imageUrl 但它返回 mes
  • SAPUI5 表达式绑定

    是否可以将控件属性绑定到具有动态属性名称的模型 例如存储在另一个模型字段中 我以为我们可以使用 SAPUI5表达式绑定 https sapui5 hana ondemand com docs guide daf6852a04b44d1189
  • 在 Android 中的 BOOT_COMPLETE 上,未从 AndroidManifest 调用 BroadcastReceiver

    在我的 Android 应用程序中 我想运行Service无需打开 运行我的应用程序 为此我延长了BroadcastReciever班级 但是这个BroadcastReceiver类未被调用AndroidManifest xml on BO
  • 使用 jquery 拖放

    我有两个基于 jquery 的列表 示例是here http devheart org examples jquery customizable layout using drag and drop 2 saving and loading
  • 在 C# 桌面应用程序中存储我的 Amazon 凭证

    我正在考虑在桌面应用程序中使用 Amazon S3 和 simpleDB 我遇到的主要问题是我需要将我的 aws 凭证存储在应用程序中或使用其他方案 我猜想将它们存储在应用程序中是不可能的 因为它们很容易被挑选出来 另一种选择是创建一个 W
  • 如何在 Angular.js 中解析 Int

    也许 这是最简单的事情 但我无法将字符串解析为角度中的 Int 我正在尝试做的事情
  • MISRA C++ 2008 规则 5-2-7 违规:具有指针类型的对象不得直接或间接转换为不相关的指针类型

    在以下示例中 void bad function char t ptr 0 MISRA doesn t complains here it allows cast of char to void pointer void p2 ptr th
  • Magento 产品使用 SQL 查询从数据库导入

    Magento 在其数据库系统中使用 EAV 结构 我有这个查询 它为我提供了我的 magento 商店中的产品 ID 和产品名称 SELECT e entity id AS product id var value AS product
  • 如何以 SVG 形式获取 matplotlib 图的输出?

    我需要获取 matplotlib 图的输出并将其转换为可以在激光切割机上使用的 SVG 路径 import matplotlib pyplot as plt import numpy as np x np arange 0 100 0 00
  • Android 应用程序从 linkedin 访问令牌

    首先 是否可以使用 facebook twitter 等 Android 应用程序添加 linkedin 我读过很多博客 但无法在我的应用程序中实现 linkedin 我已达到应用程序的用户授权流程 用户输入其用户名和密码 但是当他输入 5
  • Firebase onCreate 触发器:无法获取除 UNAUTHENTICATED 之外的 authType

    使用具有以下规则的 Firebase 实时数据库 rules messages read auth null write auth null 并且 将此触发器定义为 exports localOnCreate functions datab
  • 扩展 Google 地图范围,使 div 叠加层不覆盖任何标记

    在我正在开发的 Google 地图混搭中 地图为 100 宽 高度几乎为 100 并且我有一个水平透明 div 它使用 z index 和 CSS 覆盖地图的左侧 当我动态添加标记时 我从一个空的 Bounds 对象开始 然后将其一一扩展以
  • 隐藏软键盘

    我需要能够隐藏软键盘以响应单击按钮 我看过很多关于这个主题的帖子 似乎解决方案是使用InputMethodManager 但我一直无法让它为我工作 据说以下将隐藏软键盘 InputMethodManager inputManager Inp
  • 如何设置 CSS、JS 和图像的过期时间?

    我最近使用 firebug 上的 pagespeed 插件分析了我的网站 它建议我设置 CSS JS 和图像文件的过期时间 我想知道 我该怎么做 当我运行 PageSpeed Addon 时 我用它来修复完全相同的问题
  • 使用 asyncio 实现非阻塞 I/O

    我正在尝试使用 Pygame 和 asyncio 编写一个网络游戏 但我不知道如何避免挂起读取 这是我为客户提供的代码 asyncio coroutine def handle client print Connected reader w
  • glmnet 的公式接口

    在过去的几个月里 我参与了许多项目 在这些项目中我使用了glmnet适合弹性网模型的封装 它很棒 但与大多数 R 建模函数相比 其界面相当简陋 特别是 您必须给出响应向量和预测矩阵 而不是指定公式和数据框 您还会失去常规界面提供的许多生活质