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

在R中按年份运行OLS回归并存储系数至新数据框的问题

问题原因及解决方法

错误根源

你的代码中,lm()函数指定了data=df,这会强制每个分组都使用完整的原始数据集执行回归,而非当前年份的子数据子集,因此所有年份的回归结果完全一致。


解决方案1:修正do()的参数

将lm()中的data=df替换为data=.,do()内部的.指代当前分组对应的子数据框:

coef_matrix <- df %>% 
  group_by(Year) %>% 
  do(tidy(lm(Var1 ~ Var2 + Var3 + Var4 + Var5, data = .)))

解决方案2:使用现代嵌套操作(推荐)

do()已被dplyr新的嵌套工作流替代,使用nest()+map()更直观且易维护:

library(tidyverse)

coef_matrix <- df %>% 
  group_by(Year) %>% 
  nest() %>%  # 按年份嵌套生成子数据框列表
  mutate(
    model = map(data, ~lm(Var1 ~ Var2 + Var3 + Var4 + Var5, data = .x)),
    tidied_results = map(model, tidy)  # 整理回归输出为结构化数据
  ) %>% 
  unnest(tidied_results) %>%  # 展开嵌套结果
  select(-data, -model)  # 清理冗余列

运行上述任一代码后,每个年份都会基于自身的子数据独立执行OLS回归,得到不同的系数、标准误、t统计量和p值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:13:15