python 平稳性检验文档,python平稳性检验程序

  python 平稳性检验文档,python平稳性检验程序

  在做时间序列分析的时候,我们经常需要检查时间序列的平稳性,我们常用的软件是SPSS或者SAS,但其实python也可以用来检查平稳性,效果也很好。今天笔者就来讲解一下如何用python来检验时间序列的平稳性。

  首先,我们简单介绍一下平稳性检验的相关概念。

  图一。平稳性级数的相关公式

  时间序列的平稳性可分为严格平稳性和广义平稳性。设{Xt}是一个时间序列。对于任意正整数M,取t1、t2、t3、tmT,对于任意整数,如果满足图1中的公式(1),则称时间序列{Xt}为严格平稳。宽平稳性定义为{Xt}满足以下三个条件:

  (1)设tT,e (XT XT)

  (2)设tT被选择,E Xt=,为常数;

  (3) t,s,kT,和k s-tT,其中(t,s)=(k,k s-t)

  则{Xt}称为宽平稳时间序列。

  由于我们在实际应用中很难得到随机序列的分布函数,所以很少使用严格平稳时间序列,主要是宽平稳时间序列。

  了解了平稳性的基本概念之后,我们再来说说平稳时间序列的意义。平稳时间序列的分析也遵循数理统计的基本原理,都是利用样本信息来推断整体信息。这就要求要分析的随机变量越少越好(即数据的维度越小越好),每个变量能得到的样本信息越多越好(即数据的观测值越大越好),因为随机变量越少,分析过程越简单,样本量越大,分析结果越可靠。然而,时间序列的数据结构有其特殊性。其任意时刻的序列值Xt是一个随机变量,并且由于时间的不可重复性,该变量在任意时刻只能获得唯一的样本观测值。由于样本信息太少,在没有其他辅助信息的情况下,通常无法分析这种数据结构,而序列平稳性可以有效解决这一问题。在平稳序列中,序列的均值等于一个常数,这意味着原本包含几个随机变量的均值序列{t,tT}变成了一个常数序列{,tT}。原来每个随机变量的均值t只能用一个样本观测值xt来估计。现在因为t=,每个样本观测值xt都变成了一个均值不变的样本观测。这大大减少了随机变量的数量,增加了待估计参数的样本量,也降低了时间序列分析的难度。

  了解了时间序列的平稳性之后,下面详细讲解一下如何用python来测试。

  用python测试平稳性主要有三种方法,时序图测试、自相关图测试和构造统计测试。

  首先,时序图测试,时序图是一个普通的时间序列图,即以时间为横轴,以观测值为纵轴进行测试。这里,笔者举三个例子。因为时序图太简单了,我这里直接用Excel做时序图,python也可以,但是没有Excel简单。第一个例子是1964-1999年中国每年纱线产量时间序列(此数据来自北京统计局),其数据如图2所示,序列图如图3所示。从图3中可以清楚地看出,中国的纱线年产量序列有明显的增长趋势,因此它一定不是平稳序列。

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

  图3。纱线输出时序图

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

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

  图5。奶牛产量时序图

  第三个例子是北京1949-1998年的年最高气温序列(数据来自北京市统计局)。数据如图6所示,序列图如图7所示。从图7中可以看出,北京年最高气温始终在37度左右随机波动,没有明显的趋势和周期,基本可以认为是平稳序列,但我们需要用自相关图进一步验证。

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

  图7。北京最高气温时序图

  从上面的例子可以看出,时序图只能大致判断一个时间序列是否为平稳序列,我们可以用自相关图进一步检验。要画自相关图,需要用python。下面是相关代码。importpandasaspd

  importmatplotlib.pyplotasplt

  from stats models . graphics . tsaplotsimportplot _ ACF

  温度=r c:\ Users \ Beijing temperature . xls

  Milk=rC:\Users\ cow yield.xlsx

  Yarn=rC:\Users\ yarn yield.xls

  data_tem=pd.read_excel(温度,解析日期=True)

  data_milk=pd.read_excel(牛奶,解析日期=真)

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

  PLT . RC params . update({ figure . figure size :(8,6), figure.dpi: 100}) #设置图片大小

  Plot_acf(data_tem。Tem)#生成自相关图

  plot_acf(数据_牛奶.牛奶_产量)

  plot_acf(数据_纱线.纱线_产量)

  plt.show()

  使用statsmodels中的Plot_acf方法绘制自相关图。这种方法非常简单,你只需要直接输入数据。但是,数据是一维的,生成的三个图如图8、图9和图10所示。

  图8。纱线产量的自相关图

  图9。奶牛产量的自相关图

  图10。北京最高气温的自相关图

  平稳序列通常具有短期相关性,即随着延迟周期k的增加,平稳序列的自相关系数会迅速衰减到零,而非平稳序列的自相关系数衰减缓慢,这是利用自相关图判断平稳性的标准。让我们来看看这三个自相关图。图8是纱线年产量的自相关图。横轴表示延迟周期的数量,纵轴表示自相关系数。从图中可以看出,自相关系数缓慢衰减到零。在一个较长的延迟周期内,自相关系数总是先正后负,呈现三角对称,是具有单调趋势的非平稳序列自相关图的典型形式。我们来看一下图9,这是每头奶牛每月产奶量的自相关图。图中的自相关系数长期位于零轴一侧,这是单调趋势序列的典型特征,同时表现出明显的正弦波动规律,这是具有周期变化规律的非平稳序列的典型特征。最后看下图10,这是北京每年最高气温的自相关图。说明该序列的自相关系数一直比较小,可以认为该序列一直围绕零轴波动,这是随机性强的平稳序列通常具有的自相关图。

  最后说一下ADF方法。前两种方法是画图,直观,但不够准确,而ADF规则是通过假设检验直接验证平稳性。ADF是一种单位根检验方法。单位根检验方法有很多,但ADF是常用的一种。它与常见的假设检验没有太大区别,它列出了原假设和备择假设。ADF的原始假设(H0)和替代假设(H1)如下。

  H0:有单位根,属于非平稳序列。

  H1:没有单位根,属于平稳序列,说明这个序列不具有时变结构。

  让我们用python代码来解释一下ADF的用法。from stats models . TSA . stattoolsimportadfuller

  yarn _ result=ad fuller(data _ yarn . yarn _ yield)#生成adf测试结果

  milk_result=adfuller(数据_牛奶.牛奶_产量)

  tem_result=adfuller(data_tem。Tem)

  print( theadfstatisticofyanyield:% f % yarn _ result[0])

  print( thepvalueofarnyield:% f % yarn _ result[1])

  print( TheADFStatisticofmilkyield:% f % milk _ result[0])

  print( Thepvalueofmilkyield:% f % milk _ result[1])

  print( TheADFStatisticofBeijingtemperature:% f % tem _ result[0])

  print( ThepvalueofBeijingtemperature:% f % tem _ result[1])

  这里,我们使用statsmodels中的adfuller方法,该方法简单易用。直接输入数据就够了,但是返回值很多。返回的结果中有七个值,分别是adf、pvalue、usedlag、nobs、critical values、icbest和resstore。关于这七个值的含义,请参考官方文件。我们在这里使用前两个,即adf和pvalue。adf是ADF方法的测试结果,pvalue是我们常用的P值。我们的结果如图11所示。

  图11。ADF测试结果

  在图11中,我们可以看到纱线产量、奶牛产量和北京气温的adf值分别为-0.016384、-1.303812和-8.294675。这个值理论上越负,越能否定原来的假设,但我们这里不用adf来判断,而是用P值来代替。这三个P值分别为0.957156、0.627427和0.00000。以常用的判断标准值0.05为参照,前两个P值远大于0.05,说明支持原假设,说明纱线产量和奶牛产量是非平稳序列,而北京气温序列的P值为零,说明原假设被否决,说明这个序列是平稳序列。我们可以看到adf方法得到的结果与前两种方法得到的结果是一致的。

  本文详细介绍了判断时间序列平稳性的三种方法。这三种方法在实际应用中经常用到。当然,判断平稳性的方法有很多。必要的话也可以自己去查相关资料。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: