时间序列与R语言应用(part3)--趋势平稳与差分平稳

895 阅读3分钟

学习笔记

参考书籍:《计量经济学》


趋势平稳与差分平稳

趋势平稳与差分平稳随机过程

  • 虚假回归

一些非平稳的经济时间序列往往表现出共同的变化趋势,而这些序列间本身不一定有直接的关联关系,这时对这些数据进行回归,尽管有较高的R2R^2,但其结果是没有任何实际意义的,这种现象我们称之为虚假回归

为了避免这种虚假回归的产生,通常的做法是引入作为趋势变量的时间tt,这样包含有时间趋势变量的回归,可以消除这种趋势性的影响。然而这种做法,只有当趋势性变量是确定性的而不是随机性的,才会是有效的。换言之,一个包含有某种确定性趋势的非平稳时间序列,可以通过引入趋势变量,而将确定性趋势分离出来。

  • 随机性趋势与确定性趋势

考虑如下的含有1阶自回归的随机过程:

Xt=α+βt+ρXt1+μt(1)X_t=\alpha + \beta t + \rho X_{t-1} + \mu_t\tag{1}

其中μt\mu_t为白噪声,tt为一个时间趋势。

如果ρ=1,β=0\rho=1, \beta =0,则(1)式为一个带位移的随机游走过程。根据α\alpha的正负,XtX_t表现出明显的上升或下降趋势,这种趋势称为随机性趋势

如果ρ=0,β0\rho=0, \beta \neq0,则(1)式为一个带时间趋势的随机变化过程,根据β\beta的正负,XtX_t表现出明显的上升或下降趋势,这种趋势称为确定性趋势

如果ρ=1,β0\rho=1, \beta \neq0,则XtX_t包含确定性与随机性两种趋势

判断一个非平稳的时间序列,它的趋势是随机性的还是确定性的,可通过ADF检验中所用的第3个模型:

ΔXt=α+βt+δXt1+i=1mβiΔXti+ϵt(2)\Delta X_t= \alpha+ \beta t+ \delta X_{t-1}+\sum_{i=1}^m\beta_i \Delta X_{t-i}+\epsilon_t\tag{2}

如果检验结果表明所给时间序列有单位根,且时间变量tt前的参数显著为零,则该序列显示出随机性趋势。如果没有单位根,且时间变量tt前的参数显著地异于零,则该序列显示出确定性趋势。

  • 差分平稳过程与趋势平稳过程

随机性趋势可通过差分的方法消除,比如一个带位移的随机游走过程,就可以通过差分的方法使其平稳:

Xt=α+Xt1+μtΔXt=α+μt(3)X_t=\alpha + X_{t-1} + \mu_t \Rightarrow \Delta X_t=\alpha + \mu_t\tag{3}

该时间序列XtX_t称为差分平稳过程

然而确定性趋势无法通过差分的方法消除,只能通过除去趋势项消除,如比如一个带时间趋势的随机变化过程,可以通过去除时间变量tt,使其平稳:

Xt=α+βt+μtXtβt=α+μt(4)X_t=\alpha + \beta t + \mu_t \Rightarrow X_t - \beta t=\alpha + \mu_t\tag{4}

该时间序列XtX_t称为趋势平稳过程。趋势平稳过程代表了一个时间序列长期稳定的变化过程,因而用于进行长期预测更为可靠。

R语言实现

下面将模拟2个时间序列,通过ADF检验,判断序列具有哪种趋势(随机性or确定性)

模拟序列(随机游走):

#模拟随机游走
set.seed(1238)
n <- 1000
y <- vector(length = n)
y[1] = 0
for (i in 2:n){
  y[i] = y[i-1] + rnorm(1, 0, 1/n)
}

#利用ADF检验中的模型3,获取时间变量tt的显著性检验结果
x <- y
k <- 1
x <- as.vector(x, mode = "double")
x_1 <- diff(x)
n <- length(x_1)
z <- embed(x_1, k)
yt <- z[, 1]
xt1 <- x[k:n]
tt <- k:n
res <- lm(yt ~ xt1 + 1 + tt)
summary(res)$coefficients

#ADF检验结果
adf.test(y)$p.value

控制台输出结果:

> summary(res)$coefficients
                 Estimate   Std. Error    t value   Pr(>|t|)
(Intercept) -3.512132e-05 6.686299e-05 -0.5252729 0.59951037
xt1         -4.570506e-03 3.345454e-03 -1.3661843 0.17218951
tt           2.859225e-07 1.665257e-07  1.7169867 0.08629248

> adf.test(y)$p.value
[1] 0.8823519

由结果可知,时间变量tt的回归系数,在大于0.05的显著性水平,不能拒绝回归系数为0的假设,说明没有确定性趋势,而ADF单位根检验结果说明了,该序列存在单位根,则存在随机性趋势。

模拟序列:

n <- 100
x <- c(1:n)
z <- rnorm(n, 0, 1/n)
y <- 2*x + 3 + z

#利用ADF检验中的模型3,获取时间变量tt的显著性检验结果
x <- y
k <- 1
x <- as.vector(x, mode = "double")
x_1 <- diff(x)
n <- length(x_1)
z <- embed(x_1, k)
yt <- z[, 1]
xt1 <- x[k:n]
tt <- k:n
res <- lm(yt ~ xt1 + 1 + tt)
summary(res)$coefficients

#ADF检验结果
adf.test(y)$p.value

控制台输出结果:

> summary(res)$coefficients
              Estimate Std. Error   t value     Pr(>|t|)
(Intercept)  4.7066541  0.3032464 15.520891 6.454279e-28
xt1         -0.9024946  0.1010956 -8.927142 2.998167e-14
tt           1.8050169  0.2021935  8.927177 2.997647e-14

> adf.test(y)$p.value
[1] 0.01

由结果可知,时间变量tt的回归系数,在小于0.05的显著性水平,拒绝回归系数为0的假设,说明存在确定性趋势,而ADF单位根检验结果说明了,该序列不存在单位根,则没有随机性趋势。