时间序列学习(4):平稳性检验(单位根检验、ADF检验)

  • 1、单位根检验
  • 2、ADF检验
  • 3、指数走势的检验
  • 4、对数收益率序列检验

相关图可以大致判断序列是否平稳。但是,这毕竟不是严格的。

这篇笔记来就谈一谈平稳性的检验。

到目前为止,我们有了以下的时间序列模型:

  • 白噪声;
  • 随机游走;
  • AR模型;
  • MA模型;
  • ARMA模型。

我们知道白噪声、MA模型一定是平稳的(这里的平稳都是弱平稳);随机游走一定是不平稳的;ARMA模型取决于其AR部分。

所以唯一需要做平稳性检验的就是AR模型。

1、单位根检验

先来看一阶AR模型,即AR(1)的情况,其模型如下:

rt=α1rt−1+wtr_t=\alpha_1r_{t-1}+w_trt​=α1​rt−1​+wt​

如果α1=1\alpha_1=1α1​=1,该模型就是随机游走,我们知道它是不平稳的。换个思路想象一下,当α1=1\alpha_1=1α1​=1,那么前一时刻的收益率对当下时刻的影响是100%的,不会减弱;那么就算是很远的某个时刻,当下对它的影响还是不会消除,所以方差(表现在波动)是受前面所有时刻的影响,是和ttt相关的,因此不平稳;

如果α1>1\alpha_1\gt1α1​>1,那么当前时刻的波动不仅受前面时刻的影响,还被放大了,所以肯定不平稳;

只有当α1<1\alpha_1\lt1α1​<1的时候,前面时刻的波动对当前时刻的影响会逐渐减小。可以计算此时的自协方差以及自相关系数是一个固定值。所以这种情况下,序列是平稳的。

对于高阶的AR模型也是一样的,一个AR (P)阶 模型如下:

rt=∑i=1Pαirt−i+wtr_t=\sum^P_{i=1}\alpha_ir_{t-i}+w_trt​=i=1∑P​αi​rt−i​+wt​

如果α1,...,α2\alpha_1,...,\alpha_2α1​,...,α2​都小于1,那么这个序列是平稳的;存在某一个αi≥1\alpha_i\ge1αi​≥1,这个序列就不是平稳的。

要判断α1,...,α2\alpha_1,...,\alpha_2α1​,...,α2​是否都小于1,一般利用AR模型的特征方程,如下:

1−α1x−α2x2−...−αpxp=01-\alpha_1x-\alpha_2x^2-...-\alpha_px^p=01−α1​x−α2​x2−...−αp​xp=0

这个方程有p个根。

检验AR序列是否平稳,就是检验是否存在某个根大于等于1。这个过程叫单位根检验

2、ADF检验

单位根检验有诸多方法,其中较为经典是ADF检验

ADF检验的全称是Augmented Dickey-Fuller test,它是Dickey-Fuller(DF)检验的扩展。DF检验只能应用于一阶AR模型的情况。当序列为高阶时,存在滞后相关性,于是可以使用更适用的ADF检验。

整个检验过程涉及到很多数学和统计学处理,在此不详述,下面直接看在Python中如何使用吧。

3、指数走势的检验

我们还是采用从第1篇笔记就采用的数据,即沪深300于2018年1月1日至2019年12月13日的走势。

其走势如下:

prices = get_price('000300.XSHG', start_date='2018-01-01', end_date='2019-12-13', frequency='daily', fields='close')
fig = plt.figure(figsize=(10, 6))
ax = fig.add_axes([0.2, 0.2, 1.2, 1.2])ax.plot(prices, color="blue", linewidth=1.5, linestyle="-", label=r'hs300')
plt.legend(loc='upper right', frameon=False)

采用statsmodels中的相关包对序列prices进行检验:

from statsmodels.stats.diagnostic import unitroot_adfunitroot_adf(prices.close)

或者采用下面的函数,一样的:

