求助:使用reframe对多年份数据集执行多元回归并提取BB系数
解决方法
你的报错核心问题是**reframe不能直接作用在lm模型对象上**,它是dplyr中针对分组数据框的函数,需要配合group_by按年份分组后使用。以下是正确的实现步骤:
1. 加载必要包
确保提前安装并加载tidyverse(包含dplyr)和broom(用于整理回归结果):
library(tidyverse) library(broom)
2. 按年份批量运行回归并提取结果
通过分组+reframe的方式,对1961-2018年每一年的数据单独运行回归,同时整理出系数、置信区间等信息:
yearly_reg_results <- Teams %>% # 筛选目标年份范围 filter(yearID %in% 1961:2018) %>% # 按年份分组,后续操作逐组执行 group_by(yearID) %>% # 和原模型一致,转换变量为每局均值 mutate(BB = BB/G, HR = HR/G, R = R/G) %>% # 用reframe对每组数据运行回归,并用tidy整理结果 reframe( tidy(lm(R ~ BB + HR, data = cur_data()), conf.int = TRUE) ) %>% # 取消分组,方便后续操作 ungroup()
关键细节说明:
group_by(yearID):将数据按年份拆分,确保每个回归只用到当年的球队数据cur_data():在分组环境中,指代当前组的数据集,避免lm误用到全局数据reframe:和summarize不同,它允许每组返回多行结果(这里每组回归会输出3行:截距、BB系数、HR系数),完美适配tidy()的输出格式
3. 筛选BB系数数据(用于绘图)
从结果中提取BB对应的系数行:
bb_yearly_coefs <- yearly_reg_results %>% filter(term == "BB")
4. 绘图示例(参考)
基于提取的BB系数数据绘制散点图:
ggplot(bb_yearly_coefs, aes(x = yearID, y = estimate)) + geom_point(color = "steelblue") + geom_errorbar(aes(ymin = conf.low, ymax = conf.high), width = 0.3) + theme_minimal() + labs(x = "年份", y = "BB系数估计值", title = "1961-2018年BB对得分(R)的影响系数变化")
内容的提问来源于stack exchange,提问作者jonathanl86
相关产品推荐
相关产品推荐

