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

使用dplyr管道按LSOA分组预测未来5个时间点数据

按LSOA分组预测时间序列的dplyr实现方案

核心思路

借助dplyr的分组嵌套能力,结合forecast包的时间序列建模工具,为每个LSOA组单独拟合模型并生成未来5年的预测结果,全程用管道流实现。

完整可运行代码

假设你的数据集名为ts_data,包含LSOA(分组标识)、Date(日期列)、Value(数值列):

library(dplyr)
library(tidyr)
library(forecast)
library(lubridate)

# 预处理:统一日期格式,按分组和日期排序
processed_data <- ts_data %>%
  mutate(Date = ymd(Date)) %>%
  arrange(LSOA, Date)

# 分组建模+预测全流程
forecast_results <- processed_data %>%
  group_by(LSOA) %>%
  nest() %>%
  mutate(
    # 为每组创建时间序列对象(frequency=1对应年度数据,按需调整:季度用4,月度用12)
    ts_obj = map(data, ~ ts(.x$Value, frequency = 1)),
    # 自动拟合最优ARIMA模型(可替换为ets()等其他模型)
    model = map(ts_obj, auto.arima),
    # 生成未来5年预测,h=5指定预测时间点数量
    forecast = map(model, forecast, h = 5),
    # 将预测结果转为数据框格式
    forecast_df = map(forecast, as.data.frame)
  ) %>%
  # 展开嵌套的预测结果,合并分组信息
  unnest(forecast_df) %>%
  # 生成对应预测日期(按原始数据最后日期往后推5年)
  mutate(
    Forecast_Date = map2(data, 5, ~ seq(last(.x$Date), by = "year", length.out = .y + 1)[-1]) %>% unlist()
  ) %>%
  # 按需选择输出列
  select(LSOA, Forecast_Date, Point.Forecast, Lo.80, Hi.80, Lo.95, Hi.95)

关键细节说明

  • 时间序列频率设置:ts()函数的frequency参数必须匹配你的数据周期,错设会导致模型拟合失效。
  • 模型替换:如果不想用ARIMA,把auto.arima换成ets(指数平滑)或其他时间序列模型即可,语法完全兼容。
  • h参数的作用:forecast(model, h = 5)里的h就是你需要的预测时长,这里直接设为5对应未来5年,精准匹配需求。
  • 日期对齐:通过seq()生成的日期序列,确保每个预测值对应正确的年份,避免出现日期和预测值不匹配的问题。

常见问题排查

  • 嵌套操作报错时,检查每个LSOA组的观测值数量,至少需要3-5个数据点才能拟合有效模型。
  • 日期生成异常时,确认Date列是标准日期格式,用ymd()/mdy()等函数统一转换后再操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:39:39