欢迎光临散文网 会员登陆 & 注册

拓端tecdat|R语言时间序列平稳性几种单位根检验(ADF,KPSS,PP)及比较分析

2021-07-19 11:21 作者:拓端tecdat  | 我要投稿

原文链接:http://tecdat.cn/?p=21757

原文出处:拓端数据部落公众号

时间序列模型根据研究对象是否随机分为确定性模型和随机性模型两大类。

随机时间序列模型即是指仅用它的过去值及随机扰动项所建立起来的模型,建立具体的模型,需解决如下三个问题模型的具体形式、时序变量的滞后期以及随机扰动项的结构。

μ是yt的均值;ψ是系数,决定了时间序列的线性动态结构,也被称为权重,其中ψ0=1;{εt}为高斯白噪声序列,它表示时间序列{yt}在t时刻出现了新的信息,所以εt称为时刻t的innovation(新信息)或shock(扰动)。

单位根测试是平稳性检验的特殊方法。单位根检验是对时间序列建立ARMA模型、ARIMA模型、变量间的协整分析、因果关系检验等的基础。

对于单位根测试,为了说明这些测试的实现,考虑以下系列


  1. > plot(X,type="l")

  • Dickey Fuller(标准)

这里,对于Dickey-Fuller测试的简单版本,我们假设

https://latex.codecogs.com/gif.latex?%20Y_t=\alpha+\beta%20t+\varphi%20Y_{t-1}+\varepsilon_t

我们想测试是否(或不是)。我们可以将以前的表示写为

所以我们只需测试线性回归中的回归系数是否为空。这可以通过学生t检验来完成。如果我们考虑前面的模型没有线性漂移,我们必须考虑下面的回归


  1. Call:

  2. lm(formula = z.diff ~ 0 + z.lag.1)


  3. Residuals:

  4. Min       1Q   Median       3Q      Max

  5. -2.84466 -0.55723 -0.00494  0.63816  2.54352


  6. Coefficients:

  7. Estimate Std. Error t value Pr(>|t|)

  8. z.lag.1 -0.005609   0.007319  -0.766    0.444


  9. Residual standard error: 0.963 on 238 degrees of freedom

  10. Multiple R-squared:  0.002461, Adjusted R-squared:  -0.00173

  11. F-statistic: 0.5873 on 1 and 238 DF,  p-value: 0.4442

我们的测试程序将基于学生t检验的值,

  1. > summary(lm(z.diff~0+z.lag.1 ))$coefficients[1,3]

  2. [1] -0.7663308

这正是计算使用的值

  1. ur.df(X,type="none",lags=0)



  2. ###############################################################

  3. # Augmented Dickey-Fuller Test Unit Root / Cointegration Test #

  4. ###############################################################


  5. The value of the test statistic is: -0.7663

可以使用临界值(99%、95%、90%)来解释该值

  1. > qnorm(c(.01,.05,.1)/2)

  2. [1] -2.575829 -1.959964 -1.644854

如果统计量超过这些值,那么序列就不是平稳的,因为我们不能拒绝这样的假设。所以我们可以得出结论,有一个单位根。实际上,这些临界值是通过


  1. ###############################################

  2. # Augmented Dickey-Fuller Test Unit Root Test #

  3. ###############################################


  4. Test regression none


  5. Call:

  6. lm(formula = z.diff ~ z.lag.1 - 1)


  7. Residuals:

  8. Min       1Q   Median       3Q      Max

  9. -2.84466 -0.55723 -0.00494  0.63816  2.54352


  10. Coefficients:

  11. Estimate Std. Error t value Pr(>|t|)

  12. z.lag.1 -0.005609   0.007319  -0.766    0.444


  13. Residual standard error: 0.963 on 238 degrees of freedom

  14. Multiple R-squared:  0.002461, Adjusted R-squared:  -0.00173

  15. F-statistic: 0.5873 on 1 and 238 DF,  p-value: 0.4442


  16. Value of test-statistic is: -0.7663


  17. Critical values for test statistics:

  18. 1pct  5pct 10pct

  19. tau1 -2.58 -1.95 -1.62

R有几个包可以用于单位根测试。


  1. Augmented Dickey-Fuller Test


  2. data:  X

  3. Dickey-Fuller = -2.0433, Lag order = 0, p-value = 0.5576

  4. alternative hypothesis: stationary

这里还有一个检验零假设是存在单位根。但是p值是完全不同的。

  1. p.value

  2. [1] 0.4423705

  3. testreg$coefficients[4]

  4. [1] 0.4442389

  • 增广Dickey-Fuller检验

回归中可能有一些滞后现象。例如,我们可以考虑

https://latex.codecogs.com/gif.latex?%20\Delta%20Y_t=\alpha+\beta%20t+[\varphi-1]%20Y_{t-1}+\psi%20\Delta%20Y_{t-1}+\varepsilon_t

同样,我们需要检查一个系数是否为零。这可以用学生t检验来做。


  1. > summary(lm(z.diff~0+z.lag.1+z.diff.lag ))


  2. Call:

  3. lm(formula = z.diff ~ 0 + z.lag.1 + z.diff.lag)


  4. Residuals:

  5. Min       1Q   Median       3Q      Max

  6. -2.87492 -0.53977 -0.00688  0.64481  2.47556


  7. Coefficients:

  8. Estimate Std. Error t value Pr(>|t|)

  9. z.lag.1    -0.005394   0.007361  -0.733    0.464

  10. z.diff.lag -0.028972   0.065113  -0.445    0.657


  11. Residual standard error: 0.9666 on 236 degrees of freedom

  12. Multiple R-squared:  0.003292, Adjusted R-squared:  -0.005155

  13. F-statistic: 0.3898 on 2 and 236 DF,  p-value: 0.6777


  14. coefficients[1,3]

  15. [1] -0.7328138

该值是使用

  1. > df=ur.df(X,type="none",lags=1)


  2. ###############################################

  3. # Augmented Dickey-Fuller Test Unit Root Test #

  4. ###############################################


  5. Test regression none


  6. Call:

  7. lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)


  8. Residuals:

  9. Min       1Q   Median       3Q      Max

  10. -2.87492 -0.53977 -0.00688  0.64481  2.47556


  11. Coefficients:

  12. Estimate Std. Error t value Pr(>|t|)

  13. z.lag.1    -0.005394   0.007361  -0.733    0.464

  14. z.diff.lag -0.028972   0.065113  -0.445    0.657


  15. Residual standard error: 0.9666 on 236 degrees of freedom

  16. Multiple R-squared:  0.003292, Adjusted R-squared:  -0.005155

  17. F-statistic: 0.3898 on 2 and 236 DF,  p-value: 0.6777


  18. Value of test-statistic is: -0.7328


  19. Critical values for test statistics:

  20. 1pct  5pct 10pct

  21. tau1 -2.58 -1.95 -1.62

同样,也可以使用其他包:



  1. Augmented Dickey-Fuller Test


  2. data:  X

  3. Dickey-Fuller = -1.9828, Lag order = 1, p-value = 0.5831

  4. alternative hypothesis: stationary

结论是一样的(我们应该拒绝序列是平稳的假设)。

  • 带趋势和漂移的增广Dickey-Fuller检验

到目前为止,我们的模型中还没有包括漂移。但很简单(这将被称为前一过程的扩充版本):我们只需要在回归中包含一个常数,

  1. > summary(lm)



  2. Residuals:

  3. Min       1Q   Median       3Q      Max

  4. -2.91930 -0.56731 -0.00548  0.62932  2.45178


  5. Coefficients:

  6. Estimate Std. Error t value Pr(>|t|)

  7. (Intercept)  0.29175    0.13153   2.218   0.0275 *

  8. z.lag.1     -0.03559    0.01545  -2.304   0.0221 *

  9. z.diff.lag  -0.01976    0.06471  -0.305   0.7603

  10. ---

  11. Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


  12. Residual standard error: 0.9586 on 235 degrees of freedom

  13. Multiple R-squared:  0.02313, Adjusted R-squared:  0.01482

  14. F-statistic: 2.782 on 2 and 235 DF,  p-value: 0.06393

考虑到方差输出的一些分析,这里获得了感兴趣的统计数据,其中该模型与没有集成部分的模型进行了比较,以及漂移,

  1. > summary(lmcoefficients[2,3]

  2. [1] -2.303948

  3. > anova(lm$F[2]

  4. [1] 2.732912

这两个值也是通过

  1. ur.df(X,type="drift",lags=1)


  2. ###############################################

  3. # Augmented Dickey-Fuller Test Unit Root Test #

  4. ###############################################


  5. Test regression drift


  6. Residuals:

  7. Min       1Q   Median       3Q      Max

  8. -2.91930 -0.56731 -0.00548  0.62932  2.45178


  9. Coefficients:

  10. Estimate Std. Error t value Pr(>|t|)

  11. (Intercept)  0.29175    0.13153   2.218   0.0275 *

  12. z.lag.1     -0.03559    0.01545  -2.304   0.0221 *

  13. z.diff.lag  -0.01976    0.06471  -0.305   0.7603

  14. ---

  15. Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


  16. Residual standard error: 0.9586 on 235 degrees of freedom

  17. Multiple R-squared:  0.02313, Adjusted R-squared:  0.01482

  18. F-statistic: 2.782 on 2 and 235 DF,  p-value: 0.06393


  19. Value of test-statistic is: -2.3039 2.7329


  20. Critical values for test statistics:

  21. 1pct  5pct 10pct

  22. tau2 -3.46 -2.88 -2.57

  23. phi1  6.52  4.63  3.81

我们还可以包括一个线性趋势,

  1. > temps=(lags+1):n

  2. lm(z.diff~1+temps+z.lag.1+z.diff.lag )


  3. Residuals:

  4. Min       1Q   Median       3Q      Max

  5. -2.87727 -0.58802 -0.00175  0.60359  2.47789


  6. Coefficients:

  7. Estimate Std. Error t value Pr(>|t|)

  8. (Intercept)  0.3227245  0.1502083   2.149   0.0327 *

  9. temps       -0.0004194  0.0009767  -0.429   0.6680

  10. z.lag.1     -0.0329780  0.0166319  -1.983   0.0486 *

  11. z.diff.lag  -0.0230547  0.0652767  -0.353   0.7243

  12. ---

  13. Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


  14. Residual standard error: 0.9603 on 234 degrees of freedom

  15. Multiple R-squared:  0.0239, Adjusted R-squared:  0.01139

  16. F-statistic:  1.91 on 3 and 234 DF,  p-value: 0.1287


  17. > summary(lmcoefficients[3,3]

  18. [1] -1.98282

  19. > anova(lm$F[2]

  20. [1] 2.737086

而R函数返回

  1. ur.df(X,type="trend",lags=1)



  2. ###############################################

  3. # Augmented Dickey-Fuller Test Unit Root Test #

  4. ###############################################


  5. Test regression trend




  6. Residuals:

  7. Min       1Q   Median       3Q      Max

  8. -2.87727 -0.58802 -0.00175  0.60359  2.47789


  9. Coefficients:

  10. Estimate Std. Error t value Pr(>|t|)

  11. (Intercept)  0.3227245  0.1502083   2.149   0.0327 *

  12. z.lag.1     -0.0329780  0.0166319  -1.983   0.0486 *

  13. tt          -0.0004194  0.0009767  -0.429   0.6680

  14. z.diff.lag  -0.0230547  0.0652767  -0.353   0.7243

  15. ---

  16. Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


  17. Residual standard error: 0.9603 on 234 degrees of freedom

  18. Multiple R-squared:  0.0239, Adjusted R-squared:  0.01139

  19. F-statistic:  1.91 on 3 and 234 DF,  p-value: 0.1287


  20. Value of test-statistic is: -1.9828 1.8771 2.7371


  21. Critical values for test statistics:

  22. 1pct  5pct 10pct

  23. tau3 -3.99 -3.43 -3.13

  24. phi2  6.22  4.75  4.07

  25. phi3  8.43  6.49  5.47

  • KPSS 检验

在这里,在KPSS过程中,可以考虑两种模型:漂移模型或线性趋势模型。在这里,零假设是序列是平稳的。
代码是

  1. ur.kpss(X,type="mu")


  2. #######################

  3. # KPSS Unit Root Test #

  4. #######################


  5. Test is of type: mu with 4 lags.


  6. Value of test-statistic is: 0.972


  7. Critical value for a significance level of:

  8. 10pct  5pct 2.5pct  1pct

  9. critical values 0.347 0.463  0.574 0.73

在这种情况下,有一种趋势

  1. ur.kpss(X,type="tau")


  2. #######################

  3. # KPSS Unit Root Test #

  4. #######################


  5. Test is of type: tau with 4 lags.


  6. Value of test-statistic is: 0.5057


  7. Critical value for a significance level of:

  8. 10pct  5pct 2.5pct  1pct

  9. critical values 0.119 0.146  0.176 0.216

再一次,可以使用另一个包来获得相同的检验(但同样,不同的输出)


  1. KPSS Test for Level Stationarity


  2. data:  X

  3. KPSS Level = 1.1997, Truncation lag parameter = 3, p-value = 0.01


  4. > kpss.test(X,"Trend")


  5. KPSS Test for Trend Stationarity


  6. data:  X

  7. KPSS Trend = 0.6234, Truncation lag parameter = 3, p-value = 0.01

至少有一致性,因为我们一直拒绝假设。

  • Philipps-Perron 检验

Philipps-Perron检验基于ADF过程。代码

  1. > PP.test(X)


  2. Phillips-Perron Unit Root Test


  3. data:  X

  4. Dickey-Fuller = -2.0116, Truncation lag parameter = 4, p-value = 0.571

另一种可能的替代方案是

  1. > pp.test(X)


  2. Phillips-Perron Unit Root Test


  3. data:  X

  4. Dickey-Fuller Z(alpha) = -7.7345, Truncation lag parameter = 4, p-value

  5. = 0.6757

  6. alternative hypothesis: stationary

  • 比较

我不会花更多的时间比较不同的代码,在R中,运行这些测试。我们再花点时间快速比较一下这三种方法。让我们生成一些或多或少具有自相关的自回归过程,以及一些随机游走,让我们看看这些检验是如何执行的:


  1. > for(i in 1:(length(AR)+1)

  2. + for(s in 1:1000){

  3. + if(i!=1) X=arima.sim

  4. + M2[s,i]=(pp.testp.value)

  5. + M1[s,i]=(kpss.testp.value)

  6. + M3[s,i]=(adf.testp.value)

  7. + }

这里,我们要计算检验的p值超过5%的次数,


  1. > plot(AR,P[1,],type="l",col="red",ylim=c(0,1)

  2. > lines(AR,P[2,],type="l",col="blue")

  3. > lines(AR,P[3,],type="l",col="green")

我们可以在这里看到Dickey-Fuller测试的表现有多不稳定,因为我们的自回归过程中有50%(至少)被认为是非平稳的。

最受欢迎的见解

1.Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型

2.基于R语言的疾病制图中自适应核密度估计的阈值选择方法

3.WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较

4.R语言回归中的hosmer-lemeshow拟合优度检验

5.matlab实现MCMC的马尔可夫切换ARMA – GARCH模型估计

6.R语言区间数据回归分析

7.R语言WALD检验 VS 似然比检验

8.python用线性回归预测股票价格

9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标


拓端tecdat|R语言时间序列平稳性几种单位根检验(ADF,KPSS,PP)及比较分析的评论 (共 条)

分享到微博请遵守国家法律