gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:32:15 25 4
gpt4 key购买 nike

我试图从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com