博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简易时间序列分析的方法总结(R实现)
阅读量:6793 次
发布时间:2019-06-26

本文共 3764 字,大约阅读时间需要 12 分钟。

【预备操作】

以下方法请先安装和加载forecast/fpp包

install.packages("forecast")install.packages("fpp")library('forecast')library('fpp')

以下方法被笔者实用在自己论文实验中,相关论文发表在ICTAI 2013

Detecting Impolite Crawler by using Time Series Analysis.

Zhiqian ChenWenya Feng

25th International Conference on Tools and Artificial Intelligence

 

移动平均分解法

用经典的移动平均分解时序为季节性,趋势和不规则部分,使用加法或乘法季节部分。

(Decompose a time series into seasonal, trend and irregular components using moving averages. Deals with additive or multiplicative seasonal component.)

1 births <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat") 2 birthstimeseries <- ts(births, frequency=12, start=c(1946,1)) 注意这里的frequency要和最小单周期长度匹配效果才好(待学习) 3 如需查看可以 birthstimeseries 或 plot.ts(birthstimeseries) 4 birthstimeseriescomponents <- decompose(birthstimeseries) 估计出的季节性、趋势的和不规则部分现在被存储在变量birthstimeseriescomponents$seasonal, birthstimeseriescomponents$trend 和 birthstimeseriescomponents$random6 plot(birthstimeseriescomponents)

以下是去掉季节性的时序 

  7 birthstimeseriesseasonallyadjusted <- birthstimeseries - birthstimeseriescomponents$seasonal

  8 plot(birthstimeseriesseasonallyadjusted)

  7 birthstimeseriesadj <- seasadj(birthstimeseries)

  8 plot(birthstimeseriesadj)

 

局部加权回归法

STL分解基于Loess,即局部加权回归散点平滑法,是1990年由密歇根大学的R. B. Cleveland教授以及AT&T Bell实验室的W. S. Cleveland等人提出来的一种对时间序列进行分解的方法。STL分解将时间序列分解成季节项、趋势项及残余项。 

1 births <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat") 2 birthstimeseries <- ts(births, frequency=12, start=c(1946,1))3 如需查看可以 birthstimeseries 或 plot.ts(birthstimeseries)
4 birthstimeseriescomponents <- stl(birthstimeseries,s.window="periodic") 5 plot(birthstimeseriescomponents)

  6 birthstimeseriescomponents <- forecast(birthstimeseriescomponents)

  7 plot(birthstimeseriescomponents)

笔者尝试用STL预测手头的一个时序数据(第一列是实际观察值(a),第二列是预测值(b),第三列是1-(b-a)/a的百分比格式数据),总体偏大5%-10%,还是不错的:

55701279 58251140 95.42%
64829888 71947199 89.02%
65720870 72256152 90.06%
65596679 69039714 94.75%
64781972 70811590 90.69%
60384601 62627480 96.29%
54116447 56363455 95.85%

  

指数平滑法(HoltWinters)

如果你的时间序列可以被描述为一个增长或降低趋势的、没有季节性的相加模型,你可以使用霍尔特指数平滑法对其进行短期预测。Holt指数平滑法估计当前时间点的水平和斜率。其平滑化是由两个参数控制的,alpha,用于估计当前时间点的水平,beta,用于估计当前时间点趋势部分的斜率。正如简单指数平滑法一样,alpha和beta参数都介于0到1之间,并且当参数越接近0,大多数近期的观测则将占据预测更小的权重。

1 skirts <- scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat",skip=5)  2 skirtsseries <- ts(skirts,start=c(1866))3 plot.ts(skirtsseries)4 skirtsseriesforecasts <- HoltWinters(skirtsseries, gamma=FALSE) 样本内预测,意义?5 plot(skirtsseriesforecasts)6 skirtsseriesforecasts2 <- forecast.HoltWinters(skirtsseriesforecasts, h=19)7 plot.forecast(skirtsseriesforecasts2)

和简单指数平滑法一样,我们瞧瞧样本内预测误差是否在延迟1-20阶时是非零自相关的,以此来检验模型是否还

可以被优化。如裙边数据中,我们可以创建一个相关图,进行Ljung-Box检验

1 acf(skirtsseriesforecasts2$residuals, lag.max=20) 2 Box.test(skirtsseriesforecasts2$residuals, lag=20, type="Ljung-Box")

一般取20阶,而且统计量Q的P值>0.05则不能拒绝随机时序假设(就说无自相关性的随机了,时序无信息。概率越大越确定?),反之则使非白噪声序列。纯随机性检验,P值小于5%,序列为非白噪声

在拿不准情况下可以做正太直方图

 

自回归整合移动平均(ARIMA)

指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求。但是,如果你想使用指数平滑法计算出预测区间,那么预测误差必须是不相关的,而且必须是服从零均值、方差不变的正态分布。 即使指数平滑法对时间序列连续数值之间相关性没有要求,在某种情况下,我们可以通过考虑数据之间的相关性来创建更好的预测模型。自回归移动平均模型(ARIMA)包含一个确定(explicit)的统计模型用于处理时间序列的不规则部分,它也允许不规则部分可以自相关。

1 volcanodust <- scan("http://robjhyndman.com/tsdldata/annual/dvi.dat", skip=1)  2 volcanodustseries <- ts(volcanodust,start=c(1500))  3 plot.ts(volcanodustseries)  4 auto.arima(volcanodust) 根据给出来的参数在下一步选择建模参数order(q,d,p) 5 volcanodustseriesarima <- arima(volcanodustseries, order=c(2,0,0))  6 volcanodustseriesforecasts <- forecast.Arima(volcanodustseriesarima, h=31)  7 plot.forecast(volcanodustseriesforecasts) 

 

参考文献:

本文主要参考, 

某sina网友对STL方法的理解,http://blog.sina.com.cn/s/blog_5ffd41cf01012i5e.html

STL方法发源论文, 

fpp使用理论和具体方法,

robjhyndman教授网站, 

robjhyndman教授的课件, 

 

转载于:https://www.cnblogs.com/aquastar/archive/2012/12/16/2820106.html

你可能感兴趣的文章
ubuntu10.04 –像QQ一样截屏,注解
查看>>
三年观察揭示TNF抑制剂持续改善强柱患者躯体功能的预测因子
查看>>
数据库练习
查看>>
mongodb的开机自启动
查看>>
1303: [CQOI2009]中位数图
查看>>
1011: [HNOI2008]遥远的行星
查看>>
QTP的那些事--有关一个webtable数据的获取案例
查看>>
20190520
查看>>
《Python 二三事》——python学习必看(转载)
查看>>
Minimum Spanning Tree.prim/kruskal(并查集)
查看>>
北邮14&18年软院机试【参考】答案
查看>>
MySQL查询
查看>>
Linux学习笔记04
查看>>
Unity3d热更新之下载
查看>>
设计模式----备忘录模式
查看>>
如何用chkconfig查看手动输入,跳出循环的四个命令
查看>>
ORM了解知识
查看>>
[NHibernate]ISessionFactory配置
查看>>
jboss服务器修改端口说明
查看>>
个人开发—进度记录(三)
查看>>