如何用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
相关产品推荐
相关产品推荐

