15年日度时间序列调用ts_decompose报错少于2个周期原因咨询
报错原因
该报错和数据量、是否存在真实季节性无关,是传入ts_decompose()的时间序列对象不符合函数要求导致的:
- 基础
stats::decompose()仅支持R原生ts类对象,无法识别你构建的zoo类时间序列; - 你没有为日度数据明确设置季节性频率:周度季节性对应频率为7,月度季节性对应频率约为30.44(年平均日数/12),未设置频率的情况下函数无法识别序列的周期,因此判定周期数不足2个。
解决方法
1. 单季节性分解
如果需要分别识别周度、月度季节性,先将zoo对象转换为ts类并指定对应频率再调用分解函数:
# 提取zoo对象的数值列,指定频率7对应周度季节性 ts_weekly <- ts(zoo::coredata(your_zoo_obj), frequency = 7) # 周度季节性分解 decomp_weekly <- ts_decompose(ts_weekly, type = "additive") # 指定频率30.44对应月度季节性 ts_monthly <- ts(zoo::coredata(your_zoo_obj), frequency = 30.44) # 月度季节性分解 decomp_monthly <- ts_decompose(ts_monthly, type = "additive")
2. 多重季节性同时分解
如果需要同时提取周度、月度两种季节性特征,原生ts和decompose()不支持多频率序列,可使用forecast包的mstl()函数:
library(forecast) # 构建多频率时间序列,同时指定周度、月度两个周期 mts_obj <- msts(zoo::coredata(your_zoo_obj), seasonal.periods = c(7, 30.44)) # 多重季节性分解 decomp_res <- mstl(mts_obj) # 可视化分解结果 autoplot(decomp_res)
你的数据时间跨度从1995年到2021年,超过20年的日度数据完全满足季节性分解的周期数量要求,按照上述方法调整后即可得到你需要的周度、月度季节性规律。
内容的提问来源于stack exchange,提问作者Dario Lacan
相关产品推荐
相关产品推荐

