4

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

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

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

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

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

4

2 回答 2

7

这有效:

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)应该可以。

于 2014-01-14T14:00:53.743 回答
1

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

于 2014-01-14T13:59:07.987 回答