将系数名称转换为 R 中的公式

2023-12-31

当使用包含因子的公式时,拟合模型将系数命名为 XY,其中 X 是因子的名称,Y 是因子的特定级别。我希望能够根据这些系数的名称创建一个公式。

原因:如果我将套索拟合到稀疏设计矩阵(如下所示),我想创建一个仅包含非零系数项的新公式对象。

require("MatrixModels")
require("glmnet")
set.seed(1)
n <- 200
Z <- data.frame(letter=factor(sample(letters,n,replace=T),letters),
                x=sample(1:20,200,replace=T))
f <- ~ letter + x:letter + I(x>5):letter
X <- sparse.model.matrix(f, Z)
beta <- matrix(rnorm(dim(X)[2],0,5),dim(X)[2],1)
y <- X %*% beta + rnorm(n)

myfit <- glmnet(X,as.vector(y),lambda=.05)
fnew <- rownames(myfit$beta)[which(myfit$beta != 0)]
 [1] "letterb"              "letterc"              "lettere"             
 [4] "letterf"              "letterg"              "letterh"             
 [7] "letterj"              "letterm"              "lettern"             
[10] "lettero"              "letterp"              "letterr"             
[13] "letters"              "lettert"              "letteru"             
[16] "letterw"              "lettery"              "letterz"             
[19] "lettera:x"            "letterb:x"            "letterc:x"           
[22] "letterd:x"            "lettere:x"            "letterf:x"           
[25] "letterg:x"            "letterh:x"            "letteri:x"           
[28] "letterj:x"            "letterk:x"            "letterl:x"           
[31] "letterm:x"            "lettern:x"            "lettero:x"           
[34] "letterp:x"            "letterq:x"            "letterr:x"           
[37] "letters:x"            "lettert:x"            "letteru:x"           
[40] "letterv:x"            "letterw:x"            "letterx:x"           
[43] "lettery:x"            "letterz:x"            "letterb:I(x > 5)TRUE"
[46] "letterc:I(x > 5)TRUE" "letterd:I(x > 5)TRUE" "lettere:I(x > 5)TRUE"
[49] "letteri:I(x > 5)TRUE" "letterj:I(x > 5)TRUE" "letterl:I(x > 5)TRUE"
[52] "letterm:I(x > 5)TRUE" "letterp:I(x > 5)TRUE" "letterq:I(x > 5)TRUE"
[55] "letterr:I(x > 5)TRUE" "letteru:I(x > 5)TRUE" "letterv:I(x > 5)TRUE"
[58] "letterx:I(x > 5)TRUE" "lettery:I(x > 5)TRUE" "letterz:I(x > 5)TRUE"

由此我想要一个公式

~ I(letter=="d") + I(letter=="e") + ...(etc)

我检查了 Formula() 和 all.vars() 无济于事。此外,编写一个函数来解析它有点痛苦,因为可能会出现不同类型的术语。例如,对于 x:letter,当 x 是数值并且 letter 是一个因子时,或者 I(x>5):letter 作为另一个烦人的情况。

那么我是否不知道有一些函数可以在公式及其字符表示形式之间进行转换并再次转换回来?


当我运行代码时,我得到了一些不同的东西,因为 set.seed() 尚未指定。我没有使用变量名“letter”,而是使用“letter_”作为方便的分割标记:

> fnew <- rownames(myfit$beta)[which(myfit$beta != 0)]

> fnew
 [1] "letter_c" "letter_d" "letter_e" "letter_f" "letter_h" "letter_k" "letter_l"
 [8] "letter_o" "letter_q" "letter_r" "letter_s" "letter_t" "letter_u" "letter_v"
[15] "letter_w"

然后进行分割并打包成字符矩阵:

> fnewmtx <- cbind( lapply(sapply(fnew, strsplit, split="_"), "[[", 2),
+ lapply(sapply(fnew, strsplit, split="_"), "[[", 1))

fnewmtx [1] [2]
letter_c“c”“字母” letter_d“d”“字母” letter_e“e”“字母” letter_f“f”“字母”剪掉了其余部分

并将粘贴函数输出包装在 as.formula() 中,这是如何“在公式及其字符表示形式之间进行转换”的答案的一半。另一半是as.character()

form <- as.formula( paste("~", 
             paste( 
               paste(" I(", fnewmtx[,2], "_ ==", "'",fnewmtx[,1],"') ", sep="") , 
             sep="", collapse="+")
                 ) 
           )  # edit: needed to add back the underscore

现在输出是一个适当的类对象:

