时间序列 R 07 时间序列分解 Time series decomposition

时间序列 R 07 时间序列分解 Time series decomposition 一个时间序列可以分解为多个模型的组合 1.1 时间序列的组成 1.1.1 时间序列组成模式 三种时间序列模式(不计剩余残差部分) 1. 趋势Tend :比如线性趋势,先增加后降低的整体趋势 2. 季节性Seasonal :以时间为固定周期,呈现循环的特性 3. 周期性Cyclic:在以不固定周期不断震荡,通常周期性至少持续2年 下图就是讲时间序列分解之后的结果,应该比较容易理 阅读详情

一个时间序列可以分解为多个模型的组合

1.1 时间序列的组成

1.1.1 时间序列组成模式

三种时间序列模式(不计剩余残差部分) 
1. 趋势Tend :比如线性趋势,先增加后降低的整体趋势 
2. 季节性Seasonal :以时间为固定周期,呈现循环的特性 
3. 周期性Cyclic:在以不固定周期不断震荡,通常周期性至少持续2年 
下图就是讲时间序列分解之后的结果,应该比较容易理解上面的定义 
这里写图片描述 
下图是周期性的表现之一: 
这里写图片描述 
每个周期的震荡持续了6-10年,整体没有什么明显的趋势,第一幅图中trend包含了trend与cyclic

1.1.2 时间序列分解

可以将时间序列按下式分解为上面的几种模式,分解方式有相加方式或者相乘的方式如下: 

yt=St+Tt+Et,yt=St+Tt+Et,


或者 

yt=St×Tt×Et.yt=St×Tt×Et.


其中StSt为季节性模式部分,TtTt为包含趋势与周期性的模式部分,EtEt为剩余残差部分 
其各自的适用范围: 
- 季节性和trend-cycle变动的量级不随时间变化,用加法模式 
- 两者的波动随时间成比例,适用于乘法模式 
- 乘法模式可以通过log变为加法模式:

yt=St×Tt×Et⟺logyt=logSt+logTt+logEtyt=St×Tt×Et⟺log⁡yt=log⁡St+log⁡Tt+log⁡Et


还是看这幅图 
这里写图片描述 
注意右边有一个灰色的比例条,他表示同样尺寸的线段在不同图上的比例,上图可见残差的长度较小。 
下面介绍几种图; 
1. seasonal sub-series plots 
这里写图片描述 
将每个seasonal里面的子周期呈现 
2. Seasonally adjusted data 
不考虑seasonal的数据 
这里写图片描述

 

1.2 Moving averages 移动平均

移动平均用于估计时间序列的趋势和周期

1.2.1 Moving average smoothing

简单来说就是用数值前后k个时间点的值的平均值来代替当时值 

T^t=1m∑j=−kkyt+jT^t=1m∑j=−kkyt+j

 

m=2*k+1 
称为m -MA 
要注意的是,平滑之后,会使前面k个值和后面的k个值变为null.下图红色是平滑之后的曲线 
这里写图片描述

1.2.2 Moving averages of moving averages

简单来说就是在已经平滑的基础上再一次平滑,这样可以使不同远近的数据有不同的权重,例如下例先使用4-ma平滑再使用2-ma平滑,称为2x4-MA: 
这里写图片描述 
公式为: 

T^t=12[14(yt−2+yt−1+yt+yt+1)+14(yt−1+yt+yt+1+yt+2)]=18yt−2+14yt−1+14yt+14yt+1+18yt+2.T^t=12[14(yt−2+yt−1+yt+yt+1)+14(yt−1+yt+yt+1+yt+2)]=18yt−2+14yt−1+14yt+14yt+1+18yt+2.


可见最后的结果是取相近5个值的加权平均数, 
其特征为第一个和最后一个值的权重为1/(2m),其他值为1/m 
另外还需注意,也可使用其他组合但是奇数需要和奇数组合,偶数与偶数组合

 

1.2.3seasonal data处理

  • 如果季节性周期是偶数m,使用2*m-MA来估计trend-cyclic
  • 如果季节性周期是奇数m,使用m-MA来估计trend-cyclic
  • 例如使用2*12-MA来平滑以月为季节性周期的数据,使用7-ma来平滑以天为周期的数据,其他的选择可能会使trend-cyclic受到seasonal的影响。

1.2.4 权重移动平滑

