在做时间序列分析时,我们经常要对时间序列进行平稳性检验,而我们常用的软件是SPSS或SAS,但实际上python也可以用来做平稳性检验,而且效果也非常好,今天笔者就讲解一下如何用python来做时间序列的平稳性检验。首先我们还是来简单介绍一下平稳性检验的相关概念。

图1. 平稳性序列的相关公式时间序列的平稳性可分为严平稳和宽平稳。设{Xt}是一时间序列,对任意正整数m,任取t1、t2、t3、...、tm∈T,对任意整数τ,假如满足图1中式(1),则称时间序列{Xt}是严平稳时间序列。而宽平稳的定义为,如果{Xt}满足以下三个条件:(1)任取t∈T,有E(Xt·Xt)

图2. 纱产量部分数据截图

图3. 纱产量时序图第二个例子是1962年1月至1975年12月平均每头奶牛月产奶量时间序列(数据来自网站http://census-info.us),其数据如图4所示,序列图如图5所示。从图5中可以看出,平均每头奶牛的月产奶量以年为周期呈规则的周期性,此外还有明显的逐年递增趋势,所以该序列也一定不是平稳序列。

图4. 奶牛产量部分数据截图

图5. 奶牛产量时序图第三个例子是1949年至1998年北京市每年最高气温序列(数据来自北京市统计局),其数据如图6所示,序列图如图7所示。从图7中可以看出,北京市每年的最高气温始终围绕在37度附近随机波动,没有明显趋势或周期,基本可以视为平稳序列,但我们还需要利用自相关图进一步验证。

图6. 北京最高气温部分数据截图

图7. 北京最高气温时序图从上面的例子可以看出,时序图只能粗略来判断一个时间序列是否为平稳序列,我们可以用自相关图来更进一步检验。要画自相关图,我们就要用到python,下面是相关代码。import pandas as pd

import matplotlib.pyplot as plt

from statsmodels.graphics.tsaplots import plot_acf

temperature = r'C:\Users\北京气温.xls'

milk = r'C:\Users\奶牛产量.xlsx'

yarn = r'C:\Users\纱产量.xls'

data_tem = pd.read_excel(temperature, parse_date=True)

data_milk = pd.read_excel(milk, parse_date=True)

data_yarn = pd.read_excel(yarn, parse_date=True)

plt.rcParams.update({'figure.figsize':(8,6), 'figure.dpi':100}) #设置图片大小

plot_acf(data_tem.Tem) #生成自相关图

plot_acf(data_milk.milk_yield)

plot_acf(data_yarn.yarn_yield)

plt.show()画自相关图用到的是statsmodels中的plot_acf方法,这个方法很简单,只需要直接输入数据即可,不过数据要是一维的,生成的3张图如图8、图9和图10所示。

图8. 纱产量自相关图

图9. 奶牛产量自相关图

图10. 北京最高气温自相关图平稳序列通常具有短期相关性,即随着延迟期数k的增加,平稳序列的自相关系数会很快地衰减向零,而非平稳序列的自相关系数的衰减速度会比较慢,这就是我们利用自相关图判断平稳性的标准。我们就来看下这3张自相关图,图8是纱年产量的自相关图,其横轴表示延迟期数,纵轴表示自相关系数,从图中可以看出自相关系数衰减到零的速度比较缓慢,在很长的延迟期内,自相关系数一直为正,然后为负,呈现出三角对称性,这是具有单调趋势的非平稳序列的一种典型的自相关图形式。再来看看图9,这是每头奶牛的月产奶量的自相关图,图中自相关系数长期位于零轴一边,这是具有单调趋势序列的典型特征,同时还呈现出明显的正弦波动规律,这是具有周期变化规律的非平稳序列的典型特征。最后再来看下图10,这是北京每年最高气温的自相关图,图中显示该序列的自相关系数一直比较小,可以认为该序列一直在零轴附近波动,这是随机性较强的平稳序列通常具有的自相关图。最后我们再讲一下ADF方法。前面两种方法都是作图,图的特点是比较直观,但不够精确,而ADF法则是直接通过假设检验的方式来验证平稳性。ADF(全称Augmented Dickey-Fuller)是一种单位根检验方法,单位根检验方法比较多,而ADF法是比较常用的一种,其和普通的假设检验没有太大区别,都是列出原假设和备择假设。ADF的原假设(H0)和备择假设(H1)如下。H0:具有单位根,属于非平稳序列。H1:没有单位根,属于平稳序列,说明这个序列不具有时间依赖型结构。下面我们就用python代码来解释一下ADF的用法。from statsmodels.tsa.stattools import adfuller

yarn_result = adfuller(data_yarn.yarn_yield) #生成adf检验结果

milk_result = adfuller(data_milk.milk_yield)

tem_result = adfuller(data_tem.Tem)

print('The ADF Statistic of yarn yield: %f' % yarn_result[0])

print('The p value of yarn yield: %f' % yarn_result[1])

print('The ADF Statistic of milk yield: %f' % milk_result[0])

print('The p value of milk yield: %f' % milk_result[1])

print('The ADF Statistic of Beijing temperature: %f' % tem_result[0])

print('The p value of Beijing temperature: %f' % tem_result[1])这里我们用的是statsmodels中的adfuller方法,其使用也比较简单,直接输入数据即可,但其返回值较多,返回的结果中共有7个值,分别是adf、pvalue、usedlag、nobs、critical values、icbest和resstore,这7个值的意义大家可以参考官方文档,我们这里用到的是前两个,即adf和pvalue,adf就是ADF方法的检验结果,而pvalue就是我们常用的p值。我们的得到结果如图11所示。

图11. ADF检验结果在图11中,我们可以看到,纱产量、奶牛产量和北京气温的adf值分别是-0.016384、-1.303812和-8.294675,这个值理论上越负越能拒绝原假设,但我们在这里不用adf来判断,而是用p值。这3个p值分别是0.957156、0.627427和0.000000,以常用的判断标准值0.05作为参考,前两个p值都远大于0.05,说明其是支持原假设的,说明纱产量和奶牛产量都是非平稳序列,而北京气温序列的p值为零,说明是拒绝原假设,表明该序列是一个平稳序列。我们可以看到,利用adf法和前面两种方法得到的结果是一致的。本文比较详细地介绍了判断时间序列平稳性的3种方法,这3种方法在实际应用中是经常用到的,当然判断平稳性的方法还有很多种,大家如有需要也可以自行查找相关资料。

python平稳性检验程序_用 Python 检验时间序列的平稳性相关推荐

  1. R语言检验时间序列的平稳性:使用tseries包的adf.test函数实现增强的Dickey-Fuller(ADF)检验、检验时序数据是否具有均值回归特性(平稳性)、不具有均值回归特性的案例

    R语言检验时间序列的平稳性:使用tseries包的adf.test函数实现增强的Dickey-Fuller(ADF)检验.检验时序数据是否具有均值回归特性(平稳性).不具有均值回归特性的案例 目录

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

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

  3. R语言检验时间序列的平稳性:使用tseries包的adf.test函数实现增强的Dickey-Fuller(ADF)检验、检验时序数据是否具有均值回归特性(平稳性)、具有均值回归特性的案例

    R语言检验时间序列的平稳性:使用tseries包的adf.test函数实现增强的Dickey-Fuller(ADF)检验.检验时序数据是否具有均值回归特性(平稳性).具有均值回归特性的案例 目录

  4. python大牛 关东升_《Python从小白到大牛》第4章 Python语法基础

    本章主要为大家介绍Python的一些语法,其中包括标识符.关键字.常量.变量.表达式.语句.注释.模块和包等内容. 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Pyth ...

  5. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  6. python 清空所有对象_学习python第38天

    今天分享一下python的内存管理和隔代回收 对象的内存使用 赋值语句是语言最常见的功能了.但即使是最简单的赋值语句,也可以很有内涵.Python的赋值语句就很值得研究. a = 1 整数1为一个对象 ...

  7. python画交互式地图_使用Python构建交互式地图-入门指南

    python画交互式地图 Welcome to The Beginner's Guide to Building Interactive Maps in Python 欢迎使用Python构建交互式地 ...

  8. 熊猫的python小课账号_学习python中的pandas有没有好的教程推荐?

    之前好多人私信我python数据分析怎么快速入门,我在这里直接介绍一下自己的心得经验吧. 要学习pandas,我并不建议看大量的教程,等看完教程,天都黑了,一觉醒来热情都凉了. 我的建议是,首先放平心 ...

  9. python小老鼠编程_成都python函数学习教程,Python编写课程

    1.urllib2/urllib实现urllib2和urllib是Python中的两个内置模块,要实现HTTP功能,实现方式是以urllib2为主,urllib为辅.1.1首先实现一个完整的请求与响应 ...

  10. python出现的意义_[转]Python中下划线以及命名空间的意义

    Python 用下划线作为变量前缀和后缀指定特殊变量/方法. 主要存在四种情形 1. 1. object # public 2. __object__ # special, python system ...

最新文章

  1. R使用dplyr包对变量、特征进行标准化(standardize)缩放操作
  2. 独家 | 建立软件的经济学分析框架,浅议开源软件的经济学特性(附图解)
  3. Hadoop完全分布式HA环境搭建
  4. 围观云栖大会有感:从不“栖”而遇到后会有“栖”
  5. C++ 中的集合与字典
  6. eclipse mac 下载php文件夹,PHP Pydev Eclipse (linux or mac)
  7. UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)
  8. inx的c语言表达式,Spninx 解决的问题
  9. 使用存储过程及触发器案例
  10. wince6.0开机自启动应用程序
  11. phpcms 文本溢出(······省略号)组合处理 - 代码篇
  12. 【bzoj4709】[Jsoi2011]柠檬 斜率优化
  13. Raki的读paper小记:EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification
  14. 科学计算机算度数,计算器问题科学计算器有分角度制和弧度制,身 – 手机爱问...
  15. ps2模拟器bios3dm_龙漫ps2模拟器最新版 - 模拟器综合讨论区 - 3DMGAME论坛 - Powered by Discuz!...
  16. PGP加密的基本操作
  17. 三月写给沉默王二的一封道歉信
  18. 解决:ARouter 报错 There is no route matched
  19. 专为轻运动而生的南卡NEO全新发布,定位骨传导运动耳机新标杆!
  20. 如何修改Julia语言环境的安装包默认安装文件夹的位置

热门文章

  1. 如何使用EXCEL连接数据库,获取数据
  2. java apdu读取社保卡_读取社保卡信息
  3. 微服务架构学习与思考(04):微服务技术体系
  4. 人大金仓数据库高可用集群部署教程
  5. MagicDraw-需求图
  6. 疲劳测试分析软件,ANSYS nCode DesignLife高级疲劳耐久性分析_ANSYS仿真工具_其他软件_工业软件_安世亚太...
  7. 主流PC常用总线总结
  8. [挑战杯] 火焰检测
  9. RS485接口与RJ45接口的区别与通讯限制
  10. html网站计数器代码,网站计数器(示例代码)