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

2023-11-20

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

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.

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

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

1.2 Moving averages 移动平均

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

1.2.1 Moving average smoothing

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

T^t=1mj=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(yt2+yt1+yt+yt+1)+14(yt1+yt+yt+1+yt+2)]=18yt2+14yt1+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^t 如果季节性周期是奇数m,使用m-MA来估计trend-cyclic T^t
2. 计算去趋势序列 yT^t
3. 计算季节趋势中每一个元素的平均值,如以一年中12月为周期,那么计算所有的1月的平均值作为1月的值,计算12个月的作为周期的 S^t
4. 计算 E^t=ytT^tS^t
乘法未解与上面的模式类似
只不过是将减法变为除法,不再赘述

1.3.2 经典分解的缺点

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

1.4 X-12-ARIMA

这是美国人口普查局的发明,克服了1.3.3中的缺点,但是只适用于季度或者月份为季节性周期的时间序列。
以乘法模式为例,分解步骤:
1. 以2*12-MA来计算 T^t
2. 计算集中率(centered rations) yt/T^t
3. 使用3*3-MA对 yt/T^t 的月份进行平滑以估计季节性 S^t
4. 用 yt/T^t 除以 S^t 得到 E^t
5. 去掉不合理的 E^t ,得到修正后 E^t
6. 使用 E^t 乘以 S^t 得到修正后的centered rations
7. 重复步骤3得到修正后的 S^t
8. 用新的seasonal除源数据得到seasonally adjusted序列( yt/S^t
9. 使用Henderson MA对上面的seasonal adjusted 序列平滑得到trend-cyclic T^t ,注意随机性越大使用的平滑次数越大,对于以月份为周期的序列可以使用9-, 13-, or 23-term Henderson
10. 重复步骤二得到新的 yt/T^t centered rations
11. 使用新的数据,重复步骤3-6,其中使用3x5-MA代替3x3-MA
12. 使用3x5-MA重复步骤7
13. 重复步骤8得到seasonally adjusted序列( yt/S^t
14. 上面得到的seasonally adjusted序列( yt/S^t )除以第9步得到的trend-cyclic T^t ,得到remainder component E^t
15. 去除 E^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^t

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

,步骤2 用naive预测seasonal

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

这里写图片描述
这里写图片描述
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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

时间序列 R 07 时间序列分解 Time series decomposition 的相关文章

  • [SDOI2012]拯救小云公主【bfs+二分答案】

    题目链接 正难则反 要直接求从起点到终点的最大距离 不妨反过来求最小的可以阻止骑士从起点到终点的对于全体圆的最小半径 那么 就是阻止从左上角到右下角的所有相交圆 于是 就是要变成没有从左上角到右下角的相交圆才可以 那么不妨跑一个bfs来判断
  • 全面分析冒泡排序过程

    冒泡排序也是一种简单直观的排序算法 其思想是 它重复地走访过要排序的数列 一次比较两个元素 如果他们的顺序错误就把他们交换过来 走访数列的工作是重复地进行直到没有再需要交换 也就是说该数列已经排序完成 这个算法的名字由来是因为越小的元素会经
  • leetcode分类刷题:二分查找(Binary Search)(二、隐藏有序序列的数学类型)

    参加了下2023届秋招 不得不感叹leetcode lintcode的题目实在太多了 也很难 特别对于我这种非科班生而言 感觉有必要分类整理一下 以便以后在工作中更好的应用 花了点时间刷了下二分查找的相关题目 刷的越多 反而越不会了 先把目
  • 还没做完的小程序

    include
  • 基于swiper使用vue-awesome-swiper 实现鼠标移入暂停自动播放、左右按钮控制前进后退、常见避坑、API中文文档地址

    vue 中使用swiper vue awesome swiper 鼠标移入暂停自动播放 左右按钮控制前进后退 常见避坑 swiper对应vue awesome swiper版本会带来很多坑点 推荐下面对照版本 帮大家避坑了 亲测可用 一 n
  • oracle 中的开窗函数over()

    开窗函数与聚合函数一样 都是对行的集合组进行聚合计算 它用于为行定义一个窗口 这里的窗口是指运算将要操作的行的集合 它对一组值进行操作 不需要使用GROUP BY子句对数据进行分组 能够在同一行中同时返回基础行的列和聚合列 反正我理解这个函
  • 原生-秒数转换为小时、分钟

    function formatSeconds value var secondTime parseInt value 秒 var minuteTime 0 分 var hourTime 0 小时 if secondTime gt 60 如果
  • Python实现迷宫游戏

    项目 迷宫游戏 摘要 1 引言 1 1研究的背景及意义 1 2研究的内容 2 系统结构 2 1系统的结构 2 2基本思路 3 实现代码 3 1Maze类 3 2Player类 3 3Controller类 3 4主函数 4 实验 5 总结和
  • JS修改对象属性的值

    当对象以数字为属性名时 其实就是一个数组 用 var foo 1 a 2 b foo 1 c console log foo 1 c 2 b 当对象以字符为属性名时 直接用 获取属性值 var bar a 1 b 2 c 3 bar a h
  • Java反射获取泛型

    反射泛型方法说明 1 isPrimitive 判断指定的Class对象是否表示一个基本类型 2 isAssignableFrom 表示class是否是参数class的父类 3 ParameterizedType 表示参数化类型如List 4
  • Echarts配置系列-图文并茂教你配置渐变色面积图,折柱双图,环形图,仪表盘图等

    文章目录 说明 渐变色面积图 如何修改图标legend样式 如何去掉折线图小圆点 如何设置粗细 折线图线条设置更细或者更粗 如何修改X轴Y轴字体大小 横向渐变色柱状图 自动转动炫酷百分比环形图 渐变色仪表盘 简约风格圆环百分比仪表盘图 双柱
  • 模板类成员函数特化写法

    昨天有对模板类的函数成员特化需求 目的是为了对不同模板参数实现不同的操作 结果在写过程中碰到already defined的问题 貌似是模板新手最容易碰到的问题了 类外的成员函数和同在类外的特化版本成员函数冲突了 因为对模板用法不是很熟悉
  • java poi 将公文套红 并 电子签章

    套红的方法 签章 import com deepoove poi XWPFTemplate import com deepoove poi xwpf NiceXWPFDocument import lombok extern slf4j S
  • RSA公钥每次签名得到的结果都一样?

    这里记录下 RSA对于同一数据块签名一致的原因是使用的填充算法 涉及PKCS 1 5 PSS 为什么RSA公钥每次加密得到的结果都不一样 RSA PSS数字签名算法
  • nginx的sticky模块

    Sticky工作原理 Sticky是nginx的一个模块 它是基于cookie的一种nginx的负载均衡解决方案 通过分发和识别cookie 来使同一个客户端的请求落在同一台服务器上 默认标识名为route 1 客户端首次发起访问请求 ng
  • neo4j windows图像界面 如何查询最短路径

    MATCH p1 concept name factor p2 concept name cf4 p allshortestpaths p1 10 p2 RETURN p 注意上述p1是变量这个是通用的 只需要更改concept这个即可 你
  • 使用Notepad++工具查看文件的十六进制

    最近在用notepad 打开 dat文件 想看看里面的一些数据但是打开之后发现是乱码 下面给出解决方法 1 首先打开 dat文件 发现是一些乱码 2 点击 插件 gt 搜索hex gt 找到HEX Editor勾选 gt 安装 3 重新打开
  • stm32对flash的读写保护与解除

    一 STM32对内部Flash的保护措施 所有STM32的芯片都提供对Flash的保护 防止对Flash的非法访问 写保护和读保护 1 读保护即大家通常说的 加密 是作用于整个Flash存储区域 一旦设置了Flash的读保护 内置的Flas

随机推荐

  • Nginx跨域配置

    一 跨域概述 1 1 同源策略 同源策略是一个安全策略 同源 指的是协议 域名 端口相同 浏览器处于安全方面的考虑 只允许本域名下的接口交互 不同源的客户端脚本 在没有明确授权的情况下 不能读写对方的资源 同源策略主要是基于如下可能的安全隐
  • 解决labelImg闪退问题

    问题 打开labelImg按下键盘任意键闪退 解决办法 降低python版本 博主将python版本从3 10降低至3 8 并且重新安装了pyqt5 sip和lxml两个包即可正常使用labelImg
  • 03LinuxC线程学习之线程共享和非共享

    1 线程共享和非共享 1 1 线程共享资源 1 文件描述符表 由于线程间共享进程间的内容 而文件描述符表在主线程的PCB当中 各个线程可以直接去请求访问 所以线程间通信就不需要像进程那样通过管道这些方式通信 2 每种信号的处理方式 即当某个
  • js解决浏览器,SpeechSynthesis不能正常合成中文语音

    工作中遇到 浏览器不能合成语音 解决思路 合成失败时 循环合成列表 找到能正常合成的为止 对于一直不能合成的浏览器 设置开关 关闭循环功能
  • 服务器系统安装蓝牙驱动,安装蓝牙设备 - Windows drivers

    安装蓝牙设备 05 29 2020 本文内容 重要 本主题面向程序员 如果你是遇到蓝牙设备安装问题的客户 请参阅 在 Windows 中配对蓝牙设备 蓝牙配置文件驱动程序有两种安装类型 远程设备的 客户端安装 远程设备在该远程设备上公布其服
  • vc6.0 c语言加油站,第2章 C语言初探:4、在VC6.0下运行C语言程序

    不管你是否决定使用C Free 都建议阅读 在C Free下运行C语言程序 文中讲到了几个重要概念 对初学者大有裨益 Visual C 6 0简称VC或者 VC6 0 确实有点老了 在XP Win7下都可能会存在兼容性问题 在Win8下根本
  • 图解GitHub和SourceTree入门教程

    http blog csdn net collonn article details 39259227
  • 想去游戏公司做游戏,最重要的是什么素养?

    首先 要学会沟通 话说 动过去游戏公司的念头 做游戏 感觉很酷 但是 想想自己一不会编程 二不会画画 做策划 那好像是两边受气里外不是人出事第一个背锅的角色 想想也就想想 不过正好前些天我们发过一篇讲去日本学游戏的文章 说不定能派上用场 前
  • 华为OD机试真题- 学校的位置【2023Q1】【JAVA、Python、C++】

    题目描述 为了解决新学期学生暴涨的问题 小乐村要建所新学校 考虑到学生上学安全问题 需要所有学生家到学校距离最短 假设学校和所有的学生家 走在一条直线上 请问 学校要建在什么位置 能使得学校到各个学生家的距离之和最短 输入描述 输入的第一行
  • sql语句中的空值(null)

    含null值的表达式都为null null null 在判断某个数是否为null的时候不是用等号来表示 而是用 is null 在过滤的时候 可以使用in null 但是使用not in null的时候会报错 因为in函数 是指满足里面的情
  • java入门的第一个程序代码 hello world

    很多人说 学Java真的很难 其实 这是真的 但是高薪之所以为高薪 就是因为它比普通的活难的多 今天是我第一篇的博客 我还是想鼓励想学java技术的小伙伴一起来学 很多事只有去做了 你才能知道自己能不能成功 好了 接下来看Java入门的第一
  • 网易云音乐财报解读:收入大增亏损收窄,“云村”草长莺飞

    独家版权时代结束后 在线音乐产业进入了新的发展阶段 各家音乐平台经营状况备受关注 2月23日 网易云音乐公布了2022年全年财务业绩 财报显示 网易云音乐2022年全年收入为90亿元 较2021年同比增长28 5 值得一提的是 得益于盈利能
  • 数组的一些简单操作,列表改数组,数组合并,数组存取

    数组的简单操作 总用的一些操作 记录一下 要不总忘 1列表改数组 import numpy as np a 1 2 3 4 a np array a 输出a array 1 2 3 4 2数组合并 延竖轴拼接数组 aa np vstack
  • hive中取最大值最小值的函数

    max 和min 函数 select a max b from t group by a select a min b from t group by a max和min函数是取某一列中的最大或者最小值 greatest 和least 函数
  • R数据科学-第九章使用lubridate处理日期和时间

    本章将会使用以下三个包 gt library tidyverse gt library lubridate gt library nycflights13 一 创建日期或时间 表示日期或时间的数据有三种 日期 在tibble中显示为date
  • C#学习笔记 事件

    事件为委托提供了一种发布 订阅机制 声明事件的类被称为发行者类 其他类可以订阅发行者类中的事件 当发行者类触发其中的事件时 所有订阅该事件的类都会收到这个变化 在图形界面框架中 这种情况非常常见 事件发布者 首先需要创建一个事件发布者类 该
  • python自动化笔记(十一)——openpyxl之封装

    封装一个可以读取任意excel文件的方法 可以指定读取的表单 当我们多次从excel中读取数据时 就不用重复地写代码 只需调用封装的类即可 一 封装的excel类实现的需求是什么 1 读取表头数据 2 读取表头以外的所有数据 返回值 列表
  • DHCP的配置(以华为eNSP为例)

    如有错误 敬请谅解 此文章仅为本人学习笔记 仅供参考 如有冒犯 请联系作者删除 基础知识介绍 络组建步骤 1 拓扑设计 2 IP地址规划 按照拓扑中划分的 络范围 规划 络位不同的IP地址 3 配置 1 配置各个节点的IP地址 2 路由 全
  • qbytearray的append是浅拷贝还是深拷贝_前端深拷贝和浅拷贝

    在前端攻城狮的工作实际应用中 有很多情况下在处理数据的时候 会用到数据的深拷贝和浅拷贝 例如 vue中数据是双向绑定的 页面显示依赖于从后台获取到的数据 但要将这个数据当做参数发送给另外一个接口的时候 其中有几个字段是多余的 此时 如果将原
  • 时间序列 R 07 时间序列分解 Time series decomposition

    一个时间序列可以分解为多个模型的组合 1 1 时间序列的组成 1 1 1 时间序列组成模式 三种时间序列模式 不计剩余残差部分 1 趋势Tend 比如线性趋势 先增加后降低的整体趋势 2 季节性Seasonal 以时间为固定周期 呈现循环的