先看下图:

这是1986年到2006年的原油月度价格。可见在2001年之后,原油价格有一个显著的攀爬,这时再去假定均值是一个定值(常数)就不太合理了,也就是说,第二讲的平稳模型在这种情况下就太适用了。也因此有了今天这一讲。

要处理这种非平稳的数据(比如上图中的均值不是一个常数),需要用非平稳模型:求和自回归滑动平均(Autoregressive integrated moving average, ARIMA)。接下来,咱先看一个处理过的石油价格:

是不是似曾相识?! 对的,经过简单的处理,本来不平稳的数据,立即变成了平稳数据了。这样再用上一章的模型就可简单处理了。这种处理方式就叫做差分(马上会讲,别急)。 而ARIMA 模型可以简单的理解为:差分+平稳模型。你看,这下,这章的内容是不是简单多了,所谓非平稳模型不就是差分处理下数据,再变有平稳数据,然后再用平稳模型处理嘛~ 确实酱紫~。

那马上就产生一个问题(或者你早就有疑问了):什么叫做差分?差分是处理时间序列非常重要的工具,在计量经济学及金融数学中广泛应用。

3.1 差分运算

3.1.1 差分运算

还是用原油价格(月度数据)作为例子,所谓一阶差分就是两个相邻月度之间做差。(这么简单?!对,就是这样~)。

规范化些:设\(\{X_t,\ t= \pm1,\pm2,\dots\}\) 为一时间序列,则:
\[
\Delta x_t = x_t - x_{t-1} \ t=\pm1,\pm2,\dots
\]
称为时间序\(\{X_t,\ t= \pm1,\pm2,\dots\}\) 的一阶差分运算。

比如 2005年原油价格为:46.84 ,48.15, 54.19, 52.98, 49.83, 56.35, 58.99, 64.98 ,65.59, 62.26, 58.32 ,59.41。那这组数据的一阶差分即为 1.31, 6.04, -1.21, -3.15, 6.52 , 2.64 , 5.99 , 0.61,-3.33, -3.94,也就是前一个数减去后一个数而已。

那如果我想去差分后的数据再做一次差分呢? 那就是二阶差分(就是这么easy~):上面的一阶差分数据为1.31, 6.04, -1.21, -3.15, 6.52 , 2.64 , 5.99 , 0.61,-3.33, -3.94,再经一次差分: 4.73 , -7.25, -1.94, 9.67, -3.88, 3.35 , -5.38 , -3.94, -0.61.

那如果想做p次呢(你够了~),那就叫做p阶差分了,定义为:
\[
\Delta^p x_t = \Delta^{p-1}x_t - \Delta^{p-1} x_{t-1}
\]
是不是很简单?!

3.1.2 k步差分

如果不是相邻数据间做差呢,比如我想隔几个数据叫,比如我想用原油数据7月份数据与1月份做差呢? 没问题,你的需求我一定满足,这个就叫做k步差分了:
\[
\Delta_k x_t = x_t - x_{t - k}
\]
比如2005年7月与1月的价格差值即为: 58.99 - 46.84 = 12.15.也即称为六步差分了。

3.1.3 差分的选择

划重点,划重点!!!

  1. 序列蕴含着显著的线性趋势,1 阶差分可以实现趋势平稳,比如上面的原油价格(不过,里面其实做了一个预处理,一会说~).
  2. 序列蕴含着曲线趋势的,通常低阶(2阶或3阶)差分就可以取提出曲线趋势的影响.
  3. 对于固定周期的序列,通常进行步长为周期长度的差分就可以较好的提取周期信息.

PS: 差分虽好,但也不要贪杯哦, 记住对信息的任何的加工都只会造成信息的损失.

3.1.3* 延迟算子

这一小节作为了解,不喜欢可以_跳过_,不影响理解滴~。

延迟算子,类似一个时间指针,当前序列值乘以一个延迟算子,就相当于把当前序列值的时间向过去拔了一个时刻。(ps: 算子就是映射,就是关系,就是变换[3])

3.1.3.1定义与性质

记 B 为延迟算子,有:\(x_{t-1} = Bx_t, x_{t-2} = B^2x_t,\dots, x_{t-p} = B^p x_{t-p}\)

延迟算子具有如下性质:

  • \(B^0\) = 1
  • 若 c 为常数, 则有 \(B(c\bullet x_t) = c B(x_t) = c\bullet x_{t-1}\)
  • 对任意两个序列\(有\{x_t\},\{y_t\},有 B(x_t\pm y_t) = x_{t-1}\pm y_{t-1}\)
  • \(B^n x_t = x_{t-n}\)
  • \(其中(1-B)^n = \sum_{i = 0}^n(-1)^p C_{n}^i B^i,其中 C_n^i = \frac{n!}{i! (n-i)!}\)

3.1.3.2 差分的延迟算子表示

  • p阶差分
    \[
    \Delta^p x_t = (1 - B)^p x_t = \sum_{i = 0}^p(-1)^p C_p^i x_{t-i} \quad t = \pm1,\pm2,\dots
    \]

  • k步差分
    \[
    \Delta_k x_t = x_t - x_{t-k} = (1-B^k)x_t \quad t = \pm1,\pm2,\dots
    \]

3.2* 时间序列分解

这一小节作为了解,不喜欢可以_跳过_,不影响理解滴~

在第一节(时间序列介绍) 中,曾提到过时间序列分解,其实时间序列分解不是靠感觉给出的,它也是有强大理论依据的,这里就支持时间序列分解的两大定理作简单的介绍:

3.2.1 Wold 分解

Wold 分解: 对于任何一个离散平稳过程\(\{X_t,\ t= \pm1,\pm2,\dots\}\), 它都可以分解为两个不相关的平稳序列之和,其中一个分确定性的,另一个为随机性的 不妨记作:
\[
X_t= V_t+ \xi_t \quad t = \pm1,\pm2,\dots
\]
其中 \(\{V_t\}\) 为确定性序列,而\(\{\xi_t\}\)为随机序列,且\(\xi_t = \sum_{j = 0}^\infty \phi_j\epsilon_{t -j}\). 满足:
\[
\begin{array}
\\
\phi_0 = 1,\sum_{j = 0}^\infty \phi_j^2 < \infty\\
\\
\{\epsilon_t\} \sim WN(0,\sigma_t^2)\\
\\
E(V_t,\epsilon_s) = 0, \forall t \ne s\\
\end{array}
\]
其中的所谓的'确定性':

对任意的序列\(\{V_t\quad t = \pm1,\pm2,\dots\}\) 对\(V_t\)作 q 期之前的序列值\(\{V_{t-q},V_{t-q-1},\dots,V_{t-1}\}\) 作线性回归:
\[
v_t = a_0 + a_1v_{t-q } + a_2 v_{t-q-1} + \dots+ a_q v_{t-1} + \eta_t
\]
其中\(\eta_t\) 为回归残差序列: \(Var(v_t) = \tau_q^2\). 如果:

  • $\lim_{ q \rightarrow\infty} \tau_q^2 = 0 $ ,则称 \(\{V_t\}\)为确定性序列;
  • \(\lim_{ q \rightarrow\infty} \tau_q^2 = Var(v_t)\), 则称\(\{V_t\}\) 为随机序列.

3.2.2 Cramer 分解

Wold分解是现代时间序列分析理论的灵魂. 1938 年 H. Wold 提出此理论时,只是为了分析平稳序列的构成, 不过另一位大牛Cramer于1961年证明此种分析思路同样适用于非平稳序列.

Crammer 分解: 任意时间序列\(\{X_t\}\) 都可分解成两部分的叠加:其中一部分是由多项式的确定性分析趋势成分,另一部分是平稳的零均值误差成分:
\[
x_t = \mu_t + \epsilon_t = \sum_{j = 0}^d \beta_jt^j+ \Psi(B)a_t \quad t = \pm1,\pm2,\dots
\]
其中\(d < \infty,\beta_1,\beta_2,\dots,\beta_d\)为常数系数,\({a_t}\)为一个零均值白噪声序列; B 为延迟算子.

Cramer分解说明任何一具序列的波动都可以视为受到了确定性影响和随机性影响的综合作用.

3.3 ARIMA 模型

千呼万唤终于到了ARIMA.

有了上面的知识,就可以很容易推出自回归滑动平均求和(ARIMA)模型。

