在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
相关产品推荐
相关产品推荐

