作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言数据高效处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
时滞图
时滞图虽然以前就有所了解,但是没有觉得它效用特别大,但是可能是使用较少所以感悟不够深。fpp2包中的gglagplot可以完成这个任务。我们先画出来,再进行解释:
library(fpp2)
beer2 <- window(ausbeer, start=1992)
gglagplot(beer2)
图中,X轴表示一个数据点在t时刻的数值,而Y轴表示这个时间点在前lag个时刻的数值,左上图lag就是1。可以看到中间有一条等值线,代表该时刻与前lag个时刻的值相等的情况。如果很多值都在等值线附近,说明t与t-lag时刻情况类似,可能存在长度为lag的周期。
本来我认为这种画散点图也能够说明,但是这里的点按照时间先后顺序分别连在了一起,但是却不知道哪里是前面的时刻,哪里是后面的时刻,因此我就提了建议(adding arrows to gglagplot · Issue #7 · robjhyndman/fpp2-package),后面这里的可视化可能会加上箭头。不过主要的作用还是看,多长时间可能存在自相关的关系,从而识别周期的长度。
自相关
同样一个指标,如果时间靠的比较近,那么它们的数值也可能相近。一个序列,与它的延时序列(t-n时刻的序列),所存在的相关关系,称之为自相关,一般使用相关系数来计算。
举一个简单的例子,基本包中可以用acf函数来对上面提到的beer2变量进行绘图:
acf(beer2)
如果想直接获得数值,把参数plot设置为F即可:
acf(beer2,plot = F)
Autocorrelations of series ‘beer2’, by lag
0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 2.25 2.50 2.75 3.00 3.25
1.000 -0.102 -0.657 -0.060 0.869 -0.089 -0.635 -0.054 0.832 -0.108 -0.574 -0.055 0.774 -0.080
3.50 3.75 4.00 4.25 4.50
-0.568 -0.066 0.706 -0.065 -0.528
可以看到,时滞为0的时候,两个序列的相关系数为1,即完全正相关。通过图片也可以看出来,延迟2或4的时候,相关性都非常大,存在很强的季节性特征。事实上,这是一份澳大利亚啤酒产量的数据,我们直接对这个数据进行可视化:
autoplot(beer2)
具有明显的季节特征。不过在fpp2包中,相对应来可视化ACF的函数是ggAcf,我们看看效果:
ggAcf(beer2)
但是显示时滞多长的数据是可以调节的,可以通过调整lag.max来进行设置。
白噪声
如果一个序列是完全随机的,就称之为白噪声,白噪声中已经没有更多有价值的信息可以提取。R语言中可以使用rnorm函数来生成一个随机序列,我们可以看看随机序列的样子:
set.seed(30)
y <- ts(rnorm(50))
autoplot(y) + ggtitle("White noise")
白噪声的话,数据的前后之间不存在任何相关性:
ggAcf(y)
参考资料: