时间序列学习(4):平稳性检验(单位根检验、ADF检验)
时间序列学习(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=α1rt−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αirt−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−α1x−α2x2−...−αpxp=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检验)相关推荐
- 计量经济学之时间序列的平稳性、单位根检验、协整检验、时间序列数据的一般处理流程
时间序列的平稳性 为什么要把时间序列变成平稳的?--平稳性的意义 如何检验时间序列数据的平稳性?--单位根检验 数据不平稳怎么办?--协整检验 单整.协整(cointegration) 协整检验 总结 ...
- R语言检验时间序列的平稳性(tseries包adf.test):时间序列数据是zoo或xts对象,使用coredata函数提取原始数据,再将其传递给adf.test函数
R语言检验时间序列的平稳性(tseries包adf.test):时间序列数据是zoo或xts对象,使用coredata函数提取原始数据,再将其传递给adf.test函数 目录
- 时间序列中的平稳性检验之单位根检验
对序列的平稳性的检验中最常用的方法是单位根的检验.单位根检验是指检查序列中是否存在单位根,如果存在单位根就是非平稳时间序列了.下面是找的解释为什么单位根存在就是非平稳时间序列的原因. 作者:五雷 链接 ...
- 金融时间序列Note 1 —— 平稳性,相关系数,自相关函数(ACF)及其平稳性检验
本文用于<金融时间序列>的相关介绍,适合快速入门和期末复习.(才怪我感觉自己考的超烂) OK,首先用自己的话讲一下什么是时间序列,首先我们会考得最多得时间序列肯定是线性的,既然说了有线性的 ...
- 如果常数项没有经过显著性检验_时间序列(一):平稳性、自相关函数与LB检验...
前言 略过介绍性的知识,直接怼重难点. 1. 平稳性 Stationarity 直观上看当数据没有明显的模式特征的话(趋势性.季节性),我们认为它是平稳的.定义上"平稳"指固定时间 ...
- 时间序列的预处理——平稳性检验的R语言实现(二)
这一部分是时间序列预处理R语言的实现. 目标是将课本和上课知识点整合. 老师是用一节课讲完的,本篇文章只做了平稳性检验~~~ 下一篇再写纯随机性检验 全部代码 #input data yield &l ...
- 关于R语言计量检验之三平稳性(单位根)
单位根检验是指检验序列中是否存在单位根,因为存在单位根就是非平稳时间序列了.单位根就是指单位根过程,可以证明,序列中存在单位根过程就不平稳,会使回归分析中存在伪回归. ----- 2 单位根检验方法- ...
- python adf检验_python做adf检验
adf检验是用来检验序列是否平稳的方式 一般来说是时间序列中的一种检验方法 python中可使用现成的工具statsmodels来实现adf检验 import numpy as np import s ...
- python平稳性检验_Python中非平稳时间序列的处理
以下应用有什么共同点:预测未来三个月的一个家庭的电力消耗:估计在一定时期内道路的交通量:以及预测一个股票在纽约证券交易所上交易的价格. 以上都涉及时间序列数据的概念!如果没有"时间" ...
- 时间序列平稳性分析和白噪声检验
文章目录 一.时间序列平稳性 1.ADF检验 1.1.ADF检验原理 1.2.ADF的python实现 2.ACF和PACF 二.白噪声检验 原始的负荷时间序列曲线 一.时间序列平稳性 时间序列分析之 ...
最新文章
- git提交过程中遇到的 index.lock 问题导致无法提交的解决方法
- python详细安装教程linux-Linux系统如何安装Python?新手教程
- 阳泉师范高等专科学校计算机系,阳泉师范高等专科学校
- 中小企业CRM评测-八百客
- 前端学习(2674):vue3修改
- 做数据产品经理要学习那些东西?
- 每天看到那么徒步直播的朋友,他们靠什么生活呢?
- 幼儿园的孩子怎么才可以锻炼其自理能力呢?
- stringByReplacingCharactersInRange: withString: 实现字符串删除,替换
- Bailian3754 字符环【字符串】
- h5(html5)+css3+移动端前端
- 2019年下半年程序员考试上午真题自我汇总
- Windows API GetLastError()函数返回值含义解释
- MacBook环境下python连接oracle数据库
- 员工提出辞职后又不想走了,是否可以反悔
- Holt Winter时间序列模型
- ISP算法:gamma矫正
- 可以真正实现免驱的WinUSB设备
- LeetCode 881 救生艇
- MySQL --alter table的使用