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

如何在R的fable框架下处理年度特定时段日度数据的STL及建模?

处理年度特定时段的tsibble数据并完成STL分解(fable框架)

问题核心在于:tsibble默认要求规则时间序列(如每日连续无间隙),但你的数据仅包含每年固定65天的花粉季,从全年视角看存在大量隐式间隙,导致STL无法运行。填充全年NA不符合需求,因此需要重新定义序列的规则性,聚焦花粉季内部的连续时序。

方法1:重构索引为「年度内季节日序」

将数据转换为按年份分组、花粉季内连续日序的面板序列,每个组内的时序为规则的65天,满足STL的运行要求。

步骤1:添加年度内季节日变量

给tsibble添加标记花粉季内第几天的变量,同时提取年份作为分组键:

library(tsibble)
library(dplyr)
library(fable)
library(feasts)

# 处理数据:按年份分组生成花粉季内的日序
dataset_processed <- dataset %>%
  mutate(year = year(Date)) %>%
  group_by(year) %>%
  mutate(day_in_season = row_number()) %>% # 每年花粉季从第1天到第65天
  ungroup() %>%
  # 转换为以year为分组键、day_in_season为索引的tsibble
  as_tsibble(key = year, index = day_in_season)

步骤2:执行STL分解

此时每个年份的序列都是连续的65天,无间隙,可正常运行STL:

# 运行STL分解(可根据数据调整season和trend的window参数)
stl_components <- dataset_processed %>%
  model(STL(Metric ~ season(window = 13) + trend(window = 21))) %>%
  components()

# 可视化分解结果
stl_components %>% autoplot()

步骤3:映射回原日期(可选)

如果需要将分解结果与原日期对应,可合并原数据:

# 合并原日期信息
stl_components_with_date <- stl_components %>%
  left_join(
    dataset %>% mutate(year = year(Date), day_in_season = row_number()),
    by = c("year", "day_in_season")
  ) %>%
  select(Date, year, day_in_season, everything())

方法2:自定义时间频率(跨年度连续季节序列)

若要将所有花粉季数据视为一个连续序列(每65天为一个年度周期),可自定义tsibble的频率:

# 将所有花粉季数据按时间顺序连续编号,定义每65天为一个周期
dataset_custom_freq <- dataset %>%
  mutate(seasonal_index = row_number()) %>%
  as_tsibble(index = seasonal_index) %>%
  index_by(seasonal_year = floor_date(seasonal_index, "65 days"))

# STL分解,指定季节周期为65
stl_components_custom <- dataset_custom_freq %>%
  model(STL(Metric ~ season(window = 13, period = 65) + trend(window = 21))) %>%
  components()

stl_components_custom %>% autoplot()

后续建模与预测

  • 气象因子影响测试:将STL分解得到的trend或remainder成分作为因变量,气象数据作为自变量,使用lm()或fable中的ARIMA()等模型建模分析。
  • 未来花粉季预测:基于处理后的面板数据,针对每个day_in_season的Metric构建预测模型(如ETS()或ARIMA()),预测未来年份的65天数据后,映射回对应日期即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:20:06