r - 从 "lm"和 "glm"对象中获取输入变量名称的向量

标签 r glm lm

我试图从 lm() 函数返回的模型对象中获取输入变量名称。我尝试访问 lm_obj$terms 下的属性“变量”。但是,返回的对象是“语言”类型对象,而不是常规名称向量。 例如:

lm_obj = lm(y ~ x + z + z:x, data=df)
attr(lm_obj$terms, 'variables')
# list(x, z)

什么是“语言”类型?如何将此“语言”类型对象转换为 c('x', 'z') 等常规向量?

最佳答案

您走在正确的道路上。 “terms” 对象是您应该查看的位置。如果您想省略响应变量,可以使用delete.response

all.vars(delete.response(terms(lm_obj)))
#[1] "x" "z"

我还想向您指出

labels(terms(lm_obj))
#[1] "x"   "z"   "x:z"

这有时更有用。


一个可重现的示例来补充您的问题

df <- data.frame(y = rnorm(20), x = rnorm(20), z = rnorm(20))
lm_obj <- lm(y ~ x + z + z:x, data = df)

要了解为什么我们应该比其他地方更关注“术语”,您可以在此处针对以下模型尝试不同的答案:

## thanks to user "WhatIf" for proposing `model = FALSE`
lmfit <- lm(y ~ poly(x) + z + I(z ^ 2) + z:x, data = df,
            na.action = na.exclude, model = FALSE)
rm(df)  ## do not omit this line! run it before trying other answers

其他回复

(1) why does the 'variables' attribute store the 'language' object that spells out a list rather than a regular "list" object?

因为“项”是在模型拟合的早期阶段创建的:公式解析。实际变量评估稍后发生。

(2) how to convert a 'language' object to a regular "list" or "vector".

我们进行评估,可以在其中找到引用的变量:

eval(attr(terms(lm_obj), 'variables'), df)

关于r - 从 "lm"和 "glm"对象中获取输入变量名称的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72999859/

相关文章:

R计算具有奇点的lm模型的稳健标准误差(vcovHC)

r - 如何从行名称查找时间差?

运行具有 Gamma 分布的 GLM,但数据包含零

r - OLS 估计函数

R - 在 data.table 中使用 glm

r - 偏移量不适用于二项式 GLM

r - 循环回归模型项的组合

r - 矢量子集性能 : name versus index

R - 图例 : assign multiple colours to the same text

r - 在 R 中将时间戳标记到 session 中