You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 13:24:03