分解后的多元时间序列绘图出现额外时段,如何限制X轴为2005-2007?
问题原因与解决方法
为什么会显示2008-2011的额外时段?
decompose()函数对月度时间序列(frequency=12)做季节性分解时,会采用12项移动平均计算趋势成分。移动平均的计算需要在原始序列的首尾两端补充数据,用于处理边缘的移动平均计算,这就导致分解后返回的对象中,时间索引超出了原始的2005-2007范围。而plot.decomposed.ts(即调用plot(decompose(...))时使用的绘图方法)会默认依据分解后的数据范围渲染X轴,直接传入xlim参数无法覆盖这个默认行为。
如何将X轴限制为2005-2007?
方法1:手动绘制分解组件,精准控制X轴
提取分解结果的各个部分,用基础绘图函数逐一绘制,手动指定X轴范围:
# 执行分解 dec <- decompose(hom_rate_combo) # 获取原始序列的时间范围 original_time_range <- range(time(hom_rate_combo)) # 设置多图布局 par(mfrow = c(4, 1), mar = c(2, 4, 2, 1)) # 绘制原始序列 plot(dec$x, xlim = original_time_range, main = "原始序列") # 绘制趋势成分 plot(dec$trend, xlim = original_time_range, main = "趋势成分") # 绘制季节性成分 plot(dec$seasonal, xlim = original_time_range, main = "季节性成分") # 绘制残差 plot(dec$random, xlim = original_time_range, main = "残差")
方法2:使用stl()分解(更简便)
forecast包中的stl()函数采用LOESS平滑实现季节性分解,不会扩展原始序列的时间范围,直接设置xlim即可生效:
library(forecast) # 执行stl分解,s.window指定为"periodic"表示固定季节模式 dec_stl <- stl(hom_rate_combo, s.window = "periodic") # 绘图并限制X轴范围 plot(dec_stl, xlim = c(2005, 2007))
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

