数学建模时序数据分析 | 您所在的位置:网站首页 › 时间序列模型要做哪些检验 › 数学建模时序数据分析 |
数学建模数据分析——趋势性检验和平稳性检验
在数学建模比赛中,经常需要对数据进行分析和预处理,常见的比如趋势分析(上升/下降/无明显趋势)和突变分析,很多时候靠人的经验观察得出结论,但这是不够严谨的。于是我们通常会采用一些更科学的方法,下面我们就来详细的捋一遍数据分析检验方法: 文章目录 数学建模数据分析——趋势性检验和平稳性检验时间序列趋势性检验方法斜率法Cox-Stuart检验法Mann-Kendall检验法 时间序列平稳性检验方法平稳时间序列定义与性质检验方法时序图检验法自相关图检验法ADF检验法KPSS检验 非常有用的相关链接 时间序列趋势性检验方法 斜率法原理 斜率法就是使用最小二乘法对时序数据进行拟合,根据拟合的直线的斜率K来判断序列的数据走势,当K>0时,则代表上升趋势;当k0: pos+=1 elif diff k j > k j>k,,这些差值是: x 2 − x 1 , x 3 − x 1 , … , x n − x 1 , x 3 − x 2 , x 4 − x 2 , … , x n − x n − 2 , x n − x n − 1 x_2 - x_1,x_3 - x_1, … , x_n - x_1,x_3 - x_2,x_4 - x_2,…,x_n - x_{n-2},x_n - x_{n-1} x2−x1,x3−x1,…,xn−x1,x3−x2,x4−x2,…,xn−xn−2,xn−xn−1 令 s g n ( x j − x k ) sgn(x_j−x_k) sgn(xj−xk)作为指示函数,依据 x j − x k x_j−x_k xj−xk的正负号取值为1,0或-1,即 s g n ( x j − x k ) = { 1 , x j − x k > 0 − 1 , x j − x k < 0 0. x j − x k = 0 sgn(x_j-x_k)= \begin{cases} 1, x_j − x_k > 0\\ -1, x_j − x_k < 0\\ 0. x_j − x_k = 0 \end{cases} sgn(xj−xk)=⎩⎪⎨⎪⎧1,xj−xk>0−1,xj−xk 10 n > 10 n>10,则依以下步骤6-10来判断有无趋势。这里遵循的是Gilbert (1987, page 211, Section 16.4.2)中的程序。 计算S的方差如下: V A R ( S ) = 1 18 [ n ( n − 1 ) ( 2 n + 5 ) − ∑ p − 1 g t p ( t p − 1 ) ( 2 t p + 5 ) ] VAR(S)=\frac{1}{18}[n(n−1)(2n+5)−∑^g_{p−1}t_p(t_p−1)(2t_p+5)] VAR(S)=181[n(n−1)(2n+5)−∑p−1gtp(tp−1)(2tp+5)]。其中 g g g是结组(tied groups)的数量, t p t_p tp是第p组的观测值的数量。例如:在观测值的时间序列 23 , 24 , 29 , 6 , 29 , 24 , 24 , 29 , 23 {23, 24, 29, 6, 29, 24, 24, 29, 23} 23,24,29,6,29,24,24,29,23中有 g = 3 g = 3 g=3个结组,相应地,对于结值(tiied value)23有 t 1 = 2 t_1=2 t1=2、结值24有 t 2 = 3 t_2=3 t2=3、结值29有 t 3 = 3 t_3=3 t3=3。当因为有相等值或未检测到而出现结时, V A R ( S ) VAR(S) VAR(S)可以通过Helsel (2005, p. 191)中的结修正方法来调整。 计算MK检验统计量Z_{MK}: Z M K = { S − 1 V A R ( S ) , S > 0 0 , S = 0 S + 1 V A R ( S ) , S > 0 Z_{MK}=\begin{cases} \frac{S-1}{\sqrt{VAR(S)}},& S>0\\ \qquad0\quad,& S=0\\ \frac{S+1}{\sqrt{VAR(S)}},& S>0 \end{cases} ZMK=⎩⎪⎪⎨⎪⎪⎧VAR(S) S−1,0,VAR(S) S+1,S>0S=0S>0 设想要测试零假设。 H 0 H_0 H0(没有单调趋势)对比替代假设Ha(有单调增趋势),其1型错误率为α,0Xt}为严平稳时间序列。严平稳的条件只是理论上的存在,现实中用得比较多的是宽平稳的条件。 宽平稳时间序列:宽平稳也叫弱平稳或者二阶平稳(均值和方差平稳),满足: 均值为常数,即 E ( X t ) = u , ∀ t ∈ T E(X_t)=u,\quad \forall t \in T E(Xt)=u,∀t∈T 方差为常数 D ( X t ) = γ ( t , t ) = γ ( 0 ) , ∀ t ∈ T D(X_t)=\gamma(t,t)=\gamma(0), \quad \forall t \in T D(Xt)=γ(t,t)=γ(0),∀t∈T 自协方差为常数,即自协方差函数和自相关系数只依赖于时间的平移长度,而与时间的起点无关。 γ ( t , s ) = γ ( k , k + s − t ) , ∀ t , s , k ∈ T \gamma(t,s)=\gamma(k, k+s-t),\quad \forall t,s,k \in T γ(t,s)=γ(k,k+s−t),∀t,s,k∈T 因此,可以记 γ ( k ) \gamma(k) γ(k)为时间序列 { X t } \{X_t\} {Xt}的延迟 k k k自协方差函数。 在现实生活中,时间序列是很难满足严平稳时间序列的要求的,因此,一般所讲的平稳时间序列在默认情况下都是指宽平稳时间序列。 由于平稳时间序列具有这些优良性质,因此,对于一个平稳时间序列来说,其待估计的参数量就变得少了很多,因为他们的均值、方差都是一样的,因此,可以利用全部的样本来估计总体的均值和方差,即: μ ^ = x ˉ = ∑ i = 1 n x n γ ^ ( 0 ) = ∑ t − 1 n ( x t − x ˉ ) 2 n − 1 \hat \mu = \bar x = \frac{\sum_{i=1}^nx}{n}\\ \hat \gamma(0) = \frac{\sum_{t-1}^{n}(x_t - \bar x)^2}{n-1} μ^=xˉ=n∑i=1nxγ^(0)=n−1∑t−1n(xt−xˉ)2 所以当拿到一个时间序列后,需要对其进行平稳性检验。 检验方法平稳性检验的主要方法是看时序图、ACF图和单位根检验,其中单位根检验方法有ADF、PP、KPSS等。其中ADF和PP检验都拒绝原假设,即认为序列平稳;KPSS拒绝原假设,即认为序列非平稳(KPSS零假设和ADF/PP恰好相反)。当出现不一致时,需要根据属于下面哪种平稳过程来判断,有一种观点认为KPSS检验结果更强更鲁棒,因为ADF和PP检验将差分平稳模型作为零假设,它检验随机游走或带漂移的随机游走效果奇好,但它们都需要假设是否包含常数均值和时间趋势,因此拒绝零假设的功效(low power)较低,而KPSS则完全不需要选择假设类型。 时序图检验法那么,当拿到一个时间序列后,应该如何对其进行平稳性的检验呢?目前,对时间序列的平稳性检验主要有两种方法,一种是图检法,即根据时序图和自相关图进行直观判断,另一种是构造检验统计量的方法,目前主要有单位根检验法。 对于图检法,我们一般绘制时间序列的时序图,如下图所示,如果时间序列是平稳的,那么序列应该是围绕某一个均值上下随机波动,而下图中的序列明显具有一定的增长趋势,因此,可以断定该序列肯定不是平稳时间序列。 对于平稳时间序列,其自相关图一般随着阶数的递增,自相关系统会迅速衰减至0附近,而非平稳时间序列则可能存在先减后增或者周期性波动等变动。如下图所示,该时间序列随着阶数的递增,自相关系数始终在 [ 0.8 , 1 ] [0.8,1] [0.8,1]之间,衰减微弱,因此,可以判断该时间序列不是平稳时间序列。 from statsmodels.graphics.tsaplots import plot_acf, plot_pacf plot_acf(b_array) plot_pacf(b_array)除了上述两种方法,便是单位根检验,下面这张图对单位根检验做了很好地说明。 在使用很多时间序列模型的时候,如 ARMA、ARIMA,都会要求时间序列是平稳的,所以一般在研究一段时间序列的时候,第一步都需要进行平稳性检验,除了用肉眼检测的方法,另外比较常用的严格的统计检验方法就是ADF检验,也叫做单位根检验。 ADF检验全称是 Augmented Dickey-Fuller test,顾名思义,ADF是 Dickey-Fuller检验的增广形式。DF检验只能应用于一阶情况,当序列存在高阶的滞后相关时,可以使用ADF检验,所以说ADF是对DF检验的扩展。 原理 ADF检验就是判断序列是否存在单位根:如果序列平稳,就不存在单位根;否则,就会存在单位根。 所以,ADF检验做出的假设为: **原假设 H 0 H_0 H0😗*假设原时序数据不平稳,即存在单位根; 替代假设 H 1 H_1 H1:原时序数据平稳,即不存在单位根。 如果得到的显著性检验统计量小于三个置信度(10%,5%,1%),则对应有(90%,95,99%)的把握来拒绝原假设。 实现代码 我们仍然使用之前的那段时间序列数据来检验平稳性,从时序图上看,直观感受该数据为非平稳数据,但缺少严格科学依据。 import pandas as pd import numpy as np a_array = [206,223,235,264,229,217,188,204,182,230,223,227,242,238,207,208, 216,233,233,274,234,227,221,214,226,228,235,237,243,240,231,210] import matplotlib.pyplot as plt plt.plot(a_array)可以看到,ADF检验该数据的p-value值为0.438>0.05,因此有理由认为该数据是不平稳的。 这里的5%是常用的阈值,也可以根据自己的实际需求进行设定。 from statsmodels.tsa.stattools import adfuller dftest = adfuller(a_array, autolag='AIC') dftest if dftest[1]>0.05: print("当前接通率不平稳") else: print(dftest) print("当前接通率平稳") (-1.68597312727734, 0.43835364827956663, 10, 21, {'1%': -3.7883858816542486, '5%': -3.013097747543462, '10%': -2.6463967573696143}, 172.30195618901666)ADF检验输出参数说明: 第一个值:表示Test Statistic , 即T值,表示T统计量 第二个值:p-value,即p值,表示T统计量对应的概率值 第三个值:Lags Used,即表示延迟 第四个值:Number of Observations Used,即表示测试的次数 大括号中的值,分别表示1%, 5%, 10% 的三个level。 KPSS检验KPSS检验是另一种用于检查时间序列的平稳性 (与迪基-福勒检验相比稍逊一筹) 的统计检测方法。KPSS检验的原假设与备择假设与ADF检验的原假设与备择假设相反,常造成混淆。 KPSS检验的作者将原假设定义为趋势平稳的过程,并将备择假设定义为单位根序列。我们将在下一节详细了解趋势平稳。现在,来看一下KPSS检验的实现,并查看KPSS检验的结果。 做出原假设 H 0 H_0 H0:该时间序列是趋势平稳的; 替代假设 H 1 H_1 H1:该时间序列不是趋势平稳的。 KPSS检验-检验统计量、p-值和临界值和置信区间分别为1%、2.5%、5%和10%。对于航空乘客数据集的检验结果如下,在所有置信区间,检验统计量的值都大于临界值,因此可以说该序列是趋势平稳的。 from statsmodels.tsa.stattools import kpss import pandas as pd a_array = [206,223,235,264,229,217,188,204,182,230,223,227,242,238,207,208, 216,233,233,274,234,227,221,214,226,228,235,237,243,240,231,210] #define KPSS def kpss_test(timeseries): kpss_test = kpss(timeseries) kpss_output = pd.Series(kpss_test[:3], index=['Test Statistic', 'p-value', 'Lags Used']) for key, value in kpss_test[3].items(): kpss_output['Critical Value (%s)'%key] = value print(kpss_output) kpss_test(a_array) Test Statistic 0.238598 p-value 0.100000 Lags Used 10.000000 Critical Value (10%) 0.347000 Critical Value (5%) 0.463000 Critical Value (2.5%) 0.574000 Critical Value (1%) 0.739000 dtype: float64 非常有用的相关链接以上内容均为学习过程中的一点小笔记,以防自己遗忘,仅供学习参考 趋势性检验方法: 利用python进行时间序列分析——数据挖掘https://zhuanlan.zhihu.com/p/35128342 python中的Mann-Kendall单调趋势检验–及原理说明:https://blog.csdn.net/liuchengzimozigreat/article/details/87931248 信用特征检验/模型稳健性检验的代码实现http://www.cxyzjd.com/article/sinat_23971513/111273478#KS_%E6%A3%80%E9%AA%8C 数据平稳性检验: 单位根检验、航空模型、季节模型https://zhuanlan.zhihu.com/p/52084533 收入时间序列——之模型探索篇https://zhuanlan.zhihu.com/p/49945157 平稳性的单位根检验大全http://blog.sina.cn/dpool/blog/s/blog_4d69f4fe0101hzz7.html 用Python处理非平稳时间序列攻略https://zhuanlan.zhihu.com/p/44873076 再次感谢上述博主!! |
CopyRight 2018-2019 实验室设备网 版权所有 |