如果有一个时间序列\(\{X_t,\ t=\pm1,\pm2,\dots\}\) 的 d 次差分 \(W_t = \Delta X_t\) 是一个平稳的ARMA过程,则称时间序列\(\{X_t,\ t=\pm1,\pm2,\dots\}\) 为 ARIMA模型。如果\(W_t\)服从 ARMA(p,q) 模型,则称\(\{Y_t\}\) 是 ARIMA(p,d,q) 过程.

其中 d 通常为1,最多也不过2,3, 所以,不用太担心模型过于复杂.另外,如果 p = 0, 即不包含自回归项,称为IMA(d,q), 如果没有滑动平均项, 则称为ARI(p,d).

来来,给个'粟子',先看个简单的,下图(上)是某个商店某产品的两个月销量的时间序列图:

(上)图中 数据显然是不平稳的; (中)图是作了一步差分的结果,是不是平稳多了(什么?图怎么更难看了? 是的, 因为我这个过程是在剔除确定性信息啊~); (下)图是再一次作一步差分的(也即二阶差分), 你会发现这会是真的像白噪声了.

下面考虑ARIMA(p,1,d), 令\(W_t = Y_t - Y_{t-1}\):
\[
W_t = \phi_1 W_{t-1}+\phi_2W_{t-2}+\dots +\phi_{t-p}W_{t-p} \\
\qquad + e_t + \theta_1e_{t-1} + \theta_2e_{t-2}+\dots+\theta_{t-q}e_{t-q}\qquad t= \pm1,\pm2,\dots
\]
即:
\[
Y_t - Y_{t-1} = \phi_1 (Y_{t-1} - Y_{t-2})+\phi_2(Y_{t-2} - Y_{t-3})+\dots +\phi_{t-p}(Y_{t-p} - Y_{t-p-1}) \\
\qquad+ e_t + \theta_1e_{t-1} + \theta_2e_{t-2}+\dots+\theta_{t-q}e_{t-q}\qquad t= \pm1,\pm2,\dots
\]
整理:
\[
Y_t = (1 + \phi_1)Y_{t-1}+(\phi_2 - \phi_1)Y_{t-2}+(\phi_2 - \phi_3)Y_{t-3}+\dots+(\phi_p - \phi_{p-1})Y_{t-p} - \phi_{p}Y_{t-p-1} \\
\qquad+ e_t + \theta_1e_{t-1} + \theta_2e_{t-2}+\dots+\theta_{t-q}e_{t-q}\qquad t= \pm1,\pm2,\dots
\]
上式即称为模型的差分方程形式, 看起来是不是像ARMA(p+1,q)过程? 不过, 其特征多项式(涉及延迟算子,不过只需要知道下面的公式是由上面推出即可,至于怎么推出,需了解上面的星号章节~[^4])满足:
\[
1 - (1+\phi_1)x - (\phi_2 - \phi_1)x^2 -(\phi_2-\phi_3)x^3 -\dots - (\phi_p - \phi_{p-1})x^p + \phi_p x^{p+1} \\
= (1 -\phi_1x-\phi_2x^2-\dots- \phi_px^p)(1-x) \qquad t = \pm1,\pm2,\dots
\]
显然,x = 1 是 一个根, 意味着这个过程非平稳,而其余的根是平稳过程的\(W_t\)的根.

参考文献

如第一节参考文献中所述, 主要的参考文献都在第一节中列出来了, 下面所列为新加入或当节的参考文献,请知悉.

1: 王燕 编著, 应用时间序列分析 北京: 中国人民大学出版社,2005
2: http://blog.sina.com.cn/s/blog_a1a5c41501012w3b.html
3: https://wenku.baidu.com/view/aab18a65cfc789eb162dc805.html

