在R中使用glm
函数时,可以在addNA
参数中使用log
或formula
等函数。假设我们有一个包含4列的数据框Data
:Class
,var1
是因子,var2
,var3
是数字变量,我们适合:< / p>
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之后制成?
答案 0 :(得分:5)
这有效:
all.vars(formula(Model)[-2])
## [1] "var1" "var2" "var3"
[-2]
索引从公式中删除响应变量。但是,您可能会对内部存储的模型框架没有原始变量,但转换后的变量......
names(model.frame(Model))
## [1] "Class" "addNA(var1)" "var2" "log(var3)"
答案 1 :(得分:1)
返回的列表包含call
,formula
和terms
项。您应该能够从这些元素中提取您想要的任何特定部分。如果你真的只想要源名称(这在返回的terms
中很明显,那么运行一个gsub
来删除名称中“(”之前的所有内容,并删除尾随“)”