R语言时间序列分析

2018 年 11 月 19 日 R语言中文社区
作者简介Introduction

郑连虎,在数学学院取得理学学位的文科生,中国人民大学硕博连读生在读,山东大学管理学学士、理学学士

个人公众号:阿虎定量笔记


方法简介

时间序列是按时间顺序的一组数字序列。时间序列分析(time series analysis)就是利用这组数列,基于随机过程理论和数理统计学方法加以处理,以预测未来事物的发展。时间序列分析是定量预测方法之一,它的基本原理:一是承认事物发展的延续性。应用过去数据,就能推测事物的发展趋势;二是考虑到事物发展的随机性。任何事物发展都可能受偶然因素影响,为此要利用统计分析中加权平均法对历史数据进行处理。时间序列预测一般反映三种实际变化规律:趋势变化、周期性变化、随机性变化。

时间序列分析一般采用曲线拟合参数估计(如非线性最小二乘法)来建立数学模型,一个时间序列通常由4种要素组成:趋势、季节变动、循环波动和不规则波动。

- 趋势:是时间序列在长时期内呈现出来的持续向上或持续向下的变动;

- 季节变动:是时间序列在一年内重复出现的周期性波动。它是诸如气候条件、生产条件、节假日或人们的风俗习惯等各种因素影响的结果;

- 循环波动:是时间序列呈现出的非固定长度的周期性变动。循环波动的周期可能会持续一段时间,但与趋势不同,它不是朝着单一方向的持续变动,而是涨落相同的交替波动;

- 不规则波动:是时间序列中除去趋势、季节变动和周期波动之后的随机波动。不规则波动通常总是夹杂在时间序列中,致使时间序列产生一种波浪形或震荡式的变动。只含有随机波动的序列也称为平稳序列;

 

建模步骤

- 用观测、调查、统计、抽样等方法取得被观测系统时间序列动态数据;

- 根据动态数据作相关图,进行相关分析,求自相关函数。相关图能显示出变化的趋势和周期,并能发现跳点和拐点。跳点是指与其他数据不一致的观测值。如果跳点是正确的观测值,在建模时应考虑进去,如果是反常现象,则应把跳点调整到期望值。拐点则是指时间序列从上升趋势突然变为下降趋势的点。如果存在拐点,则在建模时必须用不同的模型去分段拟合该时间序列,例如采用门限回归模型;

- 辨识合适的随机模型,进行曲线拟合,即用通用随机模型去拟合时间序列的观测数据。对于短的或简单的时间序列,可用趋势模型和季节模型加上误差来进行拟合。对于平稳时间序列,可用通用ARIMA模型(自回归移动平均模型)及其特殊情况的自回归模型、移动平均模型或组合ARMA模型等来进行拟合。当观测值多于50个时一般都采用ARMA模型。对于非平稳时间序列则要先将观测到的时间序列进行差分运算,化为平稳时间序列,再用适当模型去拟合这个差分序列;

 

预测算法

给定一个时间序列,如何预测下一个值?统计学上有以下几种思路:

mean(平均值):未来值是历史值的平均;

exponential smoothing(指数衰减):当去平均值得时候,每个历史点的权值可以不一样;最自然的就是越近的点赋予越大的权重;

snaive:假设已知数据的周期,那么就用前一个周期对应的时刻作为下一个周期对应时刻的预测值;

drift(飘移):用最后一个点的值加上数据的平均趋势;

Holt-Winters(三阶指数平滑):把数据分解成三个成分:平均水平(level),趋势(trend)和周期性(seasonality);

ARIMA(自回归移动平均模型):模型的形式为 ARIMA(p,d,q),其中p为自回归项,q为移动平均项数,d为时间序列成平稳所做的差分次数;

 

数据来源

小编最近发现一个很好用的数据库:Data Market;这个数据库包含许多类型的数据,其中就包括时间序列数据库(The Time Series DataLibrary, TSDL);该数据库由澳大利亚Monash University的Rob Hyndman教授创建,网址为

https://datamarket.com/data/list/?q=provider:tsdl

该数据库提供5种格式的数据下载:Excel (.xls)/(.xlsx)、CSV (,)/(;)以及TSV (\t);小编选用TSDL中的“Dutchweekly survey on left-right political orientation (1978-1996)(左右政治倾向的每周调查)”数据来演示时间序列分析的R语言实现过程;该数据的受访者针对荷兰6个主要政治团体:CDA(中央基督教民主党派)、D66(中央自由党)、GLEF(小左派)、ORR(三个小正统宗教右翼派对的集合)、PVDA(左翼社会民主党派)、VVD(右翼自由保守党),以1-7分计分的形式,表达自己的“左-右”政治倾向;为方便演示,本期仅使用CDA部分的数据。


 

R语言实现

时间序列分析的R语言过程,可以分为两个主要部分:数据预处理(定义日期、平稳性判断、季节分解)和趋势预测(模型选择);

- 读入数据

我这里的数据存在D盘,请注意文件读取路径:

orientation = read.csv('D:/weekly_survey.csv',header=F,sep='')

o <-unlist(orientation)

- 定义日期并绘制时间序列图

我这里数据是每周调查的数据,一年有53个星期,故frequency=53;如果是月度数据,则frequency=12;如果是季度数据,则frequency=4:

ots<-ts(o,frequency=53,start=1978)

plot.ts(ots)



- 季节分解

时间序列数据分为非季节性数据季节性数据:一个非季节性时间序列包含一个趋势部分和一个不规则部分,分解时间序列就是估计趋势的和不规则的这两个部分;一个季节性时间序列包含一个趋势部分、一个季节性部分和一个不规则部分,分解时间序列就意味着要把时间序列分解为这三个部分。下图自上而下展现了原始的时间序列图、估计出的趋势部分、估计出的季节性部分、估计得不规则部分。季节性变动指由于季节因素导致的时间序列有规则变动;无季节变动的数据不需要这一步处理:

ots_components <- decompose(ots)

plot(ots_components)



- 平稳性判断

平稳性判断主要用到两个工具:自相关函数(auto correlation function, ACF)和偏自相关函数(patialauto correlation function, PACF);对于non-stationary的数据,ACF图不会趋向于0,或者趋向0的速度很慢;对于含有趋势的非平稳时间序列,通常可以通过引入ARIMA模型对其变换:ARIMA模型对于非平稳时间序列采用的方法是,运用差分运算提取趋势信息,最终把序列变为平稳序列。下面的四张图从左到右、自上而下分别对应原始数据的自相关函数、原始数据的偏自相关函数、原始数据一阶差分后的自相关函数、原始数据去除周期性后一阶差分的自相关函数:

acf(ots)

pacf(ots)

acf(diff(ots,lag=1))

acf(diff(diff(ots,lag=7)))



- 安装并调用forecast包

install.packages("forecast")

library(forecast) 

- 趋势预测

auto.arima函数会自动挑选一个最恰当的算法去分析数据;下图中蓝线是受访者政治倾向的预测,深灰色阴影区域为80%的预测区间,浅灰色阴影区域为95%的预测区间;电脑运行这段代码时速度可能会慢,请耐心等待:

ots_forecast<- auto.arima(ots)

ots_arima <- forecast(ots_forecast,h=30)

plot (ots_arima)



本期参考文献

[1] 王振龙,胡永宏. 应用时间序列分析. 科学出版社, 2012,p1-27;

[2] Eisinga, R. and Franses, P.H. and Ooms, M. Forecasting longmemory right-left political orientations’. International Journal of Forecasting.1999, p185-199;


精彩回顾

R语言绘图:28个实用程序包

Stata绘图:简单好用的37条外部命令

技术贴│Stata回归图表美化

SPSS时间序列分析

R语言图形界面R commander

R语言数据挖掘利器:Rattle包


公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战  
回复 
Python       1小时破冰入门

回复 数据挖掘     R语言入门及数据挖掘
回复 
人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

登录查看更多
12

相关内容

时间序列(或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。时间序列分析的主要目的是根据已有的历史数据对未来进行预测。经济数据中大多数以时间序列的形式给出。根据观察时间的不同,时间序列中的时间可以是年份、季度、月份或其他任何时间形式。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
287+阅读 · 2020年6月3日
【干货书】R语言书: 编程和统计的第一课程,
专知会员服务
111+阅读 · 2020年5月9日
【经典书】机器学习高斯过程,266页pdf
专知会员服务
228+阅读 · 2020年5月2日
缺失数据统计分析,第三版,462页pdf
专知会员服务
108+阅读 · 2020年2月28日
WSDM 2020教程《深度贝叶斯数据挖掘》,附257页PPT下载
专知会员服务
156+阅读 · 2020年2月7日
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
基于R语言进行Box-Cox变换
R语言中文社区
45+阅读 · 2018年11月19日
R语言数据挖掘利器:Rattle包
R语言中文社区
21+阅读 · 2018年11月17日
一文梳理数据科学家必备核心算法与常用模型
THU数据派
16+阅读 · 2018年5月10日
R语言之数据分析高级方法「时间序列」
R语言中文社区
17+阅读 · 2018年4月24日
15款免费预测分析软件!收藏好,别丢了!
七月在线实验室
10+阅读 · 2018年2月27日
【入门】数据分析六部曲
36大数据
18+阅读 · 2017年12月6日
回归预测&时间序列预测
GBASE数据工程部数据团队
43+阅读 · 2017年5月17日
Arxiv
18+阅读 · 2019年1月16日
Arxiv
8+阅读 · 2018年6月19日
Arxiv
5+阅读 · 2018年5月5日
Arxiv
3+阅读 · 2018年4月9日
VIP会员
相关VIP内容
相关资讯
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
基于R语言进行Box-Cox变换
R语言中文社区
45+阅读 · 2018年11月19日
R语言数据挖掘利器:Rattle包
R语言中文社区
21+阅读 · 2018年11月17日
一文梳理数据科学家必备核心算法与常用模型
THU数据派
16+阅读 · 2018年5月10日
R语言之数据分析高级方法「时间序列」
R语言中文社区
17+阅读 · 2018年4月24日
15款免费预测分析软件!收藏好,别丢了!
七月在线实验室
10+阅读 · 2018年2月27日
【入门】数据分析六部曲
36大数据
18+阅读 · 2017年12月6日
回归预测&时间序列预测
GBASE数据工程部数据团队
43+阅读 · 2017年5月17日
Top
微信扫码咨询专知VIP会员