> class(form)
[1] "formula"
> form
~I(letter_ == "c") + I(letter_ == "d") + I(letter_ == "e") + 
    I(letter_ == "f") + I(letter_ == "h") + I(letter_ == "k") + 
    I(letter_ == "l") + I(letter_ == "o") + I(letter_ == "q") + 
    I(letter_ == "r") + I(letter_ == "s") + I(letter_ == "t") + 
    I(letter_ == "u") + I(letter_ == "v") + I(letter_ == "w")

我发现有趣的是 as.formula 转换使字母周围的单引号变成了双引号。

编辑:既然问题有一个或两个额外的维度,我的建议是跳过公式的重新创建。请注意,myfit$beta 的行名称与 X 的列名称完全相同,因此请使用非零行名称作为索引来选择 X 矩阵中的列:

> str(X[ , which( colnames(X) %in% rownames(myfit$beta)[which(myfit$beta != 0)] )] )
Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:429] 9 54 91 157 166 37 55 68 117 131 ...
  ..@ p       : int [1:61] 0 5 13 20 28 36 42 50 60 68 ...
  ..@ Dim     : int [1:2] 200 60
  ..@ Dimnames:List of 2
  .. ..$ : chr [1:200] "1" "2" "3" "4" ...
  .. ..$ : chr [1:60] "letter_b" "letter_c" "letter_e" "letter_f" ...
  ..@ x       : num [1:429] 1 1 1 1 1 1 1 1 1 1 ...
  ..@ factors : list()

> myfit2 <- glmnet(X[ , which( colnames(X) %in% rownames(myfit$beta)[which(myfit$beta != 0)] )] ,as.vector(y),lambda=.05)
> myfit2

Call:  glmnet(x = X[, which(colnames(X) %in% rownames(myfit$beta)[
                                           which(myfit$beta != 0)])], 
              y = as.vector(y), lambda = 0.05) 

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