时间序列 ARIMA 模型 (三)的更多相关文章

  1. 时间序列ARIMA模型

    时间序列ARIMA模型 1.数据的平稳性与差分法 让均值和方差不发生明显的变化(让数据变平稳),用差分法 2.ARIMA模型-----差分自回归平均移动模型 求解回归的经典算法:最大似然估计.最小二乘 ...

  2. 时间序列预测之--ARIMA模型

    什么是 ARIMA模型 ARIMA模型的全称叫做自回归移动平均模型,全称是(ARIMA, Autoregressive Integrated Moving Average Model).也记作ARIM ...

  3. 时间序列分析模型——ARIMA模型

    时间序列分析模型——ARIMA模型 一.研究目的 传统的经济计量方法是以经济理论为基础来描述变量关系的模型.但经济理论通常不足以对变量之间的动态联系提供一个严密的说明,而且内生变量既可以出现在方程的左 ...

  4. ARIMA模型——本质上是error和t-?时刻数据差分的线性模型!!!如果数据序列是非平稳的,并存在一定的增长或下降趋势,则需要对数据进行差分处理!ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数

    https://www.cnblogs.com/bradleon/p/6827109.html 文章里写得非常好,需详细看.尤其是arima的举例! 可以看到:ARIMA本质上是error和t-?时刻 ...

  5. 用python做时间序列预测九:ARIMA模型简介

    本篇介绍时间序列预测常用的ARIMA模型,通过了解本篇内容,将可以使用ARIMA预测一个时间序列. 什么是ARIMA? ARIMA是'Auto Regressive Integrated Moving ...

  6. 时序分析:ARIMA模型(非平稳时间序列)

    转载于一篇硕士论文.... ARIMA模型意为求和自回归滑动平均模型(IntergratedAut少regressive MovingAverageModel),简记为ARIMA(p,d,q),p,q ...

  7. 【机器学习笔记之五】用ARIMA模型做需求预测用ARIMA模型做需求预测

    本文结构: 时间序列分析? 什么是ARIMA? ARIMA数学模型? input,output 是什么? 怎么用?-代码实例 常见问题? 时间序列分析? 时间序列,就是按时间顺序排列的,随时间变化的数 ...

  8. 基于R语言的时间序列指数模型

    时间序列: (或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列.时间序列分析的主要目的是根据已有的历史数据对未来进行预测.(百度百科) 主要考虑的因素: 1.长期趋势(Lon ...

  9. ARIMA模型总结

    时间序列建模基本步骤 获取被观测系统时间序列数据: 对数据绘图,观测是否为平稳时间序列:对于非平稳时间序列要先进行d阶差分运算,化为平稳时间序列: 经过第二步处理,已经得到平稳时间序列.要对平稳时间序 ...

随机推荐

  1. Python打印矩形、直角三角形、等腰三角形、菱形

    思路如下: (1)先打印一个星号并换行 print("*") (2)打印一行6个星号 for i in range(6): print("*", end=&qu ...

  2. 【NOIP 2017】Day2 T3 列队

    Problem Description \(Sylvia\) 是一个热爱学习的女孩子. 前段时间,\(Sylvia\) 参加了学校的军训.众所周知,军训的时候需要站方阵. \(Sylvia\) 所在的 ...

  3. 2. mysql 语句

    基础语句 创建表 DROP TABLE IF EXISTS student;CREATE TABLE student ( id ) NOT NULL AUTO_INCREMENT, sname ) N ...

  4. unity 截图 压缩 处理

    /****************************************************** unity屏幕截图,并转换成Base64码* 作者: lyb* 日期:2017年7月25 ...

  5. springboot学习之授权Spring Security

    SpringSecurity核心功能:认证.授权.攻击防护(防止伪造身份) 涉及的依赖如下: <dependency> <groupId>org.springframework ...

  6. linq to sql and linq to object 总结

    Enumable类型是linq to object   是一个很特殊的类型   这个类型的数据源都是在程序的内存中 Queryable类型是 Linq to sql   对数据库进行操作都是这个类型  ...

  7. java 常用异常及作用

    先看看图, Exception就明白了 关于异常 大体分为 不可查异常 可查异常 runtimeException三类~异常都继承throwable这个类~ 下面有error和Exception两大类 ...

  8. The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

    关于出现这个·问题的原因貌似也是多种多样的? 在stack overflow上的帖子如下:https://stackoverflow.com/questions/43186315/tomcat-404 ...

  9. 利用vue-cli3快速搭建vue项目详细过程

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  10. python的try finally (还真不简单)

    https://www.cnblogs.com/cotton/p/3785999.html def f(): try: print 1 return 1 finally: print 0 return ...