精华内容
下载资源
问答
  • 1、序列的均值(mean)不应该时间的函数(意思不应该随时间变化),而应该一个常数。下面的左图满足这个条件,而右图的均值受时间的变化影响。 2、序列方差(variance)不应该时间的函数。这种特性称为...

    上篇文章简单提到了应该用平稳时间序列做预测,本文将介绍具体概念和原因。

    Stationary Series 平稳序列

    平稳序列有三个基本标准:

    1、序列的均值(mean)不应该是时间的函数(意思是不应该随时间变化),而应该是一个常数。下面的左图满足这个条件,而右图的均值受时间的变化影响。

    2、序列的方差(variance)不应该是时间的函数。这种特性称为homoscedasticity(同方差性)。下图描绘了平稳序列和非平稳序列,注意右图分布的不同变化范围。

    3、t时间段的序列和前一个时间段的序列的协方差(协方差,衡量的是两个变量在一段时间内同向变化的程度)应该只和时间间隔有关,而与时间t无关,在时间序列中,因为是同一个变量在不同时间段的值序列,所以这里的协方差称为自协方差。右图随着时间的增加,有一段变得越来越紧密了。所以右图的序列的协方差不是常数。

    带有趋势和季节性成分的时间序列都是非平稳的,下图给出了更多的区分平稳性的例子:

    为什么要关注序列的平稳性?

    大多数的统计预测方法都是以平稳时间序列为假设前提来设计的。
    比如,对于时间序列自回归预测来说,我们的假设是变量的历史和现状呈现出的基本特性,在未来阶段的一个长时期里会维持不变,而这里的基本特性一般就是用上面提到的均值、方差、自协方差来表示。
    更具体的说,自回归预测模型本质是'利用序列的滞后阶数(lags)作为自变量'的线性回归模型,比如lags=2表示使用变量的t-1和t-2时刻的值作为自变量来预测t时刻的值。那么通过在历史序列上训练模型后,得到的这个线性回归模型的各自变量的系数就代表了各滞后时刻的值与下一时刻值的相关性,如果时间序列接近平稳,这些相关性在未来一段时间内都不会有大的变化,那么预测未来就成为了可能。
    所以,相对非平稳序列的预测,平稳序列的预测更简单和可靠。

    非平稳序列如何做预测?

    对于非平稳时间序列的预测,我们需要先将其转换为平稳时间序列,方法包括:

    • 差分(一阶或n阶)
    • 取log
    • 开根号
    • 时间序列分解
    • 综合使用上面的方法

    一般来说,做个一阶差分,就可以得到接近平稳的时间序列了,如果方差随时间变化较大,那么先取log再做一阶差分就可以了。

    什么是差分?

    比如有一个序列:[1,5,2,12,20]
    一阶差分,得到:[5-1, 2-5, 12-2, 20-12] = [4, -3, 10, 8]
    二阶差分(即在一阶差分之后,再做一次差分),得到:[-3-4, -10-3, 8-10] = [-7, -13, -2]

    如何测试序列的平稳性?

    对于判断时间序列是否平稳,可以通过肉眼观测时间序列图,就类似上面提到的平稳性的3个基本标准,或者
    将时间序列分成多个连续的部分,计算各部分的均值、方差和自相关性(或协方差),如果结果相差很大,那么序列就不平稳。但是这些方法都不能量化平稳性,也就是用一个数值来表示出时间序列的平稳性。为此,我们可以使用‘Unit Root Tests’即单位根检验,该方法的思想是如果时间序列有单位根,则就是非平稳的。

    以下是常用的两个基于单位根检验思想的实现:

    • Augmented Dickey Fuller test (ADF Test)
      零假设为序列有单位根,是非平稳的,P-Value如果小于显著级别(0.05),则可以拒绝零假设。
    • Kwiatkowski-Phillips-Schmidt-Shin – KPSS test (trend stationary)
      与ADF正好相反,零假设为序列是平稳的。另外,在python中,可以通过指定regression='ct'参数来让kps把“确定性趋势(deterministic trend)”的序列认为是平稳的。所谓确定性趋势的序列就是斜率始终保持不变的序列,比如下面这样的:

    下面是对应的python代码:

    from statsmodels.tsa.stattools import adfuller, kpss
    df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv', parse_dates=['date'])
    
    # ADF Test
    result = adfuller(df.value.values, autolag='AIC')
    print(f'ADF Statistic: {result[0]}')
    print(f'p-value: {result[1]}')
    for key, value in result[4].items():
        print('Critial Values:')
        print(f'   {key}, {value}')
    
    # KPSS Test
    result = kpss(df.value.values, regression='c')
    print('\nKPSS Statistic: %f' % result[0])
    print('p-value: %f' % result[1])
    for key, value in result[3].items():
        print('Critial Values:')
        print(f'   {key}, {value}')
    

    输出:

    ADF Statistic: 3.14518568930674
    p-value: 1.0
    Critial Values:
       1%, -3.465620397124192
       Critial Values:
       5%, -2.8770397560752436
       Critial Values:
       10%, -2.5750324547306476
    
    KPSS Statistic: 1.313675
    p-value: 0.010000
    Critial Values:
       10%, 0.347
       Critial Values:
       5%, 0.463
       Critial Values:
       2.5%, 0.574
       Critial Values:
       1%, 0.739
    

    白噪声和平稳序列的区别

    白噪声的遵循均值为0的随机分布,没有丝毫的模式可言。用python制造一个白噪声序列,并可视化如下:

    randvals = np.random.randn(1000)
    pd.Series(randvals).plot(title='Random White Noise', color='k')
    

    去除趋势

    • 减去最佳拟合线
    • 减去均值线,或者移动平均线
    • 减去/除以 利用时间序列分解出的趋势序列

    去除季节性

    • 季节性窗口内的移动平均法,平滑季节性
    • 季节性差分,就是用当前值减去一个季节窗口之前对应的时刻的值
    • 减去/除以 利用时间序列分解出的季节性序列

    如何判断序列是否有季节性?

    • 通过肉眼看图
    • 通过自相关函数判断
    from pandas.plotting import autocorrelation_plot
    df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv')
    
    # Draw Plot
    plt.rcParams.update({'figure.figsize':(9,5), 'figure.dpi':120})
    autocorrelation_plot(df.value.tolist())
    

    • 通过时间序列分解出的季节性序列来计算,其思想是越没有季节性,那么Rt的方差和Rt+St的方差越应该区别不大,反之,这个方差的比值越应该小于1,公式如下:

      Fs越接近0,越没有季节性,越接近1,季节性越强。

    ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。

    展开全文
  • 对于平稳声序列, 它的均值和方差是常数, 现已有一套非常成熟的平稳序列的建模方法。 通常是建立一个线性模型来拟合该序列的发展 借此提取该序列的有用信息。 对于非平稳序列, 由于它的均值和方差不稳定, 处理

    时间序列系列文章:

    时间序列(一):时间序列数据与时间序列预测模型
    时间序列(二):时间序列平稳性检测
    时间序列(三):ARIMA模型实战

    在上一篇文章时间序列(一):时间序列数据与时间序列预测模型中我们介绍了时间序列及一些时间序列预测模型。我们可以看到在进行预测时有一些模型表现较好,而另一些模型的预测结果却不尽人意。这是因为不同的时间序列模型对原始数据的要求是不同的,例如之前提到的ARIMA模型,要求时间序列数据平稳,否则得出的预测结果就会相差较大。本篇文章我们介绍时间序列的平稳性、随机性检验及相关时间序列数据处理方法。

    时间序列的平稳性、随机性检验

    在拿到时间序列数据后,首先要对数据的随机性和平稳性进行检测, 这两个检测是时间序列预测的重要部分。根据不同检测结果需要采取不同的分析方法。

    为什么时间序列要求平稳性呢?平稳性就是要求由样本拟合出的曲线在未来一段时间内仍然能够以现有的形态和趋势发展下去,这样预测结果才会有意义。

    对于平稳声序列, 它的均值和方差是常数, 现已有一套非常成熟的平稳序列的建模方法。 通常是建立一个线性模型来拟合该序列的发展 借此提取该序列的有用信息。

    对于非平稳序列, 由于它的均值和方差不稳定, 处理方法一般是将其转变为平稳序列,这样就可以应用有关平稳时间序列的分析方法, 如建立 ARIMA模型来进行相应的研究,或者分解趋势与季节性等并根据情况应用指数平滑模型等。

    对于纯随机序列, 又称为白噪声序列, 序列的各项之间没有任何相关关系, 序列在进行完全无序的随机波动, 可以终止对该序列的分析。 白噪声序列是没有信息可提取的平稳序列。

    在讲解平稳性和随机性的定义之前,我们先介绍一下时间序列中常用的几个特征统计量。

    时间序列的特征统计量

    对于一个时间序列任意时刻的序列值{Xt,tT}\left\{ X _ { t } , t \in T \right\},任意时刻的序列值 XtX _ { t }都是一个随机变量,记其分布函数为Ft(x)F _ { t } ( x ),则其特征统计量均值、方差、自协方差函数、自相关系数的定义分别如下:

    均值: 表示时间序列在各个时刻取值的平均值,其定义如下:
    μt=EXt=xdFt(x)\mu _ { t } = E X _ { t } = \int _ { - \infty } ^ { \infty } x \mathrm { d } F _ { t } ( x )

    方差: 表示时间序列在各个时刻围绕其均值波动的平均程度,其定义如下:
    σt2=DXt=E(Xtμt)2=(xμt)2dFt(x)\sigma _ { t } ^ { 2 } = D X _ { t } = E \left( X _ { t } - \mu _ { t } \right) ^ { 2 } = \int _ { - \infty } ^ { \infty } \left( x - \mu _ { t } \right) ^ { 2 } \mathrm { d } F _ { t } ( x )

    自协方差 : 表示时间序列任意两个时刻直接的相关性,任取t,sTt , s \in T,则其定义如下:
    γ(t,s)=E[(Xtμt)(Xsμs)]\gamma ( t , s ) = E \left[ \left( X _ { t } - \mu _ { t } \right) \left( X _ { s } - \mu _ { s } \right) \right]

    自相关系数: 同自协方差函数,其定义如下:

    ρ(t,s)=γ(t,s)DXtDXs\rho ( t , s ) = \frac { \gamma ( t , s ) } { \sqrt { D X _ { t } \cdot D X _ { s } } }

    平稳时间序列的定义与检验

    平稳时间序列的定义

    平稳时间序列按照限定条件的严格程度可以分为以下两种类型:

    严平稳时间序列: 指时间序列的所有统计性质不会随着时间的推移而发生变化,即其联合概率分布在任何时间间隔都是相同的。设{Xt}\left\{ X _ { t } \right\}为一时间序列,对任意的正整数mm,任取t1,t2,,tmTt _ { 1 } , t _ { 2 } , \cdots , t _ { m } \in T,对任意整数τ\tau,有:

    Ft1,t2,,tm(x1,x2,,xm)=Ft1+τ,t2+τ,,tm+τ(x1,x2,,xm)F _ { t _ { 1 } , t _ { 2 } , \cdots , t _ { m } } \left( x _ { 1 } , x _ { 2 } , \cdots , x _ { m } \right) = F _ { t _ { 1 + \tau } , t _ { 2 + \tau } , \cdots , t _ { m + \tau } } \left( x _ { 1 } , x _ { 2 } , \cdots , x _ { m } \right)

    则称时间序列{Xt}\left\{ X _ { t } \right\}为严平稳时间序列。

    宽平稳时间序列: 宽平稳时间序列则认为只要时间序列的低阶距(二阶)平稳,则该时间序列近似平稳。如果时间序列{Xt}\left\{ X _ { t } \right\}满足以下三个条件:

    • 任取tTt \in T,有 EXt2<EX _ { t }^ { 2 } <∞
    • 任取tTt \in T,有EXt=μE X _ { t } = \mu,其中μ\mu为常数;
    • 任取t,s,kTt , s , k \in T, k+stTk + s - t \in T,有γ(t,s)=γ(k,k+st)\gamma ( t , s ) = \gamma ( k , k + s - t )

    在现实生活中,时间序列是很难满足严平稳时间序列的要求的,因此,一般所讲的平稳时间序列在默认情况下都是指宽平稳时间序列。根据宽平稳时间序列的条件,我们可以容易得到宽平稳时间序列所具有的性质:

    • 均值为常数,即:EXt=μ,tTE X _ { t } = \mu , \quad \forall t \in T
    • 方差也为均值,即:DXt=γ(t,t)=γ(0),tTD X _ { t } = \gamma ( t , t ) = \gamma ( 0 ) , \quad \forall t \in T
    • 自协方差函数和自相关系数只依赖于时间的平移长度,而与时间的起点无关。即:γ(t,s)=γ(k,k+st),t,s,kT\gamma ( t , s ) = \gamma ( k , k + s - t ) , \quad \forall t , s , k \in T
      因此,可以记γ(k)\gamma ( k )为时间序列${ X _ { t } $的延迟k自协方差函数。

    由于平稳时间序列具有这些优良性质,因此,对于一个平稳时间序列来说,其待估计的参数量就变得少了很多,因为他们的均值、方差都是一样的,因此,可以利用全部的样本来估计总体的均值和方差,即:
    μ^=x=i=1nxinγ^(0)=t=1n(xtx)2n1\widehat { \mu } = \overline { x } = \frac { \sum _ { i = 1 } ^ { n } x _ { i } } { n } \\ \widehat { \gamma } ( 0 ) = \frac { \sum _ { t = 1 } ^ { n } \left( x _ { t } - \overline { x } \right) ^ { 2 } } { n - 1 }
    这也是为什么说当拿到一个时间序列后,需要对其进行平稳性检验。

    平稳时间序列的检验

    那么,当拿到一个时间序列后,应该如何对其进行平稳性的检验呢?目前,对时间序列的平稳性检验主要有两种方法,一种是图检法,即根据时序图和自相关图进行直观判断,另一种是构造检验统计量的方法,有单位根检验法等方法。

    图检法

    对于图检法,我们一般绘制时间序列的时序图,考虑以下三个图形:

    在这里插入图片描述
    在第一幅图中,我们可以清楚地看到,均值随时间而变化(增加),呈现上升的趋势。因此,这是一个非平稳序列。平稳序列不应该呈现出随时间变化的趋势。

    第二幅图显然看不到序列的趋势,但序列的变化是一个时间的函数。正如前面提到的,平稳序列的方差必须是一个常数。

    再来看第三幅图,随着时间的增加,序列传播后变得更近,这意味着协方差是时间的函数。

    所以上述三个例子均是非平稳时间序列.

    再看下面的时序图:
    在这里插入图片描述
    在这张图中,均值、方差和协方差都是常数,这就是平稳时间序列

    另一方面,我们也可以通过自相关图来进行检验,对于平稳时间序列,其自相关图一般随着阶数的递增,自相关系统会迅速衰减至0附近,而非平稳时间序列则可能存在先减后增或者周期性波动等变动。如下图所示,该时间序列随着阶数的递增,自相关系数先减后增,因此,可以判断该时间序列不是平稳时间序列。
    在这里插入图片描述

    统计检验

    可以利用统计检验来代替目视检验:比如单位根平稳检验。单位根表名给定序列的统计特性(均值,方差和协方差)不是时间的常数,这是平稳时间序列的先决条件。下面是它的数学解释:

    假设我们有一个时间序列:
    yt=ayt1+εty_t=a*y_{t-1 }+ε_t
    其中yty_t是t时刻的数据值,εtε_t 是误差项。
    仙子我们需要利用yt1y_{t-1 }的值来计算yty_t,即:
    yt1=ayt2+εt1y_{t-1}=a*y_{t-2}+ε_{t-1}
    如果利用所有的观察值,yty_{t}的值将是:
    yt=anytn+εtiaiy_{t}=a^n*y_{t-n}+ \sumε_{t-i}*a^i

    假设在上述方程中a的值为1(单位),则预测值将等于ytny_{t-n} 和从tnt-ntt的所有误差之和,这意味着方差将随着时间的推移而增大,这就是时间序列中的单位根。众所周知,平稳时间序列的方差不能是时间的函数。单元根检验通过检查a=1的值来检查序列中是否存在单位根。以下是两个最常用的单位根平稳检测方法:

    ADF(增补迪基-福勒)检验

    迪基-福勒(Dickey Fuller)检验是最流行的统计检验方法之一,可以用它来确定序列中单位根的存在,从而帮助判断序列是否是平稳。ADF检验是对DF检验的扩展。这一检验的原假设与备选假设如下:

    • 原假设: 序列有一个单位根(序列非平稳)
    • 备选假设: 该序列没有单位根。(序列平稳)

    单位根是什么呢?当一个自回归过程中: yt=byt1+a+ϵty_{t} = by_{t-1} + a + \epsilon _{t},如果滞后项系数b为1,就称为单位根。当单位根存在时,自变量和因变量之间的关系具有欺骗性,因为残差序列的任何误差都不会随着样本量(即时期数)增大而衰减,也就是说模型中的残差的影响是永久的。这种回归又称作伪回归。如果单位根存在,这个过程就是一个随机漫步(random walk)。ADF检验就是判断序列是否存在单位根:如果序列平稳,就不存在单位根;否则,就会存在单位根.

    在Python中使用ADF检验可以在statsmodels中使用adfuller函数。在下面的代码中我们加上标题与输出值对应的名称:

    #定义ADF输出格式化函数
    from statsmodels.tsa.stattools import adfuller
    def adf_test(timeseries):
        print ('ADF检验结果:')
        dftest = adfuller(timeseries, autolag='AIC')
        dfoutput = pd.Series(dftest[0:4], index=['Test Statistic','p-value','Number of Lags Used','Number of Observations Used'])
        for key,value in dftest[4].items():
           dfoutput['Critical Value (%s)'%key] = value
        print (dfoutput)
    
    #对数据集使用ADF检验
    adf_test(train['#Passengers'])
    

    检验结果如下:

    ADF检验结果:
    Test Statistic                   0.815369
    p-value                          0.991880
    Number of Lags Used             13.000000
    Number of Observations Used    130.000000
    Critical Value (1%)             -3.481682
    Critical Value (5%)             -2.884042
    Critical Value (10%)            -2.578770
    dtype: float64
    

    ADF的结果主要看以下两个方面:

    • Test Statistic的值如果比Critical Value (5%)小则满足稳定性需求.
    • p-value越低(理论上需要低于0.05)证明序列越稳定。

    在上面的例子中,test statistic > Critical Value (5%) ,这意味着序列不是平稳的。同时p值为0.99,这证实了我们最初在目视检测中观察的结果。

    随机性(白噪声)的定义与检验

    随机性时间序列的定义

    通过对时间序列进行平稳性检验后,我们可以将时间序列分为平稳时间序列和非平稳时间序列,对于非平稳时间序列,一般需要将其转化为平稳时间序列再进行分析,具体的转化方法随后再讲。而对于平稳时间序列,我们知道其有一个性质,即自协方差函数和自相关系数只依赖于时间间隔,而与起点无关,对于相同的时间间隔,其自协方差函数和自相关系数为一个常数,那么,就存在一种情况,当该常数为0时,照样满足平稳时间序列的条件,而此时序列之间的相关性则为0,即序列之间不相关,那么,这时我们的分析即可结束,因为对于一个毫无相关的序列,我们没法从中挖掘出可用的规律,此时的序列即为随机性时间序列,也称为白噪声序列。
        
    对于时间序列XtX _ { t },如果满足:

    • 任取tTt \in T,有EXt=μE X _ { t } = \mu
    • 任取t,sTt , s \in T,有
      γ(t,s)=σ2;t=s0;ts\gamma ( t , s ) = \begin{array} { l l } { \sigma ^ { 2 }}; { t = s } \\ { 0 }; { t \neq s } \end{array}

    则称该时间序列为纯随机序列或白噪声序列,简记为XtWN(μ,σ2)X _ { t } \sim W N \left( \mu , \sigma ^ { 2 } \right)。我们可以发现,其实白噪声序列的性质与平稳时间序列的性质一样,其均值和方差均为常数,只是自协方差函数或自相关系数为0,因此,该序列的任何两项之间不存在相关性,无法从中得到任何有用的信息,此时分析可以停止。

    纯随机性(白噪声)检验

    对于纯随机性序列,一般通过构建统计量的方法来检验。我们知道,白噪声序列除了0阶自相关系数外,即方差,其他阶的自相关系数应该均为0,因此,我们可以提出下面这样一个假设:

    H0:ρ1=ρ2==ρm=0,m1H1:ρk0,m1,kmH _ { 0 } : \rho _ { 1 } = \rho _ { 2 } = \cdots = \rho _ { m } = 0 , \quad \forall m \geqslant 1\\ H _ { 1 } :至少存在某个\rho _ { k } \neq 0 , \quad \forall m \geqslant 1 , k \leqslant m

    因此,围绕该假设,我们可以构建统计量进行检验,常用的统计量有Q统计量和LB统计量,其计算公式分别如下:

    Q=nk=1mρ^k2LB=n(n+2)k=1m(ρ^k2nk)Q = n \sum _ { k = 1 } ^ { m } \widehat { \rho } _ { k } ^ { 2 }\\L B = n ( n + 2 ) \sum _ { k = 1 } ^ { m } \left( \frac { \widehat { \rho } _ { k } ^ { 2 } } { n - k } \right)

    其中,nn为序列的观察期数,mm为指定延迟期数,kk为延迟阶数,Box和Pierce证明这两个统计量均服从自由度为m mm的卡方分布,当统计量大于χ1α2(m)\chi _ { 1 - \alpha } ^ { 2 } ( m )或者P值小于αα 时,则认为可以拒绝原假设,即认为该序列是非随机序列

    我们可以使用acorr_ljungbox函数进行数据的纯随机性检验.语法为:

    acorr_ljungbox(x, lags=None, boxpierce=False) # 数据的纯随机性检验函数
    
    lags:为延迟期数,如果为整数,则是包含在内的延迟期数,如果是一个列表或数组,那么所有时滞都包含在列表中最大的时滞中
    
    boxpierce:为True时表示除开返回LB统计量还会返回Box和Pierce的Q统计量
    
    返回值:
    
    lbvalue:测试的统计量
    
    pvalue:基于卡方分布的p统计量
    
    bpvalue:((optionsal), float or array) – 基于 Box-Pierce 的检验的p统计量
    
    bppvalue:((optional), float or array) – 基于卡方分布下的Box-Pierce检验的p统计量
    

    代码实现:

    from statsmodels.stats.diagnostic import acorr_ljungbox
    acorr_ljungbox(train['#Passengers'])
    

    输出检验结果中会返回两个值:
    lbvalue: 测试的统计量 和 pvalue: 基于卡方分布的p统计量。如果p-value>0.05则可判断为白噪声序列

    时间序列的平稳化

    在熟悉了平稳性的概念及其不同的类型之后,接下来可以对序列进行平稳化操作。平稳化的方法有以下几种:

    差分法

    在该方法中,计算序列中连续项的差值。执行差分操作通常是为了消除均值的变化。从数学角度,差分可以写成:

    yt=ytyt1y_t = y_t – y_{t-1}

    其中yty_t 是t时刻的数值。相减数值之间的间隔数即为阶数。例如上述公式即为一阶差分。

    我们可以直接相减对序列差分,并绘制出对应线图:

    train['#Passengers_diff'] = train['#Passengers'] - train['#Passengers'].shift(1)
    train['#Passengers_diff'].dropna().plot()
    

    或者使用diff方法进行差分:

    train['#Passengers_diff'] = train['#Passengers'].diff(1)#一阶差分
    train['#Passengers_diff2'] = train['#Passengers_diff'].diff(1)#二阶差分
    

    在这里插入图片描述

    当数据存在季节性趋势时,我们可以利用季节性差分来消除季节性的不平稳因素。例如,星期一的观察值将与上星期一的观察值相减。从数学角度,它可以写成:

    yt=ytytny_t = y_t – y_{t-n}

    n=7
    train['#Passengers_diff'] = train['#Passengers'] - train['#Passengers'].shift(n)
    

    变换

    变换用于对方差为非常数的序列进行平稳化。常用的变换方法包括幂变换、平方根变换和对数变换。

    train['#Passengers_log'] = np.log(train['#Passengers'])
    train['#Passengers_log_diff'] = train['#Passengers_log'] - train['#Passengers_log'].shift(1)
    train['#Passengers_log_diff'].dropna().plot()
    

    在这里插入图片描述

    在上面的变化过程中,我们首先对原始数据取对数,主要有两个用处:(1)将指数增长转为线性增长(2)可以平稳序列的方差。随后进行差分从而消除趋势的影响使序列平稳。

    分解

    对于有明显趋势或者周期性的时间序列二,我们也可以对其进行分解。分解需要用到statsmodels.tsa.seasonal.seasonal_decompose函数,可以将时间序列的数据分解为趋势(trend),季节性(seasonality)和残差(residual)三部分。

    from statsmodels.tsa.seasonal import seasonal_decompose
    decomposition = seasonal_decompose(train['#Passengers']).plot()#画出分解后时序图
    plt.show()
    trend = decomposition.trend
    seasonal = decomposition.seasonal
    residual = decomposition.resid
    

    在这里插入图片描述

    这样趋势和季节性,还有残差值都被分解出来,之后我们就可以计算残差值的稳定性,从而得到一个平稳的时间序列

    参考文章:
    https://www.biaodianfu.com/arima.html

    在这里插入图片描述

    展开全文
  • 平稳时间序列分析

    千次阅读 2019-12-14 17:12:01
    协方差平稳:时间序列的期望和方差是有限常数,协方差只跟时间间隔有关而不随时间变化。 含义:主要分布参数(一阶和二阶矩)在时间维度上具有稳定性。 平稳是指动态变化有规律可循,受到冲击衰减。 非平稳是指动态...

    §1.数据平稳性
    协方差平稳:时间序列的期望和方差是有限常数,协方差只跟时间间隔有关而不随时间变化。
    含义:主要分布参数(一阶和二阶矩)在时间维度上具有稳定性。
    平稳是指动态变化有规律可循,受到冲击衰减。
    非平稳是指动态变化无规律可循,累积冲击的效果。
    随机趋势:单位根过程
    yt=yt1+εtεtiid(0,σ2)yt1=yt2+εt1yt=i=0tεiy_t=y_{t-1}+\varepsilon_t\\\varepsilon_t\sim iid(0,\sigma^2)\\y_{t-1}=y_{t-2}+\varepsilon_{t-1}\Rightarrow y_t=\sum_{i=0}^t\varepsilon_i

    结论:yty_t是一个白噪声过程的叠加,即积分。ytI(1)y_t\sim I(1),一阶求积过程,一个单位根,称为一阶单整过程。
    本质:序列受到冲击不衰减,永久记忆。滞后算子L,Lyt=yt1(1L)yt=εtL=1L,Ly_t=y_{t-1}\Rightarrow (1-L)y_t=\varepsilon_t\Rightarrow L=1,单位根为1,在单位圆上。
    平稳过程
    有零值回复:
    yt=ρyt1+εtρ(1,1)εtiid(0,σ2)y_t=\rho y_{t-1}+\varepsilon_t\\\rho \in(-1,1)\qquad\varepsilon_t\sim iid(0,\sigma^2)

    ρ0ρ0ρ>1ρ>1\rho值一般大于0,自相关系数,表示经济实体具有惯性。\\\rho值小于0时,表示经济实体处于震荡状态。\\\rho>1表示经济实体存在泡沫,但泡沫的最终走向是破灭,故\rho>1不能长期存在。
    漂移:
    yt=α+ρyt1+εtαMAαρ y_t=\alpha+\rho y_{t-1}+\varepsilon_t\\需要注意的是,\alpha不是均值,在MA过程中,\alpha会乘以\rho,逐步衰减其作用。

    漂移和时间趋势:
    yt=α+βt+ρyt1+εt y_t=\alpha+\beta t+\rho y_{t-1}+\varepsilon_t

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    CODE1:
    import numpy as np
    import matplotlib.pyplot as plt
    
    %matplotlib auto
    
    """
    AR(1):x[t]=rho*x[t-1]+epsilon
    """
    num = 500
    epsilon = np.random.normal(0,1,num)
    x = np.empty(num)
     
    """
    非平稳AR(1)
    """
    t=np.linspace(1,500,500)
    rho = 1
    x[0] = 0
    for i in range(1,num):
        x[i] = 0.3+0.5*t[i]+rho*x[i-1]+epsilon[i]
    plt.subplot(111,title = "AR({0}):x[t]=0.3+0.5t+{1}*x[t-1]+epsilon".format(1,rho))
    plt.plot(x)
    
    plt.show()
    
    CODE2:
    import numpy as np
    import matplotlib.pyplot as plt
    
    %matplotlib auto
    num = 500
    epsilon = np.random.normal(0,1,num)
    x_1 = np.empty(num)
    x_2 = np.empty(num)
    x_3 = np.empty(num)
    x_4 = np.empty(num)
    x_5 = np.empty(num)
    x_6 = np.empty(num)
    
    
    t=np.linspace(1,500,500)
    x_1[0]=0
    for i in range(1,num):
        x_1[i]=0.5+0.3*t[i]+epsilon[i]
        
    rho = 1
    x_2[0] = 0
    for i in range(1,num):
        x_2[i] = 0.3+rho*x[i-1]+epsilon[i]
        
    plt.subplot(211)    
    plt.plot(t,x_1,label='y_t=0.5+0.3t+epsilon')
    plt.plot(t,x_2,label='y_t=0.3+y_{t-1}+epsilon')
    plt.legend()
    
    
    
    x_3[0]=0
    for i in range(1,num):
        x_3[i]=0.5+0.3*t[i]+epsilon[i]
    
    x_4[0]=0
    for i in range(1,num):
        x_4[i] = 0.5+epsilon[i]
    
    x_5[0]=0
    for i in range(1,num):
        x_5[i] = 0.3+rho*x[i-1]+epsilon[i]
        
    x_6[0]=0
    for i in range(1,num):
        x_6[i] = 0.3+epsilon[i]
        
    plt.subplot(212)
    plt.plot(t,x_4,label='Trend stationary')
    plt.plot(t,x_6,label='Difference stationary')
    
    
    plt.legend()
    plt.show()
    
    CODE3:
    import numpy as np
    import matplotlib.pyplot as plt
    
    %matplotlib auto
    num = 500
    epsilon = np.random.normal(0,1,num)
    x_1 = np.empty(num)
    x_2 = np.empty(num)
    
    t=np.linspace(1,500,500)
    x_1[0]=0
    for i in range(1,num):
        x_1[i]=0.5+0.3*t[i]+epsilon[i]
        
    rho = 1
    x_2[0] = 0
    for i in range(1,num):
        x_2[i] = 0.3+rho*x[i-1]+epsilon[i]
        
    plt.subplot(211)    
    plt.plot(t,x_1,label='y_t=0.5+0.3t+epsilon')
    plt.legend()
    plt.subplot(212)
    plt.plot(t,x_2,label='y_t=0.3+y_{t-1}+epsilon')
    plt.legend()
    plt.show()
    
    展开全文
  • 时间序列-平稳

    千次阅读 2019-02-19 17:07:31
     1.2 如果一个随机过程所产生的时间序列期望和方差在任何时间过程上都是常数,并且任何两个时期之间的协方差不依赖于这两个时期的距离或之后,而不依赖于计算这两个协方差的实际时间,就称改时间序列平稳的。...

    1.时间序列的平稳性

      1.1   任何一个时间序列都可以被看做是由随机过程产生的结果。和普通两变量和多变量不一样,任何一个时间点上的值都是随机过程产生的,也是都是随机的。

      1.2   如果一个随机过程所产生的时间序列期望和方差在任何时间过程上都是常数,并且任何两个时期之间的协方差不依赖于这两个时期的距离或之后,而不依赖于计算这两个协方差的实际时间,就称改时间序列是平稳的。(Stationary)

      1.3   期望和方差在任何时间过程上都是常数,符合期望为0,方差为1的正太分布假设

      1.4   任意两个时期之间的协方差,只是某两个值之间的距离。和计算这两个值的时间无关

     

    2.平稳性的数学表达式:

      E(Yt) = μ  期望为常数

      Var(Yt) =σ2 方差为常数

      Cov(Yt , Yt+k) = E(Yt - μ)(Yt+k - μ)=rk  (任意两个时期之间的协方差仅依赖于这两个时期的距离)看到第一个括号内的μ和第二个括号内的μ,也就是两个期望都是相等的。如果按照统计学的定义应该为。E(Yt - μt)(Yt+k - μt+k),因为期望都是常数,即使Yt的常数也是Yt+k的常数,所以均值都一个一个。这条定义非常重要。

     3.   Yt的期望等于0,这个是合理的,因为当n区域无穷的时候,Yt的期望是无限接近于0的,按照中心极限定理,Yt的期望是 = 0。

     4.根据序列是否平稳

        4.1 时间序列可以分为: 1.平稳序列:白噪声序列、AR(p)序列, MA(q)序列, ARMA(p,q)序列

        4.2非平稳序列: ARIMA(p,d,q)序列

    文章内容来自于博客:http://www.cnblogs.com/noah0532/p/8449986.html

    时间序列平稳扩展内容:https://www.zhihu.com/question/21982358

    展开全文
  • 时间序列 简而言之,时间序列就是带时间戳的数值序列。...所谓时间序列平稳性,是指时间序列的均值,方差以及协方差都是常数,与时间t无关。这样的序列才可以作为我们基于历史预测未来的基础。 满足以上条件属...
  • 平稳性定义所谓时间序列平稳性,是指时间序列的均值,方差以及协方差都是常数,与时间t无关。这样的序列才可以作为我们基于历史预测未来的基础。满足以上条件属于严平稳,一般达到弱平稳都是可以接受的。平稳性是...
  • 如果有明显的趋势或者周期性,那它通常不是平稳序列。检测方法有三种: (1)时序图检测 (2)自相关系数和偏相关系数>>>>>>通过spss 截尾:就是在某阶之后,系数都为0 拖尾:就是有一个缓慢衰减的趋势,...
  • 平稳性定义所谓时间序列平稳性,是指时间序列的均值,方差以及协方差都是常数,与时间t无关。这样的序列才可以作为我们基于历史预测未来的基础。满足以上条件属于严平稳,一般达到弱平稳都是可以接受的。平稳性是...
  • 时间序列相关算法与分析步骤

    万次阅读 多人点赞 2018-03-31 11:56:53
    2.平稳非白噪声序列,它们的均值和方差是常数,对于这类序列,有成熟的模型来拟合这个序列在未来的发展状况,如AR,MA,ARMA等(具体模型算法及实现在后面) 3.非平稳序列,一般做法是把他们转化为平稳的序列,在...
  •  1.2 如果一个随机过程所产生的时间序列期望和方差在任何时间过程上都是常数,并且任何两个时期之间的协方差不依赖于这两个时期的距离或之后,而不依赖于计算这两个协方差的实际时间,就称改时间序列平稳的。...
  • 自相关函数/自相关曲线ACF AR(1)模型的ACF: 模型为: 当其满足平稳的必要条件|a1|&... y(t)和y(t-s)的方差是有限常数,y(t)和y(t-s)的协方差伽马s 除以伽马0,可求得ACF如下: 由于{rhoi}其在平稳条...
  • 时间序列

    2021-03-16 20:02:07
    时间序列一、时间序列是什么?二、时间序列分类1.白噪声序列2.平稳非白噪声序列3.非平稳序列三. 时间序列主要模型1....一、时间序列是什么? 时间序列是指某种现象某一指标...均值/方差是常数:AR MA ARMA 3.非平稳序列.
  • 2.平稳非白噪声序列,它们的均值和方差是常数,对于这类序列,有成熟的模型来拟合这个序列在未来的发展状况,如AR,MA,ARMA等(具体模型算法及实现在后面) 3.非平稳序列,一般做法是把他们转化为平稳的序列,在...
  • 若一时间序列的概率分布与t无关,则为严格(狭义)平稳时间序列平稳随机过程,实践当中非常困难甚至不可能的 宽平稳时间序列(二阶宽平稳定义) 如果序列的一、二阶矩存在,且对任意时刻t满足: (1)均值为...
  • "平稳序列"(Stationary Series)指在某1常数附近波动且波动幅度有限的序列.具体来说,要求期望/方差常数而协方差只与时期间隔有关,即需要 满足下述要求: ①(Xt)=μ②D(Xt)=σ2③γ(t,t+k)=gk①(X_t)=μ\\②D(X_t...
  • 学习笔记 参考书目:《计量经济学》、《时间序列分析及应用R语言》、《计量经济学基础》、《计量经济学模型与R语言应用》 ...①均值E(Xt)=μE(X_{t})=\muE(Xt​)=μ ,均值与时间ttt无关的常数方差Var(Xt...
  • 时序模式--时间序列分析

    千次阅读 2016-06-15 10:08:08
    时间序列分析目的:给定一个已被观测了的时间序列,预测该序列的未来值 1.时间序列预处理 (1)纯随机性和平稳性检验,检验结果不同将序列分为不同 的类型,有不同... 平稳非噪声序列—-其均值与方差是常数,通常采用
  • 常用按时间顺序排列的1组随机变量X1,X2...Xt来表示1个随机事件的时间序列,简记为{Xt};用x1,x2...xn表示该随机序列的..."平稳序列"指在某1常数附近波动且波动幅度有限的序列.具体来说,要求期望/方差常数而协方差只与
  • 1.常见的时间序列算法:   2.时序模型的预处理  1....  2. 平稳非白噪声序列,均值和方差不随时间变动。... 3. 非平稳序列,一般方法是将其转化为平稳...时序图检验: 平稳时间序列的均值和方差是常数,则平稳时...
  • 2.平稳非白噪声序列,它们的均值和方差是常数,对于这类序列,有成熟的模型来拟合这个序列在未来的发展状况,如AR,MA,ARMA等(具体模型算法及实现在后面) 3.非平稳序列,一般做法是把他们转化为平稳的序列,在...
  • 时间序列平稳性,一般指宽平稳,即时间序列的均值和方差为与时间无关的常数,其协方差与时间间隔有关而也与时间无关。简单地说,就是一个平稳的时间序列指的:遥想未来所能获得的样本时间序列,我们能断定其均值...
  • 平稳数据

    2017-02-08 14:29:02
    就是说我们在做回归之前其实有个前提条件的,就是数据平稳的 ...所谓平稳指它随机生成的,平稳序列包括三个条件:即它的均值、方差、协方差都与时间无关的常数,其中协方差只于时期间隔有关
  • 说明:如果一个序列的平均值和方差始终为常数,则它平稳的。在估计时间序列模型之前需把不平稳的时间序列转化为平稳序列。判断一个时间序列的平稳性可通过数据图和自相关函数图,如果数据图呈现线性或二次趋势形状...
  • 时间序列python

    千次阅读 2016-08-18 23:52:07
    如果有明显的趋势或者周期性,那它通常不是平稳序列。检测方法有三种: (1)时序图检测 (2)自相关系数和偏相关系数>>>>>>通过spss 截尾:就是在某阶之后,系数都为0 拖尾:就是有一个缓慢衰减的趋势,但是不...
  • 2、方差是与时间无关的常数; 3、协方差至于时间间隔有关,与时间无关; 则称该随机时间序列平稳的,该随机过程是一个平稳随机过程。 白噪声 Xt=μt,μ~N(0,σ2)X_t=\mu_t,\qquad \mu ~N(0,\sigma^2)Xt​=...
  • Matlab的autocorr自相关函数

    万次阅读 多人点赞 2016-02-23 22:50:58
    今天看了一下时间序列模型ARIMA模型,在对数据处理的时候,需要对其进行平稳性检验。 对序列的平稳性的检验...对于时序图检验,根据平稳时间序列的均值和方差都为常数的性质,平稳序列的时序图显示该序列值始终在一个
  • 在做任何时间数列的分析时,通常第一步工作是先看看数据的图形。...如果一个随机过程的均值和方差在时间过程上都是常数,并且在任何两时期之间的协方差值仅依赖于该两时期间的距离或滞后,而不依赖于计算这个协...
  • 一、基本信息 作者:张良均 王路 谭立云 苏剑林 等 出版社:机械工业出版社 ... 三、补充笔记(时序模型) ...在拿到一个观察值序列之后,需要对它的随机性...平稳非白噪声序列,均值和方差都为常数,ARMA模型最常...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

平稳序列方差是常数