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

如何用AutoSTR生成类mstl风格的趋势分解图(移除预测、单独展示趋势)

问题

我拥有西班牙的每日电力负荷数据,数据样例如下:

> head(spain_daily)
# A tibble: 6 × 2
  Date       Daily_Load
  <date>          <dbl>
1 2022-01-01     20872.
2 2022-01-02     22729.
3 2022-01-03     27358.
4 2022-01-04     28262.
5 2022-01-05     28048.
6 2022-01-06     24182.
> tail(spain_daily)
# A tibble: 6 × 2
  Date       Daily_Load
  <date>          <dbl>
1 2024-12-26     25210.
2 2024-12-27     26363.
3 2024-12-28     25041.
4 2024-12-29     24182.
5 2024-12-30     27073.
6 2024-12-31     25924.

由于电力消费具有周期性,我使用forecast包的mstl函数分解序列,生成包含单独趋势子图的分解图,代码如下:

library(forecast)
library(stR)

autoplot(mstl(msts(spain_daily$Daily_Load, seasonal.periods = c(7, 365.25))))

随后尝试用stR包的AutoSTR函数生成同类分解图,代码如下:

plot(AutoSTR(msts(spain_daily$Daily_Load, seasonal.periods = c(7, 365.25))))

但生成的图包含蓝色预测序列,且未单独展示趋势子图,请问如何调整该绘图,使其与mstl生成的图样式一致?

解决方案

要让AutoSTR的绘图和mstl的分解图样式一致,需针对两个核心问题调整:隐藏预测序列、单独展示所有分解分量子图,可通过以下两种方法实现:

方法1:直接修改plot.AutoSTR参数

plot.AutoSTR内置参数可直接控制预测显示和分量布局:

# 先生成AutoSTR分解结果
str_result <- AutoSTR(msts(spain_daily$Daily_Load, seasonal.periods = c(7, 365.25)))

# 绘图时关闭预测,强制展示所有分量子图
plot(str_result, 
     include.forecast = FALSE,  # 隐藏蓝色预测序列
     plot.all.components = TRUE)  # 拆分趋势、周/年季节分量为单独子图

方法2:提取分量后用autoplot自定义绘图

如果需要更灵活的样式控制,可从AutoSTR结果中提取各分量,再用forecast包的autoplot生成和mstl一致的布局:

# 从AutoSTR结果中提取分解分量
trend <- str_result$trend
seasonal_weekly <- str_result$seasonal[,1]  # 周周期季节分量
seasonal_yearly <- str_result$seasonal[,2]  # 年周期季节分量
remainder <- str_result$remainder

# 组合为时序对象,用autoplot生成子图布局
library(tsibble)
decomp_data <- tibble(
  Date = spain_daily$Date,
  Trend = trend,
  Weekly_Seasonal = seasonal_weekly,
  Yearly_Seasonal = seasonal_yearly,
  Remainder = remainder
) %>% as_tsibble(index = Date)

autoplot(decomp_data, facets = TRUE)

内容的提问来源于stack exchange,提问作者Saïd Maanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:30:09