故名,将原来的moving average 的每一相前面加一个权重,2*4-MA也相当于加了权重,文中提到了Spencer和Henderson权重,常见权重系数如下图: 
这里写图片描述 
S = Spencer’s weighted mov­ing average 
H = Henderson’s weighted mov­ing average

1.3 经典分解

1.3.1 分解方法

经典分解分为加法分解和乘法分解 
假设所用数据为季节性周期为m的时间序列,m也成为季节性指数 
其步骤如下: 
1. 如果季节性周期是偶数m,使用2*m-MA来估计trend-cyclic T^tT^t如果季节性周期是奇数m,使用m-MA来估计trend-cyclic T^tT^t 
2. 计算去趋势序列y−T^ty−T^t 
3. 计算季节趋势中每一个元素的平均值,如以一年中12月为周期,那么计算所有的1月的平均值作为1月的值,计算12个月的作为周期的S^tS^t 
4. 计算E^t=yt−T^t−S^tE^t=yt−T^t−S^t 
乘法未解与上面的模式类似 
只不过是将减法变为除法,不再赘述

1.3.2 经典分解的缺点

  1. 使用moving average时会使数据的前面和后面的数值缺失,变为null
  2. 季节性的趋势可能会随时间变化,而经典中使用了平均值,忽略了这一变化
  3. 其求平均值时,容易受到异常值的影响,如有一个月特别不正常,直接计算平均值容易得到不正确的结果

1.4 X-12-ARIMA

这是美国人口普查局的发明,克服了1.3.3中的缺点,但是只适用于季度或者月份为季节性周期的时间序列。 
以乘法模式为例,分解步骤: 
1. 以2*12-MA来计算T^tT^t 
2. 计算集中率(centered rations)yt/T^tyt/T^t 
3. 使用3*3-MA对yt/T^tyt/T^t的月份进行平滑以估计季节性S^tS^t 
4. 用yt/T^tyt/T^t除以S^tS^t得到E^tE^t 
5. 去掉不合理的E^tE^t,得到修正后 E^tE^t 
6. 使用E^tE^t乘以S^tS^t得到修正后的centered rations 
7. 重复步骤3得到修正后的S^tS^t 
8. 用新的seasonal除源数据得到seasonally adjusted序列(yt/S^tyt/S^t) 
9. 使用Henderson MA对上面的seasonal adjusted 序列平滑得到trend-cyclic T^tT^t,注意随机性越大使用的平滑次数越大,对于以月份为周期的序列可以使用9-, 13-, or 23-term Henderson 
10. 重复步骤二得到新的yt/T^tyt/T^tcentered rations 
11. 使用新的数据,重复步骤3-6,其中使用3x5-MA代替3x3-MA 
12. 使用3x5-MA重复步骤7 
13. 重复步骤8得到seasonally adjusted序列(yt/S^tyt/S^t) 
14. 上面得到的seasonally adjusted序列(yt/S^tyt/S^t)除以第9步得到的trend-cyclic T^tT^t,得到remainder componentE^tE^t 
15. 去除E^tE^t不合理的值 
16. 完成 
注意:是具体情况步骤11,12中的ma可以替换为3x3 3x5 3x9 
R 中的相关包 https://cran.r-project.org/web/packages/x12/index.html

1.5 STL

stl=Seasonal and Trend decomposition using Loess 
Loess是一种评估非线性关系的方法 
1990年Cleveland发表的文章阐述了stl 
http://cs.wellesley.edu/~cs315/Papers/stl%20statistical%20model.pdf

1.5.1 优点缺点

优点 
1. 可以适用于任何季节周期的数据,(x12ARIMA只能是季度或者月份) 
2. 季节性成分随时间的变化率可以被控制 
3. trend-cycle 的平滑可以被控制 
4. 更加鲁棒 
缺点 
1. 不能自动处理trading day or calendar variation 
2. 只有加法模式 
可以使用Box-Cox 来将乘法变为加法,将λλ设为0为乘法,1为加法。 
看一下例子 
这里写图片描述 
这里写图片描述 
图6.10中将季节性变化设置为不变,得到的趋势更多变2010年之后成下降趋势 
6.10的代码:

fit <- stl(elecequip, t.window=15, s.window="periodic", robust=TRUE)
plot(fit)

t.window, s.window是两个最终要的参数

1.6 分解预测

利用时间序列分解可以将时间序列分解为

yt=S^t+A^tA^t=T^t+E^tyt=S^t+A^tA^t=T^t+E^t


