基于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主题模型时候,发现该模 ...
随机推荐
- scrapy 第一个案例(爬取腾讯招聘职位信息)
import scrapy import json class TzcSpider(scrapy.Spider): # spider的名字,唯一 name = 'tzc' # 起始地址 start_u ...
- 一、利用Python编写飞机大战游戏-面向对象设计思想
相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...
- 004.Heartbeat+HAProxy+MySQL半复制高可用架构
一 基础环境 节点 系统版本 MySQL版本 业务IP 心跳IP Master CentOS 7.5 MySQL 5.6 192.168.88.100 192.168.77.100 Slave Cen ...
- spring_AOP
例子代码 理解AOP AOP为Aspect Oriented Programming的缩写,意为:面向切面编程.大概意思就是在原有源代码的基础上,增加功能,而又不修改原有的代码. 术语 切面(Aspe ...
- javaScript中with函数用法实例分析
javaScript 中的 with 函数 ,即所谓的with 语句,可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性,要给对象创建新的属性,必须明确地引用该对象. with 函 ...
- node 将本地项目docker化
vi test.sh docker rm -f kao3 || echo kao3 not exists;docker run -itd \--privileged=true \-v ~/logs:/ ...
- $.extends 继承原理
<script type="text/javascript"> function mixs (){ var arg = arguments; var i = 1; ta ...
- MySQL之ORDER BY 详细解析
1 概述 MySQL有两种方式可以实现ORDER BY: 1.通过索引扫描生成有序的结果 2.使用文件排序(filesort) 围绕着这两种排序方式,我们试着理解一下ORDER BY的执行过程以及回答 ...
- Sunday串匹配算法 C语言实现
unsigned char * sunday( void * a_buf1, unsigned int len1, void * a_buf2, unsigned int len2 ){ unsign ...
- python系统编程(六)
threading注意点 1. 线程执行代码的封装 通过上一小节,能够看出,通过使用threading模块能完成多任务的程序开发,为了让每个线程的封装性更完美,所以使用threading模块时,往往会 ...