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

在R中按累积年份组执行多重线性回归的方法

累积式线性回归实现方案

问题背景

我有一份2005-2014年雨水的稳定同位素测量数据集,包含氘(Deuterium)和氧-18(Oxygen_18)的月度测量值(部分月份存在缺失值NA),年份为分组因子。需要执行累积式线性回归:

  • 第一个模型仅使用2005年数据
  • 第二个模型使用2005+2006年数据
  • 第三个模型使用2005+2006+2007年数据
  • 以此类推,直到最后一个模型包含2005-2014年所有数据

目前已实现单年份分组回归的代码如下:

library(tidyverse)

model.year <- df %>%
  nest(data = -Year) %>% 
  mutate(
    fit = map(
      data,
      ~ lm(Deuterium ~ Oxygen_18, data = .x)
      ),
    tidied = map(fit, tidy)
  ) %>% 
  unnest(tidied)

解决方案

核心思路是生成逐年累积的数据集子集,对每个子集拟合线性回归模型,再整理结果。以下提供两种可行方法:

方法一:基于filter的累积数据集生成

library(tidyverse)
library(broom)

# 确保数据集按年份升序排列
df <- df %>% arrange(Year)

# 获取所有唯一年份
unique_years <- unique(df$Year)

# 生成累积数据集列表:每个元素对应"2005到当前年份"的所有数据
cumulative_data_list <- map(unique_years, ~ df %>% filter(Year <= .x))

# 拟合模型并整理结果
cumulative_models <- tibble(
  end_year = unique_years,  # 标记每个模型的结束年份
  data = cumulative_data_list
) %>%
  mutate(
    fit = map(data, ~ lm(Deuterium ~ Oxygen_18, data = .x)),
    tidied = map(fit, tidy)
  ) %>%
  unnest(tidied)

# 查看结果示例
head(cumulative_models)

方法二:基于accumulate的累积数据合并

利用purrr::accumulate函数实现数据集的逐步合并,更贴合"累积"的语义:

library(tidyverse)
library(broom)

# 按年份分组并嵌套数据,确保年份顺序
df_nested <- df %>% 
  group_by(Year) %>% 
  nest() %>% 
  arrange(Year)

# 累积合并嵌套的数据框:从第一个年份开始,依次合并后续年份的数据
df_nested <- df_nested %>% 
  mutate(cumulative_data = accumulate(data, bind_rows))

# 拟合累积模型并整理结果
cumulative_models <- df_nested %>%
  mutate(
    fit = map(cumulative_data, ~ lm(Deuterium ~ Oxygen_18, data = .x)),
    tidied = map(fit, tidy)
  ) %>%
  unnest(tidied)

结果说明

最终的cumulative_models数据框会包含每个累积模型的回归结果,包括系数、标准误、p值等,同时通过end_year列标记每个模型包含的最晚年份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:35:15