时间序列分析:ARIMA 过程
Contents [show]
1. 定义
如果序列 {Xt} 不是平稳的,但它的 d 次差分
Wt=∇dXt=(1–B)dXt
是一个平稳的 ARMA(p,q) 过程
Wt=ϕ1Wt−1+ϕ2Wt−2+⋯+ϕpWt−p+et+θ1et−1+⋯+θqet−q
即
ϕ(B)Wt=θ(B)et
则称 {Xt} 为自回归滑动平均求和过程 ARIMA(p,d,q)。由式 (1)、(2),{Xt} 可以表示成
ϕ(B)∇dXt=θ(B)et
即
ϕ(B)(1–B)dXt=θ(B)et
实际应用中,差分的次数(即 d)通常不会太大,通常在一阶或二阶差分后,序列就变成了平稳的了,过多次差分可能会引入额外的依赖。
注意到 ϕ(B)(1–B)d=0 有 d 个根在单位圆上(称为单位根,如 B=1),说明 {Xt} 是非平稳的。如果 ACF 的衰减非常慢,则说明可能需要进行差分。如果时间序列 Xt 的 d 阶差分 ∇dXt 是平稳的,则称 Xt 为 d 阶单整的,记为 I(d),也称序列 Xt 有 d 个单位根。随机游走 Xt=Xt−1+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")
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")