from statsmodels.tsa.stattools import adfulleradfuller(prices.close)

结果如下:

(-1.932446672214747,0.3169544458085871,9,465,{'1%': -3.4444914328761977,'5%': -2.8677756786103683,'10%': -2.570091378194011},4819.095453869604)

上述取值分别为:

  • t-检验值;
  • P-Value
  • 滞后阶数(lags)
  • 样本数
  • 1%,5%,10%的边界值
  • 最大信息准则(参数中autolag需不为None)

ADF检验基于统计中的假设检验方式,利用t-检验来观测显著性。这些细节不介绍了。

上述结果可以这样来看,如果

  • t-检验值大于某个临界值,那么在这个临界值以内序列的不平稳性比较显著;
  • 或者,p-Value大于某个临界值的百分位(即,1%,5%,10%),那么序列的不平稳性比较显著。

我们看到上面的结果,t-检验值明显大于10%的临界值,p-Value明显大于10%。

所以上面的指数走势序列是显著的不平稳的。我们在第2篇笔记说走势序列近似于随机游走,所以这个检验结果符合预期。

4、对数收益率序列检验

我们同样针对沪深300于2018年1月1日至2019年12月13日的日对数收益率序列进行检验。

import pandas as pd
import mathprices = get_price('000300.XSHG', start_date='2018-01-01', end_date='2019-12-13', frequency='daily', fields='close')returns = {'return':{}}
for i in range(len(prices)):current_price = prices.iloc[i,0]if i == 0:current_return = 0else:last_price = prices.iloc[i-1,0]current_return = math.log(current_price)-math.log(last_price)date = list(prices.index)[i]returns['return'][date] = current_return
return_df = pd.DataFrame(returns, columns=['return'], index=list(prices.index))fig = plt.figure(figsize=(10, 6))
ax = fig.add_axes([0.2, 0.2, 1.2, 1.2])
ax.plot(return_df, color="blue", linewidth=1.5, linestyle="-", label=r'hs300-daily-log-returns')
plt.legend(loc='upper right', frameon=False)

检验结果如下:

unitroot_adf(return_df.loc[:,'return'])
(-6.9332827227876,1.070439257686785e-09,8,466,{'1%': -3.4444609168389615,'5%': -2.8677622536920317,'10%': -2.5700842229549266},-2646.8267439593874)

这个结果里,t-检验值远小于1%的临界值,P-Value也远小于1%。所以,序列没有显著的不平稳性。因而我们可以认为该序列是平稳的。

这里要注意的一点是:当我们采用ADF进行检验的时候,我们实际上已经假设用AR模型对序列进行建模了。