对于季节性的成分的预测直接使用了naive方法,具体见下面的链接 
http://blog.youkuaiyun.com/bea_tree/article/details/51182002#t5,对于A^tA^t的预测则有很多种方法,以后会慢慢叙述,这里还是使用了naive的方法。 
栗子: 
步骤1 分解,用naive来预测A^tA^t

 

fit <- stl(elecequip, t.window=15, s.window="periodic", robust=TRUE)
eeadj <- seasadj(fit)
plot(naive(eeadj), xlab="New orders index",
  main="Naive forecasts of seasonally adjusted data")
  • 1
  • 2
  • 3
  • 4

,步骤2 用naive预测seasonal

fcast <- forecast(fit, method="naive")
plot(fcast, ylab="New orders index")
  • 1
  • 2

这里写图片描述 
这里写图片描述 
Further Reading 
https://www.otexts.org/fpp/6/8

1.7 Further reading

Cleveland, R. B., W. S. Cleveland, J. E. McRae and I. J. Terpenning (1990). STL : A seasonal-trend decomposition procedure based on loess. Journal of Official Statistics 6(1), 3–73. 
Gomez, V. and A. Maravall (2001). “Seasonal adjustment and signal extraction in economic time series”. In: A course in time series analysis. Ed. by D. Pena, G.C. Tiao and R.S. Tsay. New York: John Wiley & Sons. Chap. 8, pp.202–246. 
Ladiray, D. and B. Quenneville (2001). Seasonal adjustment with the X-11 method. Lecture notes in statistics. Springer-Verlag. 
Miller, D. M. and D. Williams (2003). Shrinkage estimators of time series seasonal factors and their effect on forecasting accuracy. International Journal of Forecasting, 19(4), 669–684. 
Theodosiou, M. (2011). Forecasting monthly and quarterly time series using STL decomposition. International Journal of Forecasting, 27(4), 1178–1195.

 

使用R进行时间序列分解 非季节性数据的时间序列分解数据http://robjhyndman.com/tsdldata/misc/kings.dat分析非季节性的数据包含两个组成成分,分别为随机噪声和趋势。为了能使用加性模型(Additive Model)描述非季节性数据的趋势成分,我们使用平滑法(SMA)来计算一个时间序列的移动平均。在使用SMA计算时间序列的移动平均值时,需设定跨度n。R代码library("TTR") 阅读详情

相关推荐

Python时间序列四成分分解:趋势、季节性、周期性与残差实战

时间序列分解是理解时序数据结构的基础技术,其核心在于将原始序列科学拆解为趋势、季节性、周期性和残差四大可解释成分。这一过程不仅涉及statsmodels等库的调用,更需依据业务逻辑选择加法/乘法模型、合理设定周期长度(如7天周周期或365天年周期),并借助HP滤波识别非固定周期的周期性干扰。技术价值在于提升预测模型鲁棒性、支撑异常检测基线设定、驱动营销与库存等业务决策。典型应用场景包括零售销量归因、金融交易量诊断及供应链时效分析。本文聚焦Python原生工具链,强调可审计、可复现、可落地的工程化分解实践。

weixin_30595035的博客 428

使用R语言进行时间序列分析

一、时间序列的定义 时间序列是将统一统计值按照时间发生的先后顺序来进行排列,时间序列分析的主要目的是根据已有数据对未来进行预测。 一个稳定的时间序列中常常包含两个部分,那么就是:有规律的时间序列+噪声。所以,在以下的方法中,主要的目的就是去过滤噪声值,让我们的时间序列更加的有分析意义。 二、时间序列的预处理 1、平稳性检验: 拿到一个时间序列之后,我们首先要对其稳定性进行判断,只有非白噪声的稳定性...

查数菇乐园 6764

VAR模型:多变量时间序列协同预测与系统洞察

多变量时间序列预测是工业监控、金融风控和宏观经济分析中的核心挑战,其本质在于建模变量间的动态耦合关系。向量自回归(VAR)作为一种经典统计方法,通过联合建模多个平稳序列的滞后交互,无需预设因果结构即可捕捉跨变量反馈机制。相比单变量模型,VAR在数据效率、鲁棒性和可解释性上具有显著优势,尤其适合小样本、高噪声的真实工程场景。它不仅支持精准短期预测,更能支撑脉冲响应分析、方差分解等深度系统诊断,将原始数据转化为可行动的业务洞察。本文聚焦VAR模型的落地逻辑,涵盖平稳性检验、滞后阶数选择、残差诊断及协整扩展,直击