将系数名称转换为 R 中的公式 的相关文章

  • 如何在 R 中执行近似(模糊)名称匹配

    我有一个专门用于生物学期刊的大型数据集 该数据集是由不同的人长时间编写的 因此 数据不采用单一格式 例如 在 作者 栏中我可以找到John Smith Smith John Smith J等 但它们是同一个人 我连最简单的动作都做不了 例如
  • 如何在 R 中的 for 循环内将值存储在向量中

    我正在开始使用 R 但我对以下问题感到非常沮丧 我试图将 for 循环内完成的某些计算的值存储到我之前定义的向量中 问题是如何进行索引 因为for循环迭代代码的次数取决于用户的输入 所以变量i不一定要从1开始 它可以从80开始 for举个例
  • R Shiny:如何将无功值从闪亮模块返回到主服务器功能?

    我有一个简单的玩具示例 它使用 add removeBtn 模块在 第一个 模块中添加和删除 UI 我需要跟踪单击 添加 删除 的次数 如果我不使用模块 这很容易 但我试图在嵌套模块的上下文中执行此操作 代码如下 但基本上 我似乎无法访问主
  • R Shinydashboard 自定义 CSS 到 valueBox

    我一直在尝试将 valueBox 的颜色更改为自定义颜色 超出 validColors 中可用的颜色 但一直无法这样做 我知道有一种方法可以使用标签来包含自定义 CSS 但是我无法将它们放在正确的位置 ui lt dashboardPage
  • 要在子集中显示的非数字条目的维恩图

    我有以下数据框 SET1 SET2 SET3 par1 par2 par1 par2 par3 par2 par3 par4 par5 我想制作一个维恩图 其中所有这些 parX 元素都显示在各自的子集中 即作为标签 而不仅仅是重叠元素的数
  • 当将遗传算法与 lme4 一起使用时,glmulti 无限期运行

    我在 R 中使用 glmulti 进行模型平均 我的模型中有大约 10 个变量 使得详尽的筛选不切实际 因此我需要使用遗传算法 GA 调用 method g 我需要包含随机效应 因此我使用 glmulti 作为 lme4 的包装器 此处提供
  • 使用点阵个性化 R 上显示的 X 轴值

    我收集了大量包含日期 客户端及其 NFS 使用情况的数据 我正在使用lattice R包进行绘图 正如对超级用户的建议 https superuser com questions 523195 plot custom log data on
  • 将维基百科中的表格加载到 R 中

    我正在尝试从以下 URL 将最高法院法官表加载到 R 中 https en wikipedia org wiki List of Justices of the Supreme Court of the United States http
  • 扩展数据框以使其具有与原始行中两列的范围一样多的行[重复]

    这个问题在这里已经有答案了 我有一个数据框如下 structure list symbol c u n v i a start c 9L 6L 10L 8L 7L end c 14L 15L 12L 13L 11L Names c symb
  • 如何将旋转的 NetCDF 转换回正常的纬度/经度网格?

    我有一个带有旋转坐标的 NetCDF 文件 我需要将其转换为正常的纬度 经度坐标 经度为 180到180 纬度为 90到90 library ncdf4 nc open dat nf 对于尺寸 它显示 1 5 variables exclu
  • R:单纯形错误:在下标赋值中不允许使用 NA

    对于以下具有目标函数和约束的最小化 boot simplex返回错误 Error in tab pr lt tab pr tab pr pc pv o tab pr NAs are not allowed in subscripted as
  • StatET调试工具

    我想我只是很密集 但我似乎无法弄清楚如何在 Eclipse 中的 R 中使用调试工具 StatET 插件 有人有关于这个主题的任何提示或教程吗 StatET 2 00 现在对高级 可视化调试提供实验性支持 需要 Eclipse 3 6 或
  • 在 R 上安装 TDA 包时出错:目标“diag.o”的配方失败

    使用 Ubuntu 16 04 和 R 3 4 1 安装 R 包 TDA 时收到错误消息 它似乎与制作 CGAL diag cpp 和 或 diag o 最后的完整错误打印输出 有关 我仔细看了这个 在 R 上安装 TDA 包时出错 htt
  • 无法编译包“maps”

    当我安装 maps 包时 安装中出现警告 ld warning ignoring file Library Developer CommandLineTools SDKs MacOSX10 14 sdk usr lib libSystem
  • 无法将“gather”输出的列名称更改为默认名称以外的任何名称

    我正在尝试使用gather in the tidyr包 但我无法更改默认名称的输出列名称 例如 df data frame time 1 100 a 1 100 b 101 200 df long df gt gather foo bar
  • 更改 R 中 ggplot geom_polygon 的颜色方案

    我正在使用地图库和 ggplot 的 geom polygon 创建地图 我只是想将默认的蓝色 红色 紫色配色方案更改为其他颜色 我对 ggplot 非常陌生 所以如果我没有使用正确的数据类型 请原谅 我使用的数据如下所示 gt head
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • 使用“assign()”为列表项分配值

    首先了解一些背景 我写了一个中缀函数 本质上取代了这个习惯用法 x length x 1 lt y 或者简单地说x lt append x y 对于向量 这里是 lt function x y xcall lt substitute x x
  • 使用data.table进行聚合

    经过 SO 用户的多次建议后 我终于尝试将我的代码转换为使用data table library data table DT lt data table plate paste0 plate rep 1 2 each 5 id rep c
  • 更改绘图区域背景颜色

    我想使用我们公司的颜色在 R 中制作一个图表 这意味着所有图表的背景应为浅蓝色 但绘图区域应为白色 我正在寻找答案 发现绘制一个矩形就可以完成这项工作 几乎 然而 绘图区域现在是白色的 并且图形不再可见 这可能吗 getSymbols SP

