基于R语言的ARIMA模型
A
IMA模型是一种著名的时间序列预测方法,主要是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型。ARIMA模型根据原序列是否平稳以及回归中所含部分的不同,包括移动平均过程(MA)、自回归过程(AR)、自回归移动平均过程(ARMA)以及ARIMA过程。其中ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数。
通常的建立ARIMA模型需要以下几步:
1.数据的预处理。对时间序列数据的平稳性和纯随机性进行检验,根据检验结果来判断时间序列的类型,以便选择合适的方法建立模型。
平稳性是指围绕着一个常数上下波动且波动范围有限,即有常数均值和常数方差。如果有明显的上升或下降趋势或周期性,那它通常不是平稳序列。
三种常用的检验平稳性的方法:
(1)时序图。通过时序图来观察。一般而言,平稳序列始终在一个常数值附近随机波动,且波动范围有界;非平稳序列则有明显的趋势性或周期性。
(2)自相关与偏相关系数检验。在自相关图中,在那一阶数值高于虚线即表明自相关系数>0.5,就存在那一阶自相关(偏自相关一样)。随着滞后数(延迟期数)的增加,平稳序列自相关系数会很快衰减至0而非平稳序列衰减速度通常较慢。若自相关图呈现三角对称性则为单调趋势的非平稳序列。自相关系数长期位于零轴一边表示有单调趋势序列。自相关系数呈现明显正弦波动规律则表明有周期变化规律。
(3)单位根检验(ADF)。单位根检验是指检验序列中是否存在单位根,如果存在单位根就是非平稳时间序列。若P值<0.05,为平稳
如果时间序列不平稳该怎么办?
(1)对数变换。对数变换主要是为了减小数据的振动幅度,使其线性规律更加明显,对数变换相当于增加了一个惩罚机制,数据越大其惩罚越大,数据越小惩罚越小。这里强调一下,变换的序列需要满足大于0,小于0的数据不存在对数变换。
(2)差分。k阶差分就是相距k期的两个序列值之间相减。若有季节趋势还可以进行k-4步差分,年度趋势则相应的K-12差分。
(3)平滑。
(4)分解,即将将时序数据分离成不同的成分。
纯随机性检验:
纯随机序列,又称白噪声序列,序列的各项数值之间没有任何相关关系,序列在进行完全无序的随机波动,可以终止对该序列的分析。白噪声序列是没有信息可提取的平稳序列。若检验后P<0.05,说明不是白噪声序列。
2.对(处理后的)平稳数据进行建模。若某个时间序列数据经过预处理之后,被判定为平稳非白噪声序列,就可以进行时间序列建模。
3.对模型的检验、优化及应用。
###########################################################################################
案 例
###########################################################################################
数据来源SPSS Clementine 案例中关于男装生产线月销量,详细见Clementine中catalog_forecast.str 流。
步骤一:导入xlsx格式数据。
library(xlsx) #导入xlsx包
library(forecast)
library(tseries)
sale<-read.xlsx(“C:/pythonshu/shijian.xlsx”,1)#导入数据
步骤二:建立模型并检验。
saletimeseries<-ts(sale,frequency = 12,start =c(1989,1))#构造时间序列
plot.ts(saletimeseries)#时序图。分析时序图可以看出,该时间序列成明显的季节上升趋势,通过自相关和偏自相关检验也验证了这一观点。
adf.test(saletimeseries)#平稳性检验0.01,为平稳性数据
a1<-auto.arima(saletimeseries,trace = TRUE)#auto.arima自动定阶
a2<-arima(saletimeseries,order = c(0,0,0),seasonal = c(0,1,1))#建立模型
a3<-forecast.Arima(a2,h=12,level=c(99.5))#预测
plot(a3)
Box.test(a3$residuals)#0.2388<0.05残差非白噪声,说明可能还有信息没有提取出。
3:模型的优化。
选择利用1-12阶差分优化模型。差分后的数据依然平稳,但在1阶、12阶、24阶时可能存在自相关,且认为是偶然因素造成。
diff1<-diff(saletimeseries,1)
adf.test(diff1)#p<0.01,平稳
acf(diff1,lag.max = 24)
Box.test(diff1)#3.511e-06<0.05,为平稳非白噪声
a4<-auto.arima(diff1,trace = TRUE)#定阶,
a5<-arima(saletimeseries,order = c(5,0,0),seasonal = c(1,1,0))#建立模型
a6<-forecast.Arima(a5,h=12,level=c(99.5))#对后12期进行预测。#设置预测期数h与置信度水平
plot(a6)
Box.test(a6$residuals)#P=0.5866>0.05,残差序列为白噪声,说明建模成功。
对后12期的预测数据如下表所示。
转自:http://www.shujudata.top/基于r语言的arima模型/
基于R语言的ARIMA模型的更多相关文章
- R语言的ARIMA模型预测
R通过RODBC连接数据库 stats包中的st函数建立时间序列 funitRoot包中的unitrootTest函数检验单位根 forecast包中的函数进行预测 差分用timeSeries包中di ...
- 不知道怎么改的尴尬R语言的ARIMA模型预测
数据还有很多没弄好,程序还没弄完全好. > read.xlsx("H:/ProjectPaper/论文/1.xlsx","Sheet1") > it ...
- Redhat 5.8系统安装R语言作Arima模型预测
请见Github博客:http://wuxichen.github.io/Myblog/timeseries/2014/09/02/RJavaonLinux.html
- 基于R语言的时间序列指数模型
时间序列: (或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列.时间序列分析的主要目的是根据已有的历史数据对未来进行预测.(百度百科) 主要考虑的因素: 1.长期趋势(Lon ...
- 概率图模型 基于R语言 这本书中的第一个R语言程序
概率图模型 基于R语言 这本书中的第一个R语言程序 prior <- c(working =0.99,broken =0.01) likelihood <- rbind(working = ...
- R语言︱LDA主题模型——最优主题...
R语言︱LDA主题模型——最优主题...:https://blog.csdn.net/sinat_26917383/article/details/51547298#comments
- Twitter基于R语言的时序数据突变检测(BreakoutDetection)
Twitter开源的时序数据突变检测(BreakoutDetection),基于无参的E-Divisive with Medians (EDM)算法,比传统的E-Divisive算法快3.5倍以上,并 ...
- [R语言]forecast.Arima中使用xreg报错
问题: 使用forecast.Arima对带xreg的arima模型进行预测,报xreg Error pre.m4x <- forecast.Arima(m4x, h = 20, xreg = ...
- R语言︱LDA主题模型——最优主题数选取(topicmodels)+LDAvis可视化(lda+LDAvis)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:在自己学LDA主题模型时候,发现该模 ...
随机推荐
- jOOR
--摘自<android插件化开发指南> 1.jOOR库就一个Reflect.java类很重要 2.Reflect.java包括6个核心方法 1)on:包裹一个类或者对象,表示在这个类或对 ...
- 【JavaScript】underscore
例: 'use strict'; _.map([1, 2, 3], (x) => x * x); // [1, 4, 9] No1: [every/some] 当集合的所有元素都满足条件时,_. ...
- vue笔记-模板,计算属性,class与style,data属性
数据和方法 1:只有当实例被创建时 data 中存在的属性才是响应式的,也可以预定义一些空的属性,唯一的意外就是Object.freeze(obj),这会阻止修改现有的属性;也就是说一个数据在放到根实 ...
- hexo博客pure主题解决不蒜子计数不显示的问题
最近在建个人博客网站,想统计自己的博客页面访问量,就用到了不蒜子页面访问统计.可是遇到了糟心事,居然不显示!!! 不蒜子官网示例:两行代码,搞定计数 <script async src=&quo ...
- .NET Core 2.0应用程序大小减少50%
.NET Core 2.0应用程序减小体积瘦身官方工具 IL Linker. IL Linker 来源于mono的linker https://github.com/mono/linker,目前还是 ...
- python数据结构之队列(二)
书接上文,双端队列区别于单队列为:双端队列可以对队列头和尾部同时进行操作,单队列不行 #coding:utf-8 class DoubleQueue(object): def __init__(sel ...
- linux 学习笔记 软件包管理
>查询文件所属软件包 #rpm -qf /usr/share/pixmaps/xplns.png 查询某个文件所属软件包 >查询软件包所包含文件列表 #rpm -ql xplus-3.3. ...
- Alpha(10/10)
鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...
- C#循环语句整理
for.while.do while和switch暂时没发现与c++的不同,这里只整理foreach. foreach foreach的作用是遍历集合中的所有元素.foreach语句中的表达式由关键字 ...
- npm快速入门
npm快速入门 npm是javascript包管理工具,由三部分组成: 网站:开发者查找包(package).设置参数以及管理 npm 使用体验的主要途径 注册表:是一个巨大的数据库,保存了每个包(p ...