如何获取特定变量的线性回归方程?及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
相关产品推荐
相关产品推荐