时间序列学习(4):平稳性检验(单位根检验、ADF检验)相关推荐

  1. 计量经济学之时间序列的平稳性、单位根检验、协整检验、时间序列数据的一般处理流程

    时间序列的平稳性 为什么要把时间序列变成平稳的?--平稳性的意义 如何检验时间序列数据的平稳性?--单位根检验 数据不平稳怎么办?--协整检验 单整.协整(cointegration) 协整检验 总结 ...

  2. R语言检验时间序列的平稳性(tseries包adf.test):时间序列数据是zoo或xts对象,使用coredata函数提取原始数据,再将其传递给adf.test函数

    R语言检验时间序列的平稳性(tseries包adf.test):时间序列数据是zoo或xts对象,使用coredata函数提取原始数据,再将其传递给adf.test函数 目录

  3. 时间序列中的平稳性检验之单位根检验

    对序列的平稳性的检验中最常用的方法是单位根的检验.单位根检验是指检查序列中是否存在单位根,如果存在单位根就是非平稳时间序列了.下面是找的解释为什么单位根存在就是非平稳时间序列的原因. 作者:五雷 链接 ...

  4. 金融时间序列Note 1 —— 平稳性,相关系数,自相关函数(ACF)及其平稳性检验

    本文用于<金融时间序列>的相关介绍,适合快速入门和期末复习.(才怪我感觉自己考的超烂) OK,首先用自己的话讲一下什么是时间序列,首先我们会考得最多得时间序列肯定是线性的,既然说了有线性的 ...

  5. 如果常数项没有经过显著性检验_时间序列(一):平稳性、自相关函数与LB检验...

    前言 略过介绍性的知识,直接怼重难点. 1. 平稳性 Stationarity 直观上看当数据没有明显的模式特征的话(趋势性.季节性),我们认为它是平稳的.定义上"平稳"指固定时间 ...

  6. 时间序列的预处理——平稳性检验的R语言实现(二)

    这一部分是时间序列预处理R语言的实现. 目标是将课本和上课知识点整合. 老师是用一节课讲完的,本篇文章只做了平稳性检验~~~ 下一篇再写纯随机性检验 全部代码 #input data yield &l ...

  7. 关于R语言计量检验之三平稳性(单位根)

    单位根检验是指检验序列中是否存在单位根,因为存在单位根就是非平稳时间序列了.单位根就是指单位根过程,可以证明,序列中存在单位根过程就不平稳,会使回归分析中存在伪回归. ----- 2 单位根检验方法- ...

  8. python adf检验_python做adf检验

    adf检验是用来检验序列是否平稳的方式 一般来说是时间序列中的一种检验方法 python中可使用现成的工具statsmodels来实现adf检验 import numpy as np import s ...

  9. python平稳性检验_Python中非平稳时间序列的处理

    以下应用有什么共同点:预测未来三个月的一个家庭的电力消耗:估计在一定时期内道路的交通量:以及预测一个股票在纽约证券交易所上交易的价格. 以上都涉及时间序列数据的概念!如果没有"时间" ...

  10. 时间序列平稳性分析和白噪声检验

    文章目录 一.时间序列平稳性 1.ADF检验 1.1.ADF检验原理 1.2.ADF的python实现 2.ACF和PACF 二.白噪声检验 原始的负荷时间序列曲线 一.时间序列平稳性 时间序列分析之 ...

最新文章

  1. git提交过程中遇到的 index.lock 问题导致无法提交的解决方法
  2. python详细安装教程linux-Linux系统如何安装Python?新手教程
  3. 阳泉师范高等专科学校计算机系,阳泉师范高等专科学校
  4. 中小企业CRM评测-八百客
  5. 前端学习(2674):vue3修改
  6. 做数据产品经理要学习那些东西?
  7. 每天看到那么徒步直播的朋友,他们靠什么生活呢?
  8. 幼儿园的孩子怎么才可以锻炼其自理能力呢?
  9. stringByReplacingCharactersInRange: withString: 实现字符串删除,替换
  10. Bailian3754 字符环【字符串】
  11. h5(html5)+css3+移动端前端
  12. 2019年下半年程序员考试上午真题自我汇总
  13. Windows API GetLastError()函数返回值含义解释
  14. MacBook环境下python连接oracle数据库
  15. 员工提出辞职后又不想走了,是否可以反悔
  16. Holt Winter时间序列模型
  17. ISP算法:gamma矫正
  18. 可以真正实现免驱的WinUSB设备
  19. LeetCode 881 救生艇
  20. MySQL --alter table的使用

热门文章

  1. Android调试ABD命令
  2. 印象笔记支持Markdown语法
  3. MySQL按照拼音排序
  4. x86架构PC机系统总线概述
  5. 什么是网络处理器?网络处理器有哪些应用场景?
  6. 大数运算(加减乘除,阶乘,取余)
  7. DSP2812调试:全局变量初始化不是指定的赋值结果
  8. SUSE Linux Enterprise Server 12 SP5 Install
  9. 【计算机软件基础】如何理解鲁棒性Robust?
  10. 软件体系结构测试定义,软件体系结构-中国大学mooc-题库零氪