weixin_33847182的博客 374

时间序列预测实战导航:37个关键决策概念清单

时间序列预测不是理论考试,而是贯穿数据获取、特征工程、模型训练到线上监控的连续决策过程。理解平稳性、滞后特征、外生变量等核心概念,本质是掌握其在真实场景中的操作逻辑——比如ADF检验p值=0.07时该差分还是换模型,或如何用CCF确定天气变量的最优滞后阶数。这些概念的价值在于驱动可落地的技术判断,支撑零售销量预测、金融风控、IoT设备故障预警等高价值应用。本文聚焦预测全流程中真正影响上线效果的37个最小认知单元,拒绝堆砌术语,直击建模卡点。

weixin_34284188的博客 393

时间序列预测实战:从业务闭环到工程落地的全链路指南

时间序列预测(Time Series Forecasting)是数据科学中连接算法与业务决策的关键技术,其核心不在于模型复杂度,而在于将不确定性转化为可干预、可推演的结构化输出。它基于统计建模原理(如平稳性检验、季节分解、误差校准),通过融合业务日历、实体维度与外部环境特征,实现对销量、设备故障、用户行为等关键指标的滚动预判。技术价值体现在驱动实时调度、库存优化、资源扩容等闭环动作,广泛应用于智能制造、零售供应链、SaaS客户运营及能源管理等场景。本文聚焦 forecasting 在真实工业项目中的落地逻辑

mybwu_com的专栏 1078

有季节效应的非平稳序列分析之因素分解

6.1 因素分解理论 6.2因素分解模型 6.2.1因素分解模型的选择 6.2.2趋势效应的提取 简单中心移动平均的良好属性 R语言中,使用filter函数可以做简单移动平均 6.2.3 季节效应的提取 6.2.4 X11季节调节模型 X11模型分析步骤: ​确定性因素分解函数: 小结

PY洋洋 1万+

时间序列预测的27个决策关键概念地图

时间序列预测不是纯数学建模,而是面向业务交付的系统性工程决策过程。其核心在于理解数据特性、诊断模型亚健康状态、嵌入业务逻辑并验证真实决策价值。从平稳性、缺失值语义、可预测性量化等基础概念,到残差自相关陷阱、预测区间退化、时间切分因果律等高发故障点,这些概念构成了连接算法输出与业务信任的关键桥梁。尤其在制造业、零售、能源等强周期、多源异构场景中,忽略‘循环平稳性检验’或‘事件日历编码规范’等概念,极易导致上线后指标持续恶化。本文提炼出27个经上百项目验证的‘决策临界点’概念,覆盖问题定义、诊断排查、业务增强与

weixin_34327223的博客 389

用R语言进行时间序列分析和预测

时间序列分析是一种重要的数据分析方法,可以帮助我们理解和预测时间序列数据中的趋势、季节性和随机性等特征。R语言提供了丰富的时间序列分析工具和函数,使得我们能够方便地进行数据分解和预测。本文将介绍如何使用R语言进行时间序列的分解和预测,并提供相应的源代码。R语言中,我们可以使用多种方法进行时间序列预测,如ARIMA模型、指数平滑模型等。通过上述代码示例,我们可以使用R语言进行时间序列的分解和预测。当然,R语言还提供了其他丰富的时间序列分析工具和函数,可以根据具体需求选择适合的方法进行分析和预测。

Book_Sea的博客 1524

0307data quality reproduce_1

uname -m终端查看mac芯片 HSI_SSFTT-main │ ├── README.md ├── data │ ├── Indian_pines_corrected.mat │ └── Indian_pines_gt.mat │ └── cls_SSFTT_IP ├── IP_train.py ⭐ 主程序(训练+测试) ├── SSFTTnet.py ⭐ Transformer模型定义 ├── get_cls_map.py

dayulala的博客 400

R语言使用时间序列分析预测未来销售

在许多商业决策中,预测未来销售额是非常重要的。例如,预测未来销售额可以帮助企业制定生产计划、管理库存、制定销售策略等。时间序列分析为我们提供了一种理解和预测随时间变化的现象的方法,尤其适合于销售预测。

斌擎科技 347

【信息科学与工程学】【数据中心】【智算中心】 第二十六篇 计费系统篇03-智算业务计费

