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

如何获取特定变量的线性回归方程?及OBP未找到错误解决

解决线性回归中OBP未找到的错误及正确实现方法

问题根源

  • 管道符误用:ggplot绘图后不能直接用%>%连接后续数据处理代码——ggplot返回的是图形对象,无法传递给select这类数据操作函数。
  • 数据集不匹配:lm()里指定的data = teams_oak是原始数据集,而OBP是你通过mutate()生成的新变量,只存在于管道处理后的临时数据集中,原始数据根本没有这个字段,自然会报错。
  • OBP计算公式错误:正确的上垒率公式是(H + BB + HBP)/(AB + BB + HBP + SF),你当前写法没给分子分母加括号,运算顺序完全错误,会得到离谱的结果。
  • 赋值语法错误:在管道里直接写m1<-lm(...)不符合tidyverse的管道逻辑,没法正确捕获处理后的数据集。

修正后的代码实现

方法一:先处理数据,再分别绘图建模

# 先生成包含正确OBP的数据集并保存
teams_oak_processed <- teams_oak %>%
  select(G:FP) %>% 
  mutate(OBP = (H + BB + HBP)/(AB + BB + HBP + SF))  # 修正公式括号

# 绘制散点图与拟合线
ggplot(teams_oak_processed, aes(x=OBP, y=W)) +
  geom_point() +
  geom_smooth(method = "lm") +
  labs(title="OBP vs. Wins in MLB 1982-2002 ex:1994",
       x="On Base Percentage",
       y="Wins")

# 构建线性回归模型
m1 <- lm(data = teams_oak_processed, formula = W ~ OBP)
# 查看回归详细结果
summary(m1)

方法二:纯管道风格建模(需broom包支持)

如果习惯用管道串联所有操作,可以借助broom包处理模型:

library(broom)

m1 <- teams_oak %>%
  select(G:FP) %>% 
  mutate(OBP = (H + BB + HBP)/(AB + BB + HBP + SF)) %>%
  do(model = lm(W ~ OBP, data = .)) %>%
  pull(model)

# 查看回归结果
summary(m1[[1]])

核心注意点

  • 调用lm()时,务必保证指定的data数据集包含所有需要的变量,尤其是mutate生成的新字段。
  • 管道符%>%是把前一步输出作为后一步的第一个参数,要注意前后函数的输入输出类型匹配(比如图形对象不能传给数据处理函数)。
  • 统计公式的运算优先级很关键,一定要用括号明确分子分母,避免计算错误。

内容的提问来源于stack exchange,提问作者campbellsoup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:01:15