随机推荐

  • Django 登录不重定向到索引

    我有一个登录屏幕 在成功进行身份验证后 它应该在同一基本 URL 上显示用户详细信息 这些天它一直工作得很好 突然间它抛出 302 响应代码HTTP POST login 302 0 60 127 0 0 1 53864 当输入正确的用户名
  • Git 分叉和拉取请求工作流程

    我有一个反应项目的仓库 我想将该存储库作为其他几个项目的 基础 并将其作为起点 我还想根据 基地 的情况保持所有其他源自它的仓库是最新的 我使用 Bitbucket 进行远程存储库托管 并在本地使用 Tower 作为一个不错的 GUI 正确
  • 编译器通常使用寄存器来实现其“预期”目的吗?

    我一直在学习汇编 并且了解到四个主要的 x86 通用寄存器 eax ebx ecx 和 edx 每个都有一个预期或建议的用途 例如 eax是累加器寄存器 ecx用作循环的计数器 等等 大多数编译器是否尝试将寄存器用于建议的目的 或者它们是否
  • Vista 64 编写的代码在 32 位操作系统上兼容吗?

    我们正在购买新的开发机器并升级到 Vista 64 Ultimate 以利用我们的 8GB 内存 我们的经理希望我们在 32 位虚拟机中进行所有开发 以确保我们的代码在投入生产时不会出现问题 有什么方法可以保证生成的程序可以在 32 位操作
  • Android:共享首选项不保存按钮的状态

    我有一个包含三个活动的选项卡主机 并且在每个活动中都有按钮 每次按下按钮时 我都会更改背景可绘制资源 那么现在如何保存所有三个子活动中每个按钮的按下状态 以便当我从一个活动移动到另一个活动时 按钮的按下状态将反映在向后移动时 第一个活动 g
  • React Native Webview 处理 url 更改侦听器

    可以在 React Native Web 视图上处理 URL 更改 我尝试处理onNavigationStateChange听众 但它只发射一次 当页面加载时触发 onNavigationStateChange 当我导航到另一个页面时 此事
  • 如何在 MacOS 中创建虚拟音频输入设备来模拟麦克风

    这个想法是从网络接收音频流并将该流写入 重定向到音频输入设备 由于该设备不是物理设备 因此我需要虚拟输入 现在对于虚拟输入设备我发现了这个代码示例 https developer apple com library archive samp
  • 如何在 Linux 上检查 ELF 文件数据部分的内容?

    我一直在使用objdump查看 Linux ELF 二进制文件中的汇编代码 有时会通过存储在中的跳转表进行间接跳转rodata 只读数据 部分 如何获得objdump或任何其他工具可以向我显示此数据部分的内容 我可以执行程序并检查调试器中的
  • 角度和内容可编辑

    我在网上搜索过但找不到使用的方法contenteditableAngular 6 7 上的活动 Angular 似乎有一个混乱的解决方案 但该功能似乎并未延续到最新版本 一个用例是内容可编辑onChange事件 调用函数 div Type
  • 隐藏Excel中的单元格选择框

    我想知道是否有任何方法可以隐藏您在 Excel 中选择的单元格 出于演示目的 我想要光标本身 用于导航 但我想要突出显示我正在单击的单元格的框 如果可能的话 不可见 Thanks 如果您在工作表上使用按钮对象 则它不应突出显示任何单元格 如
  • 如何传递带有单个参数的 Java 8 lambda

    我想简单地传递一个 lambda 代码块 并在需要时执行它 我如何实现该方法executeLambda 在下面的代码中 以及方法签名是什么 public static void main String args String value H
  • GWT 覆盖深复制

    制作 gwt 覆盖类型深层副本的最佳方法是什么 我正在寻找一个函数或库来检查 GWT 覆盖并克隆它 它必须能够克隆包含的数组或对象 Thanks 我会考虑两种方法 大多数情况下 覆盖对象与 JSON 结合使用 因此您只需对对象进行字符串化并
  • 如何选择退出 Google Play 的Designed for Families 计划?

    我在 Google Play 上有一个免费应用程序 今天 我在 Play 管理中心的 应用内容 页面上提交了该应用的 目标受众和内容 后 收到了一封来自 Google Play 的电子邮件 它说我的应用程序不符合 为家庭设计 计划的资格标准
  • 我想将整个单元格排列在特定列中,而不是单个单元格

    I used POI并试图安排一整栏 但我发现的唯一方法是排列单个单元格 虽然我发现sheet setDefaultColumnStyle 并尝试使用这个功能 它根本不起作用 你能让我知道使用方法吗setDefaultColumnStyle
  • 如何在 vue 组件中将日期时间格式更改为日期?

    我的 vue 组件是这样的
  • 在 Node.js net.Socket 实例上模拟 ECONNRESET 错误

    我正在编写一些单元测试 我想在 net Socket 实例上模拟连接丢失 ECONNRESET 作为其中一项测试的一部分 这样做的最佳方法是什么 Thanks 我最终采取的方式如下 client end client emit error
  • 根据 vuejs 的路由参数加载组件/模板

    我想问我是否可以在 vuejs 上实现这个 所以基本上代码将根据参数 url 加载页面 模板 我已经搜索了一段时间 但无法获得我需要的结果 或者可能我只是搜索了错误的关键字 我的网址是这样的 所以我不能在我的路线中手动声明网址 因为它是动态
  • PowerQuery COUNTIF 之前的日期

    我对 PowerQuery 有点生疏 我需要计算同一个表中的 先前 条目 例如 假设我们有一张汽车销售表 出于 PowerQuery 的目的 该表将被命名为tblCarSales 我需要添加两个聚合列 第一个聚合列是以前的销售计数 Exce
  • 如何将 Docker 网络暴露给主机?

    考虑以下docker compose yml version 2 services serv1 build ports 8080 8080 links serv2 serv2 image redis ports 6379 6379 我将端口
  • 将系数名称转换为 R 中的公式

    当使用包含因子的公式时 拟合模型将系数命名为 XY 其中 X 是因子的名称 Y 是因子的特定级别 我希望能够根据这些系数的名称创建一个公式 原因 如果我将套索拟合到稀疏设计矩阵 如下所示 我想创建一个仅包含非零系数项的新公式对象 requi