如何从broom包的tidy功能中提取线性回归的截距与斜率
问题解答
完全可以从broom包的tidy()功能中提取线性回归模型的截距与斜率,你现有代码运行报错是因为对tidy()的输出结构不熟悉导致的。
broom::tidy()对lm模型的输出是标准数据框,和你提取R方用到的glance()不同,tidy()返回的是单变量级别的统计结果,核心列说明如下:
term:存储变量名,截距对应的取值为(Intercept),各自变量名称对应斜率项estimate:存储系数的估计值,也就是你需要提取的截距、斜率数值- 其余列还包括标准误、t统计量、p值等变量级别的统计指标
你原来的pull(Intercept)写法会报错,是因为输出数据框中没有名为Intercept的列,截距是term列的一个取值,对应的系数值在estimate列,正确写法参考如下:
1. 单独提取截距
library(dplyr) library(broom) mdl %>% tidy() %>% filter(term == "(Intercept)") %>% pull(estimate)
2. 单独提取某一个自变量的斜率
以你的示例中educationMedium项的系数为例:
mdl %>% tidy() %>% filter(term == "educationMedium") %>% pull(estimate)
3. 批量提取所有系数(含截距)为命名向量
如果需要一次性导出所有系数后续调用,可以直接生成命名向量:
# 生成命名向量,名字为term取值,值为对应系数 coef_vec <- mdl %>% tidy() %>% pull(estimate, name = term) # 直接按名称取值即可 intercept <- coef_vec["(Intercept)"] edu_high_slope <- coef_vec["educationHigh"]
小优化提示:你现有代码中
lm()调用时传入的family = gaussian是冗余参数,family是广义线性模型glm()的参数,普通线性回归lm()不需要指定该参数,删除即可。
内容的提问来源于stack exchange,提问作者SHW
相关产品推荐
相关产品推荐

