时间序列分析 - ARMA, ARIMA, SARIMA

2024-02-16 01:38

本文主要是介绍时间序列分析 - ARMA, ARIMA, SARIMA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【目标数据】

ARMA: 针对弱平稳/宽平稳时间序列分析

ARIMA: 针对非平稳非周期性时间序列分析

SARIMA: 针对非平稳周期性时间序列分析。

 

自协方差与自相关系数

时间序列在t时刻记作Xt,在s时刻记作Xs,那么这两个时刻对应的时间序列的自协方差的计算公式为:

\gamma(t,s)=E[(Xt-\bar{Xt})(Xs-\bar{Xs})]

假设时间间隔t-s=k, 并且假设时间序列的均值为常数u, 那么上述公式可以写成

\gamma(k)=\gamma(t,s)=E[(Xt-\mu )(Xs-\mu)]

自相关系数的表达式为:

\rho (k)=\rho (t,s)=\frac{\gamma (t,s)}{\sqrt{​{\sigma_{t}^{2} }}\sqrt{​{\sigma_{s}^{2} }}}

如果方差恒定,上述公式可以写成:

\rho (k)=\frac{\gamma (k)}{\sigma ^{2}}

 

【平稳性】

满足以下三个条件即为宽平稳:

1)均值为常数

2)自协方差仅与时间差相关,与具体时刻无关

3)自相关系数仅与时间差相关,与具体时刻无关。或者说方差为常数。

非平稳的时间序列可以通过差分使其变为平稳的时间序列。

 

【平稳性检验】

ADF检验(单位根检验):

单位根检验是指检验序列中是否存在单位根,如果存在单位根就说明是非平稳时间序列。

python的statsmodels.tsa.stattools.adfuller提供了单位根检验方法。

 

【滞后算子表示法】

时间序列中,通常用L或者B表示之前的若干值,假设时间序列为:

X=\{X_{1},X_{2},\dots \}\,

那么对于t>1:

\,LX_{t}=X_{​{t-1}} 或者

{\displaystyle \,BX_{t}=X_{t-1}}  或者

\,X_{t}=LX_{​{t+1}}\;t\geq 1\, 或者

\,L^{​{-1}}X_{​{t}}=X_{​{t+1}}\, 以及

\,L^{k}X_{​{t}}=X_{​{t-k}}.\,

 

【ARMA】

Autoregressive–moving-average model 自回归移动平均

包含对过去值的p阶回归以及过去error误差的q阶移动平均。

如果用AR(p)来描述,公式可以写成:

X_{t}=c+\sum _{i=1}^{p}\varphi _{i}X_{t-i}+\varepsilon _{t}.\,


其中\varepsilon _{t}是高斯白噪声。

用MA(q)来描述,公式为:

X_{t}=\mu +\varepsilon _{t}+\sum _{i=1}^{q}\theta _{i}\varepsilon _{t-i}\,

μ 是 X_{t}的均值 (often assumed to equal 0),  \varepsilon _{t}, \varepsilon _{t-1},... 是白噪声.

将AR与MA综合起来,可以表示为:

X_{t}=c+\varepsilon _{t}+\sum _{i=1}^{p}\varphi _{i}X_{t-i}+\sum _{i=1}^{q}\theta _{i}\varepsilon _{t-i}.\,

忽略常数项c,将X移至等号左侧,用滞后算子表示法:

\left(1-\sum _{i=1}^{p}\varphi _{i}L^{i}\right)X_{t}=\left(1+\sum _{i=1}^{q}\theta _{i}L^{i}\right)\varepsilon _{t}\,,

简化表示:

\varphi (L)X_{t}=\theta (L)\varepsilon _{t}\,或者 {\frac {\varphi (L)}{\theta (L)}}X_{t}=\varepsilon _{t}\,.

其中:

\varphi (L)=1-\sum _{i=1}^{p}\varphi _{i}L^{i}.\,     \theta (L)=1+\sum _{i=1}^{q}\theta _{i}L^{i}.\,

 

【ARIMA】

Autoregressive integrated moving average

对于非平稳并且非周期的时间序列,可以通过差分操作使之变为平稳时间序列,差分是指将当前时刻的值减去前一时刻的值,得到的时间序列还可以继续差分下去,比如总共进行了d次差分操作,那么叫做d阶差分,因此ARIMA在ARMA的基础上进行了d阶差分操作以后的公式为:

{\displaystyle \left(1-\sum _{i=1}^{p}\phi _{i}L^{i}\right)(1-L)^{d}X_{t}=\left(1+\sum _{i=1}^{q}\theta _{i}L^{i}\right)\varepsilon _{t}\,}

 

【SARIMA】

周期性时间序列,可以作为ARIMA的扩展,因此,首先需要去除周期性,去除的方式是在周期间隔上做一次ARIMA,此时可以得到一个非平稳非周期性的时间序列,然后在此基础之上再一次使用ARIMA进行分析。可以表示为:

ARIMA(p, d, q) × (P, D, Q)S ,其中各参数含义为:

  • P: 周期性自回归阶数.
  • D: 周期性差分阶数.
  • Q: 周期性移动平均阶数.
  • S: 周期时间间隔.

p,d,q的含义与上面的ARIMA里面含义相同。

举个例子:对于周期为12的非平稳时间序列,那么ARIMA(3,1,0) x (2,1,0)12的含义为:

D=1意味着当前时刻t的值与过去一个周期时间点t-12的1阶差分,

P=2意味着当前时刻t的值是过去两个周期时间点t-12以及t-24的回归。

处理以后得到的时间序列再通过ARIMA(3,1,0)进行分析。

 

参考:

https://en.wikipedia.org/wiki/Autoregressive%E2%80%93moving-average_model

https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average

https://en.wikipedia.org/wiki/Lag_operator

https://machinelearningmastery.com/sarima-for-time-series-forecasting-in-python/

 

这篇关于时间序列分析 - ARMA, ARIMA, SARIMA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713135

相关文章

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

Spring、Spring Boot、Spring Cloud 的区别与联系分析

《Spring、SpringBoot、SpringCloud的区别与联系分析》Spring、SpringBoot和SpringCloud是Java开发中常用的框架,分别针对企业级应用开发、快速开... 目录1. Spring 框架2. Spring Boot3. Spring Cloud总结1. Sprin

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory