内容来自a little book of r for time series,查看资源请戳:点击打开链接。
翻译基本忠于原文,加上了一些我自己的理解说明,有任何问题欢迎指正,谢谢!
时间序列数据读取
时间序列数据是指按时间排好序的数据。可以指定开始时间,时间周期等参数。
下面是三个时间序列的读取的例子:
1. 英国历任国王去世年龄
ts()方法就是将数据存为时间序列对象kingstimeseries,查看kingstimeseries会看到Start,End,Frequency三个参数,分别是时间序列的开始时间,结束时间和时间周期。在时间序列对象创建时,没有制定的话,开始时间默认start = 1,end =时间序列长度,frequency = 1。
2. 纽约1946年1月到1959年12月的每月新生儿数
这里,设置了start=c(1946,1),就是1946年1月,然后R会根据数据长度自动向后递推,一般end不需要另外设置,从这个角度来看,时间序列的数据必须是连续的区间上的,中间不能有空缺。frequency = 12,1年有12个月,也就是时间序列的周期。周期数据和非周期数据在分析时可能会存在很大差异。
说明:翻译自前面说到的文档中2.2节,这部分数据,英文的意思应该是新生儿的数量,个人不太理解出生人数为什么还有小数点,纽约那么大一个城市一个月只有20多个新生儿,不太合理。在想是不是出生率,出生率=(年内出生数/年内平均人口数)×1000‰,并且出生率在千分之二十多左右也算正常范围。
澳大利亚昆士兰一沙滩旅游胜地某一纪念品店从1987年1月到1993年12月的月销量数据
展示时间序列
使用前面的输入的三个时间序列数据,kingstimeseries、birthtimeseries、souvenirtimeseries,方法plot.ts(),就会将时间序列的走势以折线图的方式展示出来,横轴为时间,纵轴为数据值。三个时间序列的数据分别展示如下:
从这个图看,英国国王逝世年龄比较随机,没有很强的规律性。
这个图很明显能看出一个新生儿出生数,有个按年的周期规律每年的3月左右和10月左右都有出生小高峰。
纪念品的销售额的数据,从1987年到1994年,数据跨度很大,所以可以看到,纵轴变成了科学计数法。这个时间序列数据随时间季节性的波动和随机波动的幅度在增大,不能用加性模型(additive model)描述,可以理解说时间序列不稳定。因此,可以对souvenirtimeseries数据取自然对数,使之更稳定。
说明:加性模型(additive model),网上没有找到很明确的说法。我的理解应该是能用加性模型描述的时间序列应该是我们理解中的平稳时间序列。
这时,取对数后的时间序列随时间的波动幅度变得比较稳定了。
分解时间序列
将时间序列值分解,通常有趋势部分值和无规律部分值,若是周期性的数据,则还可能会有周期部分值。
非周期性数据
非周期性数据可分解为趋势部分和无规律部分。
估算一个可用加性模型描述的非周期性时间序列的趋势部分值,可以使用平滑方法,最常用的是计算时间序列的简单移动平均值。R可以用TTR包中的SMA()方法。
安装好TTR包,加载后。对kingstimeseries数据计算以3为平滑期,即n=3,的简单移动平均值,得到一个新的平滑时间序列。
以3为平滑期得到的时间序列还是存在随机波动,所以可以尝试更大的平滑期,n=8。过程结果如下:
这时得到的趋势部分值就没有了明显的随机波动,显示出一个大的趋势,前20位国王的逝世年龄呈一个下降的趋势,后面逝世年龄逐渐增大,到时间序列的最后第40为国王时,逝世年龄已经增加到了73岁的样子。
周期性数据
周期性时间序列数据可分解为趋势部分,无规律部分和周期性部分。
分解周期性数据,可用R中的decompose()方法,这个方法返回一个list对象,时间序列的趋势部分值,无规律部分值和周期性部分值,分别被存放在其中的trend、seasonal、random对象中。用前面输入的周期性时间序列纽约新生人口数来做这个分解。
“$”符号是R中的一个引用符号,类似其他面向对象中的“.”,表示查看birthstimeseriescomponents这个结构中的seasonal对象,也就是纽约这段时间新生儿月出生率时间序列的季节性部分值。同理,可以用birthstimeseriescomponents$trend和birthstimeseriescomponents$irregular分别查看到,该时间序列趋势部分值和无规律部分值。
查看时间序列分解结果图的方法及结果:
上图中,四个图分别对应原始时间序列、趋势部分、周期性部分、随机部分。同样可以plot(birthstimeseriescomponents$trend)查看每个部分的图。
说明:在R中R Graphics页面,向下滑动鼠标也可以切换到单个部分的图。若是鼠标不够灵敏可能就每次滑动鼠标会跳过几个图,大家可以试试。
这部分讲了时间序列数据输入R中,时间序列数据周期的设置,季节性和非季节性时间数据的区分,还有针对时间序列的分解。后面会涉及的内容是指数平滑法做时间序列的预测,ARIMA模型做时间序列的预测。建议先对这两个算法做一个简单的了解。