如何从 R 中的 GLM 调用中检索原始变量名称的列表?

Posted

技术标签:

【中文标题】如何从 R 中的 GLM 调用中检索原始变量名称的列表?【英文标题】:How to retrieve a list of the original variable names from a GLM call in R? 【发布时间】:2014-02-02 14:41:00 【问题描述】:

在 R 中使用 glm 函数时,可以在 formula 参数中使用 addNAlog 等函数。假设我们有一个数据框 Data 有 4 列:Classvar1 是因子,var2var3 是数字变量,我们适合:

Model <- glm(data  = Data, 
         formula   = Class ~ addNA(var1) + var2+ log(var3),  
         family    = binomial)

现在在 glm 输出变量 1 将被称为 addNA(var1)(例如在 Model$xlevels 中),而变量 3 将被称为 log(var3)

是否可以从 glm 输出中检索一个列表,该列表表明 var1、var2 和 var3 是从数据帧中提取的,而变量名中没有出现 addNA(var1) 或 log(var3)?

更一般地说,是否可以在 glm 函数内部生成任何转换/交叉项等之前,通过 glm 从输入数据帧中提取哪些列,调用 glm 之后制作?

【问题讨论】:

【参考方案1】:

这行得通:

all.vars(formula(Model)[-2])
## [1] "var1" "var2" "var3"

[-2] 索引从公式中删除响应变量。但是,您可能会失望,内部存储的模型框架没有原始变量,而是转换后的变量...

names(model.frame(Model))
## [1] "Class"       "addNA(var1)" "var2"        "log(var3)"  

如果您想要原始名称,那么 all.vars(getCall(Model)$formula) 应该可以工作。

【讨论】:

我想补充一点(虽然不是为了这个问题)[[2]] 指的是右侧,如果左侧不存在。例如,(~x1+x2)[[2]]x1 + x2。见?"~"【参考方案2】:

返回的列表包括callformulaterms项。您应该能够从这些元素中提取您想要的任何特定部分。如果您真的只想要源名称(这从返回的terms 中非常明显,那么运行gsub 以删除名称中“(”之前的所有内容,并删除尾随的“)”。

【讨论】:

以上是关于如何从 R 中的 GLM 调用中检索原始变量名称的列表?的主要内容,如果未能解决你的问题,请参考以下文章

r 此函数接受glm和geeglm / gee对象。它输出变量名称,变量级别,然后是比值比,置信度

r 此函数接受glm和geeglm / gee对象。它输出变量名称,变量级别,然后是比值比,置信度

在 R [重复] 中更改 glm 中的分类预测变量的级别

如何为具有不同公式的多个 glm 调用仅加载一次数据?

从 lambda 函数中检索 cloudformation 堆栈名称

R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型分类预测器(分类变量)被自动替换为一组虚拟编码变量summary函数查看检查模型使用table函数计算混淆矩阵评估分类模型性能