时间序列分析:ARIMA 过程

1. 定义

  如果序列 {Xt} 不是平稳的,但它的 d 次差分

Wt=dXt=(1B)dXt

是一个平稳的 ARMA(p,q) 过程

Wt=ϕ1Wt1+ϕ2Wt2++ϕpWtp+et+θ1et1++θqetq

ϕ(B)Wt=θ(B)et

则称 {Xt}自回归滑动平均求和过程 ARIMA(p,d,q)。由式 (1)(2){Xt} 可以表示成

ϕ(B)dXt=θ(B)et

ϕ(B)(1B)dXt=θ(B)et

  实际应用中,差分的次数(即 d)通常不会太大,通常在一阶或二阶差分后,序列就变成了平稳的了,过多次差分可能会引入额外的依赖。

  注意到 ϕ(B)(1B)d=0d 个根在单位圆上(称为单位根,如 B=1),说明 {Xt} 是非平稳的。如果 ACF 的衰减非常慢,则说明可能需要进行差分。如果时间序列 Xtd 阶差分 dXt 是平稳的,则称 Xtd 阶单整的,记为 I(d),也称序列 Xtd 个单位根。随机游走 Xt=Xt1+et 可以看成是 ARIMA(0,1,0),有一个单位根。

2. 模拟

  模拟不同参数的 ARIMA(1,1,1) 过程如图 1、图 2所示。

set.seed(42)
arima.1 <- arima.sim(n = 100, list(order = c(1,1,1), ar = c(0.7), ma = c(0.2)))
plot.ts(arima.1, type = "o",
main=expression(paste("ARIMA(1, 1, 1), ", phi, "=0.7, ", theta, "=0.2")), ylab = "x")
set.seed(42) arima.1 <- arima.sim(n = 100, list(order = c(1,1,1), ar = c(0.7), ma = c(0.2))) plot.ts(arima.1, type = "o", main=expression(paste("ARIMA(1, 1, 1), ", phi, "=0.7, ", theta, "=0.2")), ylab = "x")
set.seed(42)
arima.1 <- arima.sim(n = 100, list(order = c(1,1,1), ar = c(0.7), ma = c(0.2)))
plot.ts(arima.1, type = "o",
        main=expression(paste("ARIMA(1, 1, 1), ", phi, "=0.7, ", theta, "=0.2")), ylab = "x")

图 1

set.seed(42)
arima.2 <- arima.sim(n = 100, list(order = c(1,1,1), ar = c(-0.7), ma=c(-0.2)))
plot.ts(arima.2, type = "o",
main=expression(paste("ARIMA(1, 1, 1), ", phi, "=-0.7, ", theta, "=-0.2")), ylab = "x")
set.seed(42) arima.2 <- arima.sim(n = 100, list(order = c(1,1,1), ar = c(-0.7), ma=c(-0.2))) plot.ts(arima.2, type = "o", main=expression(paste("ARIMA(1, 1, 1), ", phi, "=-0.7, ", theta, "=-0.2")), ylab = "x")
set.seed(42)
arima.2 <- arima.sim(n = 100, list(order = c(1,1,1), ar = c(-0.7), ma=c(-0.2)))
plot.ts(arima.2, type = "o",
        main=expression(paste("ARIMA(1, 1, 1), ", phi, "=-0.7, ", theta, "=-0.2")), ylab = "x")

图 2