非平稳时间序列预测

Posted Go一起学统计

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非平稳时间序列预测相关的知识,希望对你有一定的参考价值。

人们喜欢对时间序列数据做预测,然后做出相应控制策略,比如:人们想知道若干年后气候变化情况,产品销量情况,患病人数等等,那么什么是时间序列呢?时间序列是同一现象在不同时间上的相继观察值排列而成的序列,可分为平稳序列和非平稳序列。平稳序列是指在某个固定水平上波动,基本不存在趋势的序列;非平稳序列是指由趋势(T)、季节性(S)、周期性(C)这三种成分中的一种或几种组成的模型序列,除此之外非平稳序列中还含有随机性(I)。


趋势:通常观测数据在长期内呈上升或下降趋势,趋势可以是线性代的,也可以是非线性的。

季节性:一年内重复出现的周期性波动,季节是泛指,不一定是季度,也可以是月份等。

周期性:长期上看呈现一种波浪或振荡形变动,不同于季节性,周期性的时间通常在一年以上。

非平稳序列在建模时常见模型有加法模型和乘法模型,模型如下:

非平稳时间序列预测

我们通常先抛出散点图看趋势,然后确定时序模型由哪些成分构成,然后做模型、预测数据。


当数据表现出来只有趋势项时,用Holt exponential smoothing模型。

Eg:已知重庆市2000年~2015年社会消费品零售总额(万元)和对外经济合作实际完成营业额(万美元)数据,预测2016~2018年的数据。

数据:

 非平稳时间序列预测

先看看数据分布散点图:

非平稳时间序列预测

数据只包含趋势项,用Holt exponential smoothing模型。

预测结果:

关于社会消费品零售总额的预测结果:

 非平稳时间序列预测

AAN是模型类型,Holt exponential smoothing模型。

alpha控制水平指数下降,beta控制斜率的指数型下降。两参数取值范围都是[0,1],参数越大,越接近的观测值权重越大。

sigma是RMSE(平均残差平方和的平方根),反映的是数据离散程度,sigma越小预测的越精准。这里sigma值1337557,看着比较吓人,实际上原始数据是上千万的数据,这里的sigma比原始数据少一个量级,不过总的来说离散度还是有些高。

非平稳时间序列预测

2016~2018三年的社会消费品零售总额预测结果为:71192540,78214432和85236323。后面四列是80%的置信区间和95%的置信区间,如2016年数据95%的置信区间为[68570976,73814104]。

非平稳时间序列预测

这里有七个判定预测精度的数据,常用RMSE,就是上面出现的sigma值。

关于对外经济合作实际完成营业额的预测结果:

 非平稳时间序列预测

 非平稳时间序列预测非平稳时间序列预测

 

这里就不分析了。

两个变量预测效果图

 非平稳时间序列预测


当数据表现出趋势和季节性时,用Holt-Winters exponential smoothing模型,只需在代码中把ets(data,model=’’)中的model换成AAA。

然后我们会想到如果遇到既有季节性又有周期性的数据了,我们又将如何处理?

可以用Double-Seasonal Holt-Winters Forecasting模型,

函数为dshw(y, period1=NULL, period2=NULL, h=2*max(period1,period2),

    alpha=NULL, beta=NULL, gamma=NULL, omega=NULL, phi=NULL,

    lambda=NULL, biasadj=FALSE, armethod=TRUE, model = NULL),这里要感谢R语言中文社区里面的祝姓朋友,他(她)给我推荐的这个模型。


Holt exponential smoothing模型完整代码:

times<-read.csv('tm1.csv')#读取数据

attach(times)#方便下面直接输入tm1中的变量

par(mfrow=c(2,2))#图形按两行两列摆放

plot(年份,社会消费品零售总额)#画散点图

plot(年份,对外经济合作实际完成营业额)

#cran安不好,github都安装了4次才安好,我也是醉了

library(devtools)

#install_github('robjhyndman/forecast')#安装forecast包

library(forecast)

t1<-ts(社会消费品零售总额,start=2000,end=2015)#ts()函数存储为时序对象

get1<-ets(t1,model='AAN')#AAN为Holt exponential smoothing模型

get1

forecast(get1,3)#预测三个数据

par(mfrow=c(2,2))

plot(forecast(get1,3),xlab='年份',ylab ='社会消费品零售总额',main='社会消费品零售总额预测图')#画出预测图

accuracy(get1)#预测准确的的度量

t2<-ts(对外经济合作实际完成营业额,start=2000,end=2015)

get2<-ets(t2,model='AAN')

get2

forecast(get2,3)

plot(forecast(get1,3),xlab='年份',ylab ='对外经济合作实际完成营业额',main='对外经济合作实际完成营业额预测图')

accuracy(get2)


参考文献:

[1] [美]Robert I. Kabacoff.王小宁,刘撷芯,黄俊文等译.R语言实战(第二版)[M].北京:人民邮电出版社,2016

[2] 贾俊平,何晓群,金勇进.统计学(第四版)[M].北京:中国人民大学出版社,2009

长按二维码
关注我们吧



以上是关于非平稳时间序列预测的主要内容,如果未能解决你的问题,请参考以下文章

判定数据序列平稳与否的方法有哪些?

时间序列-1

时间序列分析

如何用SPSS判别时间序列是不是平稳?

基于Holt-Winters方法对资源进行预测

时间序列分析和预测