动态批价与规则引擎的协同本质是 ​​“策略与执行解耦”+“实时上下文驱动”​​技术协同​:规则引擎定义业务逻辑(What),批价引擎执行计算(How),通过缓存、事件总线和动态注入实现高效联动;​架构演进​:从单体规则中心 → 微服务化 → 事件驱动分层,核心目标是提升扩展性、降低时延;​关键突破​:​实时性​:电信OCS通过规则引擎实现秒级信用控制;​灵活性​:电商将促销规则拆分为独立AO服务,避免单点故障;​精准性​:物流动态权重模型量化距离、燃油等因子,误差率<5%。

weixin_49199313的博客 1226

Python机器学习:从零基础到项目实战

当您翻开此书,您正踏入一场数据与智慧的修行。机器学习,并非冰冷的符码,而是机器模拟人类洞察世界的法门。本书将带您,以Python为舟,泛游于算法之海。我们不只传授“术”,更探求其后的“道”——从数据的生灭流转中观照规律,于模型的迭代演进里体悟得失。愿您合上书卷时,收获的不仅是驾驭数据的技能,更有一双洞悉复杂、化繁为简的“智慧之眼”。现在,让我们一同启程。

YunWisdom 968

时间序列分析——基于R(第2版)案例数据

时间序列分析——基于R(第2版)案例数据

数字滤波器与数据微分

数字滤波器,离散数据的数值微分,如果降低测量噪声在微分时的误差放大效应

modeganqingi的博客 1219

时间序列分析——基于R(第2版)R程序

时间序列分析——基于R(第2版)R程序

时间序列分析-基于R 课后习题数据

时间序列分析——基于R 课后习题数据 编著:王燕 第二版 中国人民大学出版社出版 包含从第二章到第七章的课后习题数据文件

时间序列分析——基于R(第2版)—第7章

7-6 1867-1947年玉米价格、玉米产量、生猪价格、生猪产量以及农场工人平均工资的数据,7-2 在一定浓度溶液中,考察草履虫和某种草履虫掠食动物之间动态数量的变化。7-4我国1979-2014年社会消费品零售总额序列和国内生产总值序列数据。7-1 某地区过去38年的谷物产量(y)和这些年该地区相应的降雨量(x)7-5 英国1969 1月-1984年12月车祸数据。7-3我国1950-2008年进出口总额。

m0_62809014的博客 5906

利用Solidworks2020将挖掘机装配体转换为URDF模型

利用Solidworks2020将挖掘机装配体转换为URDF模型一、下载sw_urdf_exporter插件 URDF(Universal Robot Description Format)——通用机器人描述格式,它是ROS里边使用的一种机器人的描述文件,包含的内容有:连杆、关节,运动学和动力学参数、可视化模型、碰撞检测模型等。 一、下载sw_urdf_exporter插件 ROS提供了SolidWorks转URDF的插件(下载链接)—sw2urdfSetup.exe,下载后点击安装,安装完成后就能在sol

weixin_48192326的博客 6102

X-12-ARIMA:季节性调整(Seasonal Adjustment)的强大工具,介绍数学原理

X-12-ARIMA模型是一种强大的季节性调整工具,通过对时间序列数据进行差分、平滑、ARIMA建模等多步处理,能够有效地去除季节性成分,揭示数据中的长期趋势。

阿正的梦工坊 4208

手机抽奖页面代码html,html5大转盘抽奖支持手机转盘抽奖代码

特效描述:html5 大转盘抽奖 支持手机 转盘抽奖代码。html5转盘,html5抽奖,手机转盘,手机抽奖,手机转盘抽奖,可配置奖品抽奖。代码结构1. 引入CSS2. 引入JS3. HTML代码大转盘活动var turnplate={restaraunts:[],//大转盘奖品名称colors:[],//大转盘奖品区块对应背景颜色outsideRadius:192,//大转盘外圆的半径textR...

weixin_39628551的博客 1867

保姆级避坑指南:用Livox官方工具搞定Mid-360多雷达自动标定(附源码Bug修复)

本文详细解析了使用Livox官方工具进行Mid-360多雷达自动标定的全流程,包括环境搭建、工具链配置、关键Bug修复及数据采集最佳实践。重点解决了PointCloudMapper.cpp边界检查缺失和calibration.cpp点云显示问题,提供了实用的代码修复方案和标定质量评估指标,帮助开发者高效完成激光雷达标定任务。

weixin_29053695的博客 281
上一篇: R-时间序列-分解季节性时间序列
下一篇: 时间序列分解-STL分解法
It_BeeCoder
博客等级 码龄10年 967粉丝 238原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值