精华内容
下载资源
问答
  • 时间序列数据平稳性检验实验指导.pdf
  • 目录时间序列预测时间序列的平稳平稳平稳三级目录 时间序列预测 按照时间的顺序把随机事件变化发展的过程记录下来就构成了一个时间序列。...因为时间有不可重复,所以转为研究数据特征 时间序

    时间序列预测

    按照时间的顺序把随机事件变化发展的过程记录下来就构成了一个时间序列。

    x1,x2,x3,x4,...,xt
    

    对时间序列进行观察、研究,找寻他变化发展的规律,预测它未来的走势就是时间序列预测

    序列:
    按时间顺序排列的一组随机变量

    Xt1,Xt2,...,Xtn或者x1,x2,x3,...,xt
    

    随机变量组的统计特征完全由他们的联合分布函数或者联合密度函数决定。
    时间序列概率分布组的定义
    请添加图片描述
    因为时间有不可重复性,所以转为研究数据特征

    请添加图片描述

    借数据

    就是把x1 x2 x3、、、xt所有的值取过来,都当做x1的值。

    为什么可以这样做呢?
    因为x1~xt所取得值是比较平稳的,借过来之后数据变多了。计算x2的期望,也是借数据,X1,X3 ~ Xt。
    所以他们的期望都是一样的,这也是平稳性一个重要的性质,期望和方差,所有变量都一样。

    第一个变量和第二个变量的协方差,计算时候,两个变量都进行借数据,形成同维度的向量,就可以做自协方差,自相关系数。

    借数据的时候,可以区分步长,不一定为1。
    当两个变量借数据步长不一样,数据就不一样,两个变量的协方差等,就需要借数据。

    借数据条件

    每一个变量一样,跨越步长一样,期望均值都一样。

    时间序列的平稳

    严平稳

    严平稳是一种条件比较苛刻的平稳性定义,它认为只有当序列所有的统计性质都不会随着时间的推移而发生改变,该序列才可以成为平稳

    宽平稳

    宽平稳是使用序列的特征统计量来定义的一种平稳性。它认为序列的统计性质主要由它的低阶矩决定,所以只要保证序列低阶矩平稳(二阶),就能保证序列的主要性质近似稳定。

    满足如下条件的序列为宽平稳序列

    请添加图片描述
    1)方差存在
    2)跨越步长一样,自协方差也一样,期望也是一样的

    平稳时间序列的统计性质

    k为跨越的步长
    1)常数均值
    2)自协方差函数和自相关函数只依赖于时间的平移长度而与时间的起止点无关
    3)延迟k自协方差函数
    请添加图片描述
    与起点无关
    4)延迟k自相关系数
    请添加图片描述
    γ(0)就是没跨越,就是自己对自己的方差,就是γ(0)

    时间序列数据结构的特殊性

    • 可列出多个随机变量,而每一个变量只有一个样本观察值

    平稳性的重大意义

    • 极大的减少了随机变量的个数,而增加了待估变量的样本容量
    • 极大的简化了时序分析的难度,同时也提高了对特征统计量的估计精度
      (弥补了时间变化取值不可以重复取值的问题)

    时间序列数据平稳性检验

    时序图检验

    根据平稳时间序列均值、方差为常数的性质,平稳序列的时序图应该显示出该序列始终在一个常数值附近随机波动,而波动的范围是有界、无明显趋势及周期特征。

    自相关图检验

    平稳序列通常具有短期相关性。该性质用自相关系数来描述就是随着延迟期数的增加,平稳序列的自相关系数会很快地衰减向0.

    相关系数值跟步长有关系。

    请添加图片描述
    因为没有短期相关,所以判断为不平稳。
    请添加图片描述
    有周期和发展趋势的都不能叫平稳的。
    请添加图片描述
    判断一个序列是否平稳,更多的是靠经验。

    ADF检验(单位根检验的一种)

    请添加图片描述
    主要用的是回归的方法和 t 检验。

    例:
    请添加图片描述
    t是一个列向量。
    y1是一百行一列的随机数
    因为是随机均匀取点,所以y1是平稳的
    y2不是平稳的
    adftest研究ADF检验的
    请添加图片描述
    adf统计值
    p1概率
    ljz临界值
    注意:
    不同方法得到不同的结论,则该数据介于平稳和不平稳之间的。可以根据需要选择合适的方法。

    二阶矩是什么呢?
    二阶(非中心)矩就是对变量的平方求期望,二阶中心矩就是对随机变量与均值(期望)的差的平方求期望。为什么要用平方,因为如果序列中有负数就会产生较大波动,而平方运算就好像对序列添加了绝对值,这样更能体现偏离均值的范围。(答案来自百度)

    展开全文
  • 时间序列的平稳性检验、协整检验和误差修正模型等的博文。 2.博主是一个普普通通的大学生,没有很厉害的技术,写的内容都是不太正经的偏小白简单的,写的也是学校教过的知识消化后自己的见解,不是很学术研究的博文...

    一、简介

    1.本篇博文是一篇关于线性回归的基本操作;时间序列的平稳性检验、协整检验和误差修正模型(在下一篇博文里延续传送门)等的博文。

    2.博主是一个普普通通的大学生,没有很厉害的技术,写的内容都是不太正经的偏小白简单的,写的也是学校教过的知识消化后自己的见解,不是很学术研究的博文。

    3.配置:Window 7旗舰版+64位操作系统+StataIC 14(64-bit)

    二、数据描述性统计分析

    1.导入数据

    (1)打开StataIC软件,在软件的上栏目中找到下图圈出的图标,那个图标就是导入数据的入口
    在这里插入图片描述
    (2)点进去之后,StataIC软件会新弹出另一个窗口出来给你放数据,如下图。
    在这里插入图片描述
    (3)一般下载到的数据都是Excel文件格式的xsl文件,是无法直接用StataIC打开的。我们可以打开Excel文件,把需要的数据选择之后复制,再打开StataIC的数据界面粘贴。

    粘贴后StataIC会弹一个提示窗口,你只需按红色圈起来的那个Variable names的按钮就能把数据导入StataIC。因为有时候数据的第一行是变量名 (例:x,y,z),你就需要选Variable names;但你的x,y,z之类的变量是要作为数据的,就选择Data按钮。
    在这里插入图片描述
    (5)最后导入成功数据就会出现下图页面。
    在这里插入图片描述

    2.设置时间序列

    (1)tsset是定义数据是一个时间序列数据。如果想对数据文件定义year为时间变量,则输入命令:

    tsset year
    

    若你的数据文件里的时间变量名不为year,你就需要用你的变量名去替换掉我给的命令里的year,如:

    tsset ***                  #***代表你的时间变量名
    

    (2)输入命令,命令输入的地方在StataIC软件的最先下面,输入之后Enter键即可。

    在这里插入图片描述
    StatarIC对输入的内容有要求,和Java一样,不能用中字输入法去输入英文字符串,不然StataIC软件会报错。

    (3)时间序列设置成功就会显示如下图:

    在这里插入图片描述
    如果没有成功,输入栏上方就会显示红色英文句子。但一般出现短横线(如:-)即说明命令成功。

    3.数据描述性统计分析

    1. 命令:sum
      在这里插入图片描述
      结果如下图所示:
      在这里插入图片描述
    2. 命令:sum 变量1 变量2,detail (更详细的描述性统计分析)
      在这里插入图片描述
      结果如下图所示:
      在这里插入图片描述

    三、绘图——趋势图和散点图

    1. 趋势图

    1. 命令:
    line varname,title(图表名)xtitle(变量x的名称)ytitle(xxx)     #若是不需要显示名称,让括号里面为空即可                           
    
    1. 例:

    命令:
    line gdpr consr year,title(增长率)xtitle(年)ytitle()
    在这里插入图片描述
    绘图结果会以新的窗口形式弹出来,结果如下图显示:
    在这里插入图片描述

    2、散点图

    1. 第一种:

    (1)命令:

    twoway(scatter varname1 varname2)(lfit varname1 varname2 )      
    
    #varname1 varname2是变量1和变量2的名称的意思
    
    • 其中“ lfit"表示”linear fit"(线性拟合),形状为直线。
    • 如果想在散点图上同时画出二次回归曲线,直接将“ lfit"改为“qfit",(二次拟合),形状为曲线。

    (2)例一(lfit):
    输入命令:twoway (scatter infla unemp) (lfit infla unemp)
    在这里插入图片描述
    结果如下图所示:
    在这里插入图片描述

    (3)例二(qfit):
    输入命令:twoway (scatter infla unemp) (qfit infla unemp)
    在这里插入图片描述
    结果如下图所示:
    在这里插入图片描述
    要区别于例一,一个为lfit,一个为qfit。

    1. 第二种:

    (1)命令:

    aaplot varname1 varname2               #varname1 varname2是变量1和变量2的名称的意思
    
    • 第一步:先安装外部命令aaplot,输入命令:ssc install aaplot
    • 第二步:输入命令 aaplot varname1 varname2

    (2) 例:
    输入命令:aaplot infla unemp
    在这里插入图片描述
    结果如下图所示:
    在这里插入图片描述

    3.变量差分后的趋势图

    1. 命令:
    line dvarname1 dvarname2 时间变量名
    
    1. 例:

    输入命令line dinfla dunemp year:
    在这里插入图片描述
    结果如下图所示:
    在这里插入图片描述

    四、数据相关性分析

    第一步:

    1. 命令:
    correlate varname1 varname2                #varname1 varname2是变量1和变量2的名称的意思
    
    1. 1.例:
      输入命令:correlate gdpr consr
      在这里插入图片描述
      结果如下图所示:
      在这里插入图片描述

    第二步:

    1. 命令:
    pwcorr varname1 varname2,sig 
    
    1. 1例:
      输入命令pwcorr gdpr consr,sig:
      在这里插入图片描述
      结果如下图所示:
      在这里插入图片描述

    五、数据平稳性分析

    1.单位根检验

    1. 命令:
    dfuller varname
    

    例:

    • (1)输入命令(检验第一个变量gdpr)dfuller gdpr:
      在这里插入图片描述

    • 结果如下图所示:
      结论:gdpr不平稳
      在这里插入图片描述

    • (2)输入命令(检验第一个变量consr) dfuller consr:
      在这里插入图片描述

    • 结果如下图所示:
      结论:consr不平稳
      在这里插入图片描述

    2.CF和PACF图

    1. 绘制自相关图,命令:
    ac varname
    
    1. 绘制偏自相关图,命令:
    pac varname     
    
    1. 例一:
      (1)输入命令ac gdpr(做gdpr的自相关图):
      在这里插入图片描述
      结果如下图所示:
      在这里插入图片描述
      (2)输入命令ac consr(做consr的自相关图):
      在这里插入图片描述
      结果如下图所示:
      在这里插入图片描述
    2. 例二
      (1)输入命令pac infla:
      在这里插入图片描述
      结果如下图所示:
      在这里插入图片描述
      (2)输入命令pac unemp:
      在这里插入图片描述
      结果如下图所示:
      在这里插入图片描述

    3.若序列不平稳,生成差分变量,再做单位根检验

    1. 生成差分变量

    命令:

    gen dvarname1=d.varname1                        #别忘了变量名前的d
    gen dvarname2=d.varname2                        #varname1 varname2是变量1和变量2的名称的意思
    

    例:
    (1) 输入命令:
    gen dgdpr=d.gdpr
    gen dconsr=d.consr
    在这里插入图片描述
    在这里插入图片描述
    结果如下图所示:
    在这里插入图片描述
    2. 对差分后的新变量,做单位根检验:

    命令:

    dfuller dvarname1                #别忘了变量名前的d
    

    例:

    1. 输入命令:dfuller dgdpr
      在这里插入图片描述
      结果如下图所示:
      结论:dgdpr平稳
      在这里插入图片描述
      输入命令:dfuller dconsr
      在这里插入图片描述
      结果如下图所示:
      结论:dconsr不平稳
      在这里插入图片描述

    六、总结

    • 由于俩时间序列是非平稳的,gdpr和consr都是一阶单整的。

    七、后续

    • 下一篇博文会在这篇博文的基础上写关于协整检验和误差修正模型的操作。

    在这里插入图片描述
    码字总结不易,点个赞吧(*・ω< )

    展开全文
  • 本文参考了文献[6]中的平稳性检验方法,设计了一个信号平稳性检验系统,并在 Matlab的GUI开发环境下实现了图形用户界面的设计。实践表明,本系统不但提供了友好的用户界面,并且可以方便地完成信号的平稳性检验
  • 时间序列平稳性检验方法分析及应用研究,陈海龙,王钧婷,判断时间序列的平稳性是时间序列分析的重要环节。由于平稳信号与非平稳信号的性质差别显著,所以判断时间序列的平稳性非常重要。
  • 上文我们已经知道了什么是时间序列的平稳性,也见到了一些平稳时间序列和非平稳的时间序列,那么当我们有一个新的时间序列数据时,怎么判断它是否是平稳的呢?时间序列平稳性检验方法,可分为三类:图形...

    e7d6c234ed55bd14007dd709ac9d7755.gif

    上文我们已经知道了什么是时间序列的平稳性,也见到了一些平稳时间序列和非平稳的时间序列,那么当我们有一个新的时间序列数据时,怎么判断它是否是平稳的呢?

    时间序列平稳性检验方法,可分为三类:

    1. 图形分析方法

    2. 简单统计方法

    3. 假设检验方法

    一、图形分析方法

    图形分析方法是一种最基本、最简单直接的方法,即绘制图形,肉眼判断。

    可直接可视化时间序列数据,也可以可视化时间序列的统计特征。

    可视化数据

    可视化数据即绘制时间序列的折线图,看曲线是否围绕某一数值上下波动(判断均值是否稳定),看曲线上下波动幅度变化大不大(判断方差是否稳定),看曲线不同时间段波动的频率[~紧凑程度]变化大不大(判断协方差是否稳定),以此来判断时间序列是否是平稳的。

    以下绘制几张图,大家来直观判断一下哪些是平稳的,哪些是非平稳的。

    import numpy as np
    import pandas as pd
    import akshare as ak
    from matplotlib import pyplot as plt
    
    np.random.seed(123)
    
    # -------------- 准备数据 --------------
    # 白噪声
    white_noise = np.random.standard_normal(size=1000)
    
    # 随机游走
    x = np.random.standard_normal(size=1000)
    random_walk = np.cumsum(x)
    
    # GDP
    df = ak.macro_china_gdp()
    df = df.set_index('季度')
    df.index = pd.to_datetime(df.index)
    gdp = df['国内生产总值-绝对值'][::-1].astype('float')
    
    # GDP DIFF
    gdp_diff = gdp.diff(4).dropna()
    
    
    # -------------- 绘制图形 --------------
    fig, ax = plt.subplots(2, 2)
    
    ax[0][0].plot(white_noise)
    ax[0][0].set_title('white_noise')
    ax[0][1].plot(random_walk)
    ax[0][1].set_title('random_walk')
    
    ax[1][0].plot(gdp)
    ax[1][0].set_title('gdp')
    ax[1][1].plot(gdp_diff)
    ax[1][1].set_title('gdp_diff')
    
    plt.show()

    ed601d67f540100007e3cc119ca2f7b2.pnga. 白噪声,曲线围绕0值上下波动,波动幅度前后、上下一致,为平稳序列。
    b. 随机游走,曲线无确定趋势,均值、方差波动较大,非平稳序列。
    c. GDP数据趋势上升,均值随时间增加,非平稳序列。
    d. GDP季节差分后数据,曲线大致在一条水平线上上下波动,波动幅度前后变化较小,可认为是平稳的。

    可视化统计特征

    可视化统计特征,是指绘制时间序列的自相关图和偏自相关图,根据自相关图的表现来判断序列是否平稳。

    自相关,也叫序列相关,是一个信号与自身不同时间点的相关度,或者说与自身的延迟拷贝--或滞后--的相关性,是延迟的函数。不同滞后期得到的自相关系数,叫自相关图。

    (这里有一个默认假设,即序列是平稳的,平稳序列的自相关性只和时间间隔k有关,不随时间t的变化而变化,因而可以称自相关函数是延迟(k)的函数)

    平稳序列通常具有短期相关性,对于平稳的时间序列,自相关系数往往会迅速退化到零(滞后期越短相关性越高,滞后期为0时,相关性为1);而对于非平稳的数据,退化会发生得更慢,或存在先减后增或者周期性的波动等变动。

    464ba1146d944c342def5aad57da8f9d.png

    自相关的计算公式为根据滞后期k将序列拆成等长的两个序列,计算这两个序列的相关性得到滞后期为k时的自相关性。举例:

    import statsmodels.api as sm
    X = [2,3,4,3,8,7]
    print(sm.tsa.stattools.acf(X, nlags=1, adjusted=True))

    > [1, 0.3559322]
    其中第一个元素为滞后期为0时的自相关性,第二个元素为滞后期为1时的自相关性

    根据ACF求出滞后k自相关系数时,实际上得到并不是X(t)与X(t-k)之间单纯的相关关系。

    因为X(t)同时还会受到中间k-1个随机变量X(t-1)、X(t-2)、……、X(t-k+1)的影响,而这k-1个随机变量又都和X(t-k)具有相关关系,所以自相关系数里面实际掺杂了其他变量对X(t)与X(t-k)的影响。

    在剔除了中间k-1个随机变量X(t-1)、X(t-2)、……、X(t-k+1)的干扰之后,X(t-k)对X(t)影响的相关程度,叫偏自相关系数。不同滞后期得到的偏自相关系数,叫偏自相关图。(偏自相关系数计算较复杂,后期再来具体介绍)

    下面我们就来看看几个实战案例(上图中的数据再来看一下它们的自相关图和偏自相关图):

    # 数据生成过程在第一个代码块中
    from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    
    fig, ax = plt.subplots(4, 2)
    fig.subplots_adjust(hspace=0.5)
    
    plot_acf(white_noise, ax=ax[0][0])
    ax[0][0].set_title('ACF(white_noise)')
    plot_pacf(white_noise, ax=ax[0][1])
    ax[0][1].set_title('PACF(white_noise)')
    
    plot_acf(random_walk, ax=ax[1][0])
    ax[1][0].set_title('ACF(random_walk)')
    plot_pacf(random_walk, ax=ax[1][1])
    ax[1][1].set_title('PACF(random_walk)')
    
    plot_acf(gdp, ax=ax[2][0])
    ax[2][0].set_title('ACF(gdp)')
    plot_pacf(gdp, ax=ax[2][1])
    ax[2][1].set_title('PACF(gdp)')
    
    plot_acf(gdp_diff, ax=ax[3][0])
    ax[3][0].set_title('ACF(gdp_diff)')
    plot_pacf(gdp_diff, ax=ax[3][1])
    ax[3][1].set_title('PACF(gdp_diff)')
    
    plt.show()

    d4f0071bd00e42c27d77f5f191eebfa4.png(1) 白噪声的自相关系数很快就衰减到0附近,是明显的平稳序列。滞后期为0时自相关系数和偏自相关系数其实就是序列自己和自己的相关性,故为1;滞后期为1时,自相关系数为0,表示白噪声无自相关性。
    (2) 随机游走,自相关系数下降非常缓慢,故为非平稳序列;另从偏自相关系数中可以看到随机游走只和前一项有关。
    (3) GDP数据的自相关图中也可以看到存在一定的周期性,滞后4、8、12等自相关系数较大下降较慢,差分后下降多一些起到一定效果,认为差分后序列是平稳的。同可视化数据一样,直观判断带有较强主观性,但能让我们对数据有更直观的认识。

    二、简单统计方法

    计算统计量的方法只是作为一个补充,了解即可。宽平稳中有两个条件是均值不变和方差不变,可视化数据中我们可以直观看出来,其实还可以具体计算一下看看。

    很有意思的逻辑,直接将序列前后拆分成2个序列,分别计算这2个序列的均值、方差,对比看是否差异明显。(其实很多时序异常检验也是基于这种思想,前后分布一致则无异常,否则存在异常或突变)

    我们来算白噪声和随机游走序列不同时间段的均值、方差:

    import numpy as np
    
    np.random.seed(123)
    
    white_noise = np.random.standard_normal(size=1000)
    
    x = np.random.standard_normal(size=1000)
    random_walk = np.cumsum(x)
    
    def describe(X):
        split = int(len(X) / 2)
        X1, X2 = X[0:split], X[split:]
        mean1, mean2 = X1.mean(), X2.mean()
        var1, var2 = X1.var(), X2.var()
        print('mean1=%f, mean2=%f' % (mean1, mean2))
        print('variance1=%f, variance2=%f' % (var1, var2))
    
    print('white noise sample')
    describe(white_noise)
    
    print('random walk sample')
    describe(random_walk)

    white noise sample:
    mean1=-0.038644, mean2=-0.040484
    variance1=1.006416, variance2=0.996734

    random walk sample:
    mean1=5.506570, mean2=8.490356
    variance1=53.911003, variance2=126.866920

    白噪声序列均值和方差略有不同,但大致在同一水平线上;
    随机游走序列的均值和方差差异就比较大,因此为非平稳序列。

    三、假设检验方法

    平稳性的假设检验方法当前主流为单位根检验,检验序列中是否存在单位根,若存在,则为非平稳序列,不存在则为平稳序列。

    在介绍检验方法之前,有必要了解一些相关补充知识,这样对后面的检验方法理解上就会更清晰一些。

    预备知识

    确定趋势

    如果时间序列有“确定趋势”,比如

    其中, 即为确定趋势。

    期望中有时间变量,随时间变化,所以不是平稳时间序列。

    含有确定趋势的序列的差分过程是过度差分:

    过度差分不但会使序列样本容量减少,还会使序列的方差变大。差分后的序列会存在自相关性,但这种自相关性是毫无意义的。

    所以应该使用“退势”的方法获得平稳序列,如下:
    但是 如何确定,趋势拟合。消除序列中的时间趋势后,即为平稳序列,所以称这样的序列为“趋势平稳”序列或“退势平稳”序列。

    随机趋势

    另一种导致时间序列非平稳的因素为“随机趋势”。比如随机游走模型:
    ,其中 为白噪声

    来自 的任何波动对 都具有永久性的冲击,最主要的是其影响力不随时间而衰减,称 为这个模型的“随机趋势”。


    带漂移项的随机游走模型:
    , 其中 为常数
       

    除持续受到来自随机趋势 的影响外,还受一个常数项 的影响。


    以上对随机游走或带漂移项的随机游走进行一阶差分,均可消除随机趋势的影响,得到一个平稳序列,故称“差分平稳”序列。

    d阶单整

    称平稳的时间序列为“零阶单整”(Integrated of order zero),记为 。
    如果时间序列的一阶差分是平稳的,则称为“一阶单整”(Integrated of order one),记为 ,也称为“单位根过程”(unit root process)。

    更一般地,如果时间序列的 阶差分为平稳过程,则称为“d阶单整”(Integrated of order d),记为 。

    什么是单位根

    考虑如下基础模型:
    ,其中 为白噪声
    和随机游走模型很像,只不过多了个系数 。

    我们知道随机游走是非平稳的,但是当 时,这个序列就变成平稳的了。

    当 时,随着 的增大, 最终会收敛,长期来看 是平稳的。
    当 时, 为无规律非平稳的随机游走过程;
    当 时, 为爆炸式增长的非平稳过程。

    等于1时 就是我们所说的单位根。

    画图对比以下可能会更清晰一些

    import numpy as np
    from matplotlib import pyplot as plt
    
    np.random.seed(123)
    
    def simulate(beta):
        y = np.random.standard_normal(size=1000)
        for i in range(1, len(y)):
            y[i] = beta * y[i - 1] + y[i]
        return y
    
    plt.figure(figsize=(20, 4))
    for i, beta in enumerate([0.9, 1.0, 1.1]):
        plt.subplot(1, 3, i+1)
        plt.plot(simulate(beta))
        plt.title('beta: {}'.format(beta))
    plt.show()
    a8db9048eee29a99426d79cb7fefcc92.png

    一阶差分方程
           
                   
                           
    为一阶随机差分方程(因为含有随机项)
    无随机项为确定性差分方程(但非齐次,因为含常数项 )
    为对应的齐次差分方程

    根据差分方程理论, 的稳定性和 的稳定性是一样的,而 是否稳定取决于 是否稳定,所以判断一个差分方程是否稳定,只要看它对应的齐次差分方程是否有稳定的通解即可。

    以上齐次差分方程对应的特征方程为:, 称为差分方程的特征根。

    只有 ,即特征方程的根落在复平面的单位圆以内的时候,过程才会平稳。若果根正好落在圆上,称为单位根,为非平稳过程,比如随机游走的情形。如果落在圆外,则为爆炸式增长的非平稳过程。

    差分方程写成滞后算子的形式是这样的
    , 为滞后算子

    对应特征方程(逆特征方程)为:
    , 称为自回归滞后算子多项式的特征根。

    显然,差分方程的特征值λ与自回归滞后算子多项式的特征根z是互为倒数。
    均小于1(特征方程的根都在单位圆内)时是平稳的,对应的 均大于1(逆特征方程的根都在圆外)时是平稳的。

    更一般的n阶差分方程

    对应的齐次差分方程为:


    该齐次差分方程的特征方程为:

    根均在单位圆内是平稳的。

    滞后算子形式(逆特征方程)为:

    根均在单位圆外是平稳的。

    一般直接计算高阶差分方程的根比较复杂,有些简单规则可以用来检验高阶差分方程的稳定性。

    n阶差分方程中,所有特征根均位于单位圆内的充分条件为:

    n阶差分方程中,所有特征根均位于单位圆内的必要条件为:

    如果 ,至少有一个特征根等于1。

    一个或多个特征根等于1的时间序列,称为单位根过程

    单位根(unit root)检验就是检验该差分方程的特征方程(characteristic equation)的各个特征根(characteristic root)是均小于1,还是存在等于1的情况。没有检验均大于1的情况,是因为当根均大于1时为爆炸型发散序列,日常数据中基本不存在。


    检验方法

    DF检验

    ADF检验(Augmented Dickey-Fuller Testing)是最常用的单位根检验方法之一,通过检验序列是否存在单位根来判断序列是否是平稳的。ADF检验是DF检验的增强版,在介绍ADF之前,我们先来看一下DF检验。

    迪基(Dickey)和弗勒(Fuller)1979年基于非平稳序列的基本特征将其大致归为三类并提出DF检验:

    (1) 当序列基本走势呈现无规则上升或下降并反复时,将其归为无漂移项自回归过程;
    (2) 当序列基本走势呈现明显的随时间递增或递减且趋势并不太陡峭时,将其归为带漂移项自回归过程;
    (3) 当序列基本走势随时间快速递增时,则将其归为带趋势项回归过程。

    对应检验回归式为:
    (i) 无漂移项自回归过程:
    (ii) 带漂移项自回归过程:
    (iii) 带漂移项和趋势项自回归过程:
    其中 是常数项, 是时间趋势项, 为白噪声无自相关性。

    • 原假设 (存在单位根,时间序列是非平稳的)

    • 备择假设 (不存在单位根,时间序列是平稳的--不含截距项和趋势项平稳/含截距项平稳/含截距项和趋势平稳)

    若检验统计量大于临界值(p值大于显著性水平 ),不能拒绝原假设,序列是非平稳的;
    若检验统计量小于临界值(p值小于显著性水平 ),拒绝原假设,认为序列是平稳的。

    下图是网络中看到的单位根检验流程图以供参考(根据该流程可以确定序列是何种类型下的平稳,即便非平稳也可知道是何种类型下的非平稳序列):

    7707b470f0a2e00ea8d52746de433eb9.png
    单位根检验流程

    ADF检验

    DF的检验公式为一阶自回归过程,为了能适用于高阶自回归过程的平稳性检验,迪基等1984年对DF检验进行了一定的修正,引入了更高阶的滞后项,ADF的检验回归式修正为:

    4d7110e1ef3840f03a3990a0ad25da3f.png

    假设条件不变:

    • 原假设 (存在单位根,时间序列是非平稳的)

    • 备择假设 (不存在单位根,时间序列是平稳的--不含截距项和趋势项平稳/含截距项平稳/含截距项和趋势平稳)

    检验流程同DF检验一致。若要严格判断序列是否是宽平稳的,可以直接检验是否不含截距项和趋势项平稳;若不能拒绝原假设(如p>0.05),序列非平稳,其实仍有必要检验序列是否是趋势平稳的。非平稳且非趋势平稳,可以使用一阶差分等平稳化方法处理后再做检验,若是趋势平稳,困于过度差分则不宜使用差分方式平稳化。

    生成一个趋势平稳序列:

    import numpy as np
    from matplotlib import pyplot as plt
    
    np.random.seed(123)
    
    y = np.random.standard_normal(size=100)
    for i in range(1, len(y)):
        y[i] = 1 + 0.1*i + y[i]
    
    plt.figure(figsize=(12, 6))
    plt.plot(y)
    plt.show()
    1feb9a67fa36c253ea1aca92de82ba8f.png

    检验是否平稳:

    from arch.unitroot import ADF
    adf = ADF(y)
    # print(adf.pvalue)
    print(adf.summary().as_text())
    
    adf = ADF(y)
    adf.trend = 'ct'
    print(adf.summary().as_text())
    e0fe403a1eafeb0f01e9d0827a89df37.png

    说明:
    arch包中ADF检验可指定trend为
    'n'(不含截距项和时间趋势项)
    'c'(含截距项)
    'ct'(含截距项和时间趋势项)
    'ctt'(含截距项和时间趋势项和二次型时间趋势项)
    分别对应不同平稳类型的检验。(滞后期lags默认为AIC最小)

    以上第一个文本输出中,不指定trend默认为检验是否含截距项平稳,显著性水平p=0.836>0.05,不拒绝原假设,非平稳;
    以上第二个文本输出中,指定trend为检验是否含截距项和时间趋势项平稳,显著性水平p=0.000<0.05,拒绝原假设,故为趋势项平稳。

    我们再来看看GDP季节差分前后数据是否为平稳的:

    # 数据在第一个代码块中
    from arch.unitroot import ADF
    adf = ADF(gdp)
    print(adf.summary().as_text())
    
    adf = ADF(gdp_diff)
    print(adf.summary().as_text())
    4bf5d28a54558464b8be8bb401120c3a.png

    可以看到差分前p值为0.998>0.05,不能拒绝原假设,数据非平稳;差分后p值为0.003<0.05,故在5%的显著性水平下可拒绝原假设,差分后的数据是平稳的。

    # 数据在第一个代码块中
    from arch.unitroot import ADF
    adf = ADF(gdp)
    adf.trend = 'ct'
    print(adf.summary().as_text())
    5b6224abd81d385f6610c11df2cf8687.png

    指定检验平稳类型为含截距项和时间趋势项平稳,p值为0.693>0.05,同样不能拒绝原假设,故差分前亦非趋势平稳。

    PP检验

    Phillips和Perron(1988) 提出一种非参数检验方法,主要是为了解决残差项中潜在的序列相关和异方差问题,其检验统计量的渐进分布和临界值与 ADF检验相同。同样出现较早,假设条件一样,用法相似,可作为ADF检验的补充。

    • 原假设 (存在单位根,时间序列是非平稳的)

    • 备择假设 (不存在单位根,时间序列是平稳的--不含截距项和趋势项平稳/含截距项平稳/含截距项和趋势平稳)

    同样构造一个趋势平稳序列,看下PP检验结果:

    import numpy as np
    from arch.unitroot import PhillipsPerron
    
    np.random.seed(123)
    
    y = np.random.standard_normal(size=100)
    for i in range(1, len(y)):
        y[i] = 1 + 0.1*i + y[i]
    
    
    pp = PhillipsPerron(y)
    print(pp.summary().as_text())
    
    pp = PhillipsPerron(y)
    pp.trend = 'ct'
    print(pp.summary().as_text())
    a59c685ec1673479787f66c1b3a4a5c6.png

    不指定trend为默认检验是否为带截距项的平稳过程,检验结果p值为0.055>0.05,对应检验统计量为-2.825大于5%显著性水平下的临界值-2.89,所以5%显著性水平下不拒绝原假设,为非平稳序列;但是检验统计量小于10%显著性水平下的临界值-2.58,故在10%的显著性水平下可拒绝原假设,认为是平稳序列。

    指定trend=‘ct’为检验是否为带截距项和时间趋势项的平稳过程,检验结果p值为0.000<0.05,故为趋势平稳;其实检验统计量为-10.009小于1%显著性水平下的临界值-4.05,所以即便在1%显著性水平下也是平稳的。

    基于以上检验结果,可以判定序列是趋势平稳的。

    DF-GLS检验

    DF-GLS检验,是Elliott, Rothenberg, and  Stock 1996年提出的一种单位根检验方法,全称Dickey-Fuller Test with GLS Detredding,即“使用广义最小二乘法去除趋势的检验”,是目前最有功效的单位根检验。

    DF-GLS检验利用广义最小二乘法,首先对要检验的数据进行一次“准差分”,然后利用准差分的数据对原序列进行去除趋势处理,再利用ADF检验的模型形式对去除趋势后的数据进行单位根检验,但此时ADF检验模型中不再包含常数项或者时间趋势变量。

    • 原假设:序列存在单位根(时间序列是非平稳的)

    • 备择假设:序列不存在单位根(时间序列是平稳的或趋势平稳的)

    同样构造一个趋势平稳序列看下检验效果:

    import numpy as np
    from arch.unitroot import DFGLS
    
    np.random.seed(123)
    
    y = np.random.standard_normal(size=100)
    for i in range(1, len(y)):
        y[i] = 1 + 0.1*i + y[i]
    
    dfgls = DFGLS(y)
    print(dfgls.summary().as_text())
    
    dfgls = DFGLS(y)
    dfgls.trend = 'ct'
    print(dfgls.summary().as_text())
    0c18259430078fb6620dc482b1c44de9.png

    不指定trend情况下不能拒绝原假设,非平稳;指定trend='ct'时p值小于0.05,拒绝原假设,带截距项和时间趋势平稳。

    再来构造一个含单位根的非平稳序列看一下检验结果:

    import numpy as np
    from arch.unitroot import DFGLS
    
    np.random.seed(123)
    
    y = np.random.standard_normal(size=100)
    for i in range(1, len(y)):
        y[i] = 0.1 + y[i-1] + y[i]
    
    dfgls = DFGLS(y)
    print(dfgls.summary().as_text())
    
    dfgls = DFGLS(y)
    dfgls.trend = 'ct'
    print(dfgls.summary().as_text())
    ec564777ec21f9f5688407b27a1ef119.png

    p值一个为0.645,一个为0.347,均大于0.05/0.1。指不指定检验类型,均未能通过检验,故该序列为非平稳序列。(DF-GLS检验trend只能指定为'c'或者'ct')

    KPSS检验

    另一个著名的单位根存在的检验是Kwiatkowski, Phillips, and Shin 1992年提出的KPSS检验。与以上三种检验方法相比,最大的不同点就是它的原假设是平稳序列或趋势平稳序列,而备择假设是存在单位根。

    • 原假设:序列不存在单位根(时间序列是平稳的或趋势平稳的)

    • 备择假设:序列存在单位根(时间序列是非平稳的)

    import numpy as np
    from arch.unitroot import KPSS
    
    np.random.seed(123)
    
    y = np.random.standard_normal(size=100)
    for i in range(1, len(y)):
        y[i] = 0.1 + y[i-1] + y[i]
    
    kpss = KPSS(y)
    print(kpss.summary().as_text())
    
    kpss = KPSS(y)
    kpss.trend = 'ct'
    print(kpss.summary().as_text())
    cbcfcc1506cf79f244a94b7a33c22b47.png

    注意KPSS检验中原假设为不存在单位根。默认检验趋势类型下p值为0.000,拒绝原假设,存在单位根,序列非平稳。指定trend='ct'后,p值0.115>0.05,不拒绝原假设,认为序列趋势平稳,检验错误。以上几种检验中均不能100%保证检验正确,PP检验可认为是ADF检验的补充,KPSS检验同样也可和其他检验一同使用,当均认为是平稳或趋势平稳时方判定为平稳。

    除以上检验方法外,还有Zivot-Andrews检验、Variance Ratio检验等检验方法。

    以上代码实现中使用的是Python中的arch包,另外还有一个常用的包statsmodels中也实现了单位根检验方法,结果是一样的。

    Method/ModelPackage/Module (function/class)
    Augmented Dickey-Fuller teststatsmodels.tsa.stattools (adfuller)
    arch.unitroot (ADF)
    Phillip-Perron testarch.unitroot (PhillipsPerron)
    Dickey-Fuller GLS Testarch.unitroot (DFGLS)
    KPSS teststatsmodels.tsa.stattools (kpss)
    arch.unitroot (KPSS)
    Zivot-Andrew teststatsmodels.tsa.stattools (zivot_andrews)
    arch.unitroot (ZivotAndrews)
    Variance Ratio testarch.unitroot (VarianceRatio)

    参考链接
    [1]  http://course.sdu.edu.cn/G2S/eWebEditor/uploadfile/20140525165255371.pdf
    [2]  https://max.book118.com/html/2016/0518/43276093.shtm
    [3]  https://doc.mbalib.com/view/ef1783f2fa1892f6ad016281ed743d78.html
    [4]  https://www.stata.com/manuals13/tsdfgls.pdf
    [5]  https://zhuanlan.zhihu.com/p/50553021
    [6]  https://arch.readthedocs.io/en/latest/index.html

    转自:TimeSeries 公众号;

    END


    版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。


    合作请加QQ:365242293  

    数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

    a3f990b5a33d88b48d15f6614f0c6591.png

    展开全文
  • 数据挖掘——时间序列算法之平稳性检验平稳时间序列定义时间序列平稳性检验针对平稳和不![在这里插入图片描述](https://img-blog.csdnimg.cn/20200416154317496.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5...

    平稳时间序列定义

    对于随机变量X,可以计算其均值 μ \mu μ、方差 σ 2 \sigma^{2} σ2;对于两个随机变量X和Y。可以计算X,Y的协方差 c o v ( X , Y ) = E [ ( X − μ X ) ( Y − μ Y ) ] cov(X,Y)=E[(X-\mu_{X})(Y-\mu_{Y})] cov(X,Y)=E[(XμX)(YμY)]和相关系数 ρ ( X , Y ) = c o v ( X , Y ) σ X σ Y \rho(X,Y)=\frac{cov(X,Y)}{\sigma_{X}\sigma_{Y}} ρ(X,Y)=σXσYcov(X,Y),他们度量了两个不同时间之间的相互影响程度。

    对于时间序列 X t , t ∈ T {X_{t},t\in T} Xt,tT,任意时刻的序列值 X t X_{t} Xt都是一个随机变量,每一个随机变量都会有均值和方差,记 X t X_{t} Xt的均值为 μ t \mu_{t} μt,方差为 σ t \sigma_{t} σt;任取 t , s ∈ T t,s \in T t,sT,定义序列 X t X_{t} Xt的自协方差函数 γ ( t , s ) = E [ ( X t − μ t ) ( X s − μ s ) ] \gamma(t,s)=E[(X_{t}-\mu_{t})(X_{s}-\mu_{s})] γ(t,s)=E[(Xtμt)(Xsμs)]和自相关系数 ρ ( t , s ) = c o n v ( X t , X s ) σ t σ s \rho(t,s)=\frac{conv(X_{t},X_{s})}{\sigma_{t} \sigma_{s}} ρ(t,s)=σtσsconv(Xt,Xs)。之所以称他们为自协方差函数和自相关系数,是因为他们衡量的是同一个事件在两个不同时期(时刻t和s)之间的相关程度,形象的讲就是度量自己过去的行为对自己现在的影响。

    由此得到平稳性检验的根本思想:如果时间序列 { X t , T ∈ T } \{X_{t},T \in T\} {Xt,TT}在某一常数附近波动且波动范围有限,即有常数方差,并且延迟k期的序列变量的自协方差和自相关系数是相等的或者说延迟k期的序列变量之间的影响程度是一样的,则称 { X t , t ∈ T } \{X_{t},t\in T\} {Xt,tT}为平稳序列。

    时间序列平稳性检验

    在这里插入图片描述
    但是图检验方法的主观臆断成分大,目前常用的是单位根检验。

    针对平稳和不平稳序列,目前的主要算法

    在这里插入图片描述

    展开全文
  • Python量化基础:时间序列的平稳性检验

    万次阅读 多人点赞 2019-01-31 16:06:43
    时间序列数据平稳性对于我们采用什么样的分析方式、选择什么样的模型有着至关重要的影响。 我们想一下,假如一个时间序列的波动趋势从来没有稳定过,那么它每个时期的波动对于之后一段时期的影响都是无法预测的,...
  • matlab平稳性检验

    千次阅读 2018-09-11 17:52:06
    matlab有平稳检验的函数。函数说明如下: dfARDTest Augmented Dickey-Fuller unit root   test for AR model with drift  dfARTest ...
  • 检查序列平稳性可以看序列自相关图或者用单位根检验,但是一般都用单位根检验,而单位根检验用的最多就是ADF检验。 操作 打开序列,查看序列是否存在时间趋势或者截距项(之后会用到,先记住结果): 查看 其中:...
  • 2.1 平稳性检验 一 、概率分布与特征统计量 Xt,t=1,2,⋅⋅⋅,tX_t,t=1,2,···,tXt​,t=1,2,⋅⋅⋅,t 在描述一个随机变量时是用 分布函数F(x)F(x)F(x) 特征统计量: 期望E(Xt)E(X_t)E(Xt​),方差D(Xt)D(X_t...
  • 时间序列的平稳性检验与随机性检验

    万次阅读 多人点赞 2019-04-05 14:42:56
        对于一个时间序列,在进行建模之前,首先需要进行平稳性检验和纯随机性检验,然后根据检验的结果再选择适合的模型。在讲解平稳性和随机性的定义之前,我们先介绍一下时间序列中常用的几个特征统计量。 2.1...
  • 数学建模数据分析——趋势性检验和平稳性检验 在数学建模比赛中,经常需要对数据进行分析和预处理,常见的比如趋势分析(上升/下降/无明显趋势)和突变分析,很多时候靠人的经验观察得出结论,但这是不够严谨的。...
  • 用 Python 检验时间序列的平稳性

    千次阅读 多人点赞 2020-10-27 08:40:00
    在做时间序列分析时,我们经常要对时间序列进行平稳性检验,而我们常用的软件是SPSS或SAS,但实际上python也可以用来做平稳性检验,而且效果也非常好,今天笔者就讲解一下如何用pyth...
  • 基于替代数据方法的信号平稳性检验,纪冠群,李明,在对信号进行处理时,确定信号是否平稳是处理信号的前提。因此,信号的平稳性检测在信号处理中有着十分重要的作用。本文通过对原
  • 平稳性检验(描述性)与纯随机性检验

    万次阅读 多人点赞 2019-04-19 11:46:41
    本章主要介绍进行时序分析前的预处理,即平稳性检验与纯随机性检验。 平稳性检验(描述性) 平稳性检验的方法分为描述性方法与计量性方法。前者主要指时序图检验、ACF 图检验,后者主要指 DF 检验、ADF 检验与PP...
  •  信号的平稳性检验在随机信号处理中起着十分基础的作用。由于平稳信号和非平稳信号的性质差别显着,因此在处理信号之前先行判断它的平稳性就显得尤为重要。虽然信号平稳性的定义十分明确,但是实际判断过程却是复杂...
  • matlab稳定性检验代码有用的Matlab代码 我编写了一些有用的计量经济学例程。 BSD许可证。 最小二乘 适用于MATLAB的简单OLS。 矩阵进,矩阵出。 斜率估计,标准误差,t检验,R2等(带矩阵输入)。 Cluster_twoway.m ...
  • 平稳性检验

    2021-03-22 17:07:21
    import statsmodels.tsa.stattools as stat for i in range(len(dfx.columns)): # print(dfx.columns[i]) pvalues=stat.adfuller(dfx.values[:,i],1)[1] if pvalues>0.01: print(dfx.columns[i],pvalues) ...
  • 海水位数据平稳性检验,王安琪,李明,本文以佛罗里达州和墨西哥东湾其中5个站点一年中的海水位数据作为研究对象,对海水位数据的平稳性进行了检验分析。经研究发现,��
  • 我们所感兴趣的是 系数矩阵它可以...对变量之间协整关系的检验可以通过计算 系数矩阵的秩及特征值来判断将 系数矩阵的特征值按照从大到小的顺序排列即 如果变量间不存在协整关系即长期关系则的秩就为零 * 精品PPT可编
  • R语言——单位根检验/平稳性检验

    千次阅读 2021-04-30 11:24:19
    这里RM1是指货币供应量的同比增长率,想要检验RM1的平稳性。 先安装程序包tseries: 调用tseries: 进行单位根检验: P值为0.2843,大于0.05,不能拒绝原假设,认为RM1存在单位根,即不平稳。 这里的x[,2]...
  • 使用Python对数据处理,主要是在平稳性检验中,使用的是逆序检验法
  • 用于检验序列平稳性 H0:时间序列可以表示成单位根过程,即非平稳 H1:时间序列是平稳的 from statsmodels.tsa.stattools import adfuller import numpy as np import matplotlib.pyplot as plt x=[np.random.randn...
  • 时间序列的平稳性检验方法汇总。主要检验方法为:DF检验、ADF检验、PP检验、DF-GLS检验、KPSS检验等,含代码示例,并增加了预备知识:时间序列的确定趋势、随机趋势、d阶单整及单位根概念的解释。
  • 时间序列平稳性检验—R语言KPSS检验

    千次阅读 2019-12-04 10:07:56
    对于一个时间序列,例如用R自带的google股价变化数据goog(可以通过导入fpp2包之后直接使用goog这个数组变量,这里仅为示例,代指要检验的时间序列或者数组)。 1.1 对goog进行KPSS检验 R代码为 library(urca) summary...
  • arima代码具体实现 包括平稳性检验 差分 以及预测 数据不在压缩包中 使用者可根据自身情况使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,405
精华内容 2,162
关键字:

数据平稳性检验