本系列的前面两篇推文介绍了使用DF和ADF方法检验时间序列数据中单位存在性。而在一些情况,使用DF和ADF方法会把受到结构性冲击的平稳过程或趋势平稳过程误认为是单位根过程。本篇就来介绍在序列存在结构性变化下的单位根检验方法——Perron检验。
1 结构性变化
按照Pierre Perron的研究,序列受到冲击后发生的结构性变化可以分为三类:
A:冲击前后序列的水平发生变化,但斜率不变;
B:冲击前后序列的斜率发生变化,但水平未变化;
C:冲击前后序列的水平和系列均发生了变化。
Pierre Perron的研究见https://www.jstor.org/stable/1913712。
免费下载地址:http://www.fsb.miamioh.edu/lij14/672_perron89.pdf。
1.1 原假设
原假设为序列存在单位根,上述三种情况的序列表达式如下:
情况A:
情况B:
402 Payment Required
情况C:
402 Payment Required
假设发生结构性变化的时刻为。上述式子中:
是脉冲虚拟变量(Pulse);当时,,否则为0;
是水平虚拟变量(Level);当时,,否则为0。
1.2 备选假设
备选假设认为冲击前后序列是趋势平稳过程(趋势项0时为平稳过程),此时三种情况的表达式如下:
情况A:
情况B:
情况C:
式中,当时,,;否则均为0。
2 Perron检验
2.1 检验步骤
Perron检验一共分为如下几个步骤:
「第一步」:根据备选假设的表达式对原序列进行OLS回归,得到其残差,记为。
三种情况下,因变量均为原序列值。自变量包括:
A:截距(常数项)、时间项、;
B:截距(常数项)、时间项、;
C:截距(常数项)、时间项、、。
「第二步」:使用OLS方法对第一步得到的残差项进行自回归估计。
Perron检验就是针对的检验。若原序列存在单位根(原假设),则应不显著异于1。不过在对进行显著性检验前,应先进行第三步。
「第三步」:检验上一步的残差是否存在序列相关。若存在,需改变第二步的回归形式,即加入拓展项:
「第四步」:对第二步或第三步得到的进行显著性检验。
根据如下表达式计算t统计量:
不过该统计量并不服从t分布。Perron通过模拟计算了该统计量的一些临界值。下面比较取绝对值:
若t统计量小于临界值,则接受原假设(即序列是方式结构性变化的单位根过程);
若t统计量大于临界值,则拒绝原假设(即序列是方式结构性变化的趋势平稳过程)。
2.2 临界值表
统计量的临界值除了与显著性水平相关外,还和发生结构性变化的位置有关,位置可以使用表示,其中为序列的时间长度(或者说是样本总数)。
Perron计算的临界值表如下:
情况A:

情况B:

情况C:

3 示例
下面根据正反两个示例来说明检验的有效性。
3.1 示例1
本示例为一个平稳序列受到了结构性冲击,即数据生成过程不含单位根。
假设序列,初始值,。序列表达式分为如下两个阶段:
在时,;
在时,其均值增加了,。
首先,生成100个服从正态分布并相互独立的随机数:
set.seed(20220611)
e <- rnorm(100)
然后根据上述表达式模拟的值:
y = 0 + e[1]
for(i in 2:50) {y[i] = 0.5*y[i-1] + e[i]}
for(i in 51:100) {y[i] = 0.5*y[i-1] + e[i] + 5}
plot(y, type = "l", family = "mono")
abline(v = 51, lty = 2, col = "blue")

再使用DF方法(时间序列分析(6)| DF检验)检验序列是否存在单位根:
library(urca)
model.1 <- ur.df(y, type = "none", lags = 0)
model.2 <- ur.df(y, type = "drift", lags = 0)
model.3 <- ur.df(y, type = "trend", lags = 0)
summary(model.3)
## Value of test-statistic is: -2.6856 2.6395 3.6612
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -4.04 -3.45 -3.15
## phi2 6.50 4.88 4.16
## phi3 8.73 6.49 5.47
summary(model.2)
## Value of test-statistic is: -1.1747 0.9737
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.51 -2.89 -2.58
## phi1 6.70 4.71 3.86
summary(model.1)
## Value of test-statistic is: -0.3327
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.6 -1.95 -1.61
可以看出,三个模型的tau
都小于10%显著水平的临界值(取绝对值),说明DF检验不能拒绝原假设,即认为序列存在单位根。
最后使用Perron方法进行单位根检验。
得到残差序列ye
:
DL = c(rep(0,50), rep(1,50))
t = 1:100
ylag = dplyr::lag(y)
ylag[1] = 0
ye = residuals(lm(y ~ t + DL))
plot(ye, type = "l", family = "mono")
lines(e, lty = 2)

对残差进行自回归:
fit.1 <- lm(ye ~ dplyr::lag(ye))
summary(fit.1)
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.002095 0.122998 -0.017 0.986
## dplyr::lag(ye) 0.490381 0.088982 5.511 2.94e-07 ***
a1 = summary(fit.1)$coefficients[2,1] # alpha
b1 = summary(fit.1)$coefficients[2,2] # sd of alpha
(a1-1)/b1
## [1] -5.727196
本例中,计算的t统计量为-5.727196,大于5%显著性水平的临界值-3.76(情况A,比较时取绝对值),因此Perron检验可以拒绝存在单位根的原假设。
3.2 示例2
本示例为一个单位根过程受到结构性冲击,即数据生成过程含有单位根。
以随机游走模型为例,构造序列:
在时,;
当时,序列获得一个脉冲,;
在时,其表达式仍为。
下面使用R程序模拟这一序列,随机数序列仍然使用上个示例的:
z = 0 + e[1]
for(i in 2:50) {z[i] = z[i-1] + e[i]}
z[51] = z[50] + e[51] + 10
for(i in 52:100) {z[i] = z[i-1] + e[i]}
plot(z, type = "l", family = "mono")
abline(v = 51, lty = 2, col = "blue")

进行Perron检验。
得到残差ze
:
zlag = dplyr::lag(z)
zlag[1] = 0
ze = residuals(lm(z ~ t + DL ))
plot(ze, type = "l", family = "mono")
lines(e, lty = 2)

对残差进行自回归:
fit.2 <- lm(ze ~ dplyr::lag(ze))
summary(fit.2)
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.05586 0.10928 0.511 0.61
## dplyr::lag(ze) 0.80586 0.06135 13.135 <2e-16 ***
a2 = summary(fit.2)$coefficients[2,1] # alpha
b2 = summary(fit.2)$coefficients[2,2] # sd of alpha
(a2-1)/b2
## [1] -3.164269
本例中,计算的t统计量为-3.164269,小于5%显著性水平的临界值-3.76(情况A,比较时取绝对值),因此Perron检验不能拒绝存在单位根的原假设。
推荐阅读





