之前我们说明了怎么样的时间序列是序列平稳的,但是世界并不是那么美好,很多时间序列都不是平稳序列,所以这里就要求我们做一些处理了。
首先我们来看一下非平稳时间序列长什么样。在AR模型中,只要自回归系数都绝对值都是小于1的,那么序列就是平稳的,所以这样一个序列,自回归系数等于1,就是不平稳的序列了。
yt = yt-1 + c
c是一个服从正态分布的噪音。
#example 10
set.seed(12345)
ut = rnorm(50,0,1.5)
xt = cumsum(ut)
plot(xt,type = 'o');abline(h = 0)
其中,cumsum是一个计算累计数的函数。比如cumsum(c(1,2,3,4,5))=(1,1+2,1+2+3,1+2+3+4.....)=(1,3,6,10......)
这就是对非平稳序列的一个直观的感受了。
非平稳序列往往一次到两次差分之后,就会变成平稳序列。什么是差分呢?就是后一时间点的值减去当前时间点,也就是yt-yt-1。
#example 11
x = 1:10
diff(x,d=1)
diff(x,d=2)
这里,我们对1,2,3,4,5......这个序列做了两次差分,都是后一个数减去前一个数。
值得注意的一点是,每一次差分之后,都会少一个序列值。
#example 12
plot(diff(xt,d = 1),type = 'o');abline(h = 0)
plot(diff(xt,d = 2),type = 'o');abline(h = 0)
我们用之前的序列试一下水,可以看到,一阶差分和二阶差分后,看上去都平稳了呢!
前面我们用肉眼看了序列的平稳性,但是作为一个时间序列分析者,竟然用眼睛主观判断,这有点不合逻辑。很幸运的是,我们根据单位根过程(有兴趣的读者查找相关资料),可以进行假设检验,譬如DF与ADF检验。
adf检验函数包含在tseries这个包中,使用前我们要先引用它。
#example 13
adf.test(xt)
adf.test(diff(xt))
adf.test(diff(xt,d=2))
大家注意看哦,当没有做差分的时候,p-value是0.47+,而备择假设是stationary,也就是平稳时间序列,所以零假设就是非平稳时间序列。p-value>0.05的时候,在95%的置信度下,我们是不能拒绝原假设的,所以我们不能说xt原序列是时序平稳的,但是对于一阶差分和二阶差分就是可以的了。