基于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主题模型时候,发现该模 ...
随机推荐
- HDFS分布式文件系统的常用命令行操作
一.HDFS的客户端种类 1.网页形式 =>用于测试 网址为你的namenode节点的ip+50070的端口号,如: 192.168.50.128:50070 2.命令行形式 =>用于测 ...
- NSL:CPK_NN神经网络实现预测哪个样本与哪个样本处在同一层,从而科学规避我国煤矿突水灾难—Jason niu
load water_data.mat attributes = mapminmax(attributes); P_train = attributes(:,1:35); T_train = clas ...
- TF之BN:BN算法对多层中的每层神经网络加快学习QuadraticFunction_InputData+Histogram+BN的Error_curve
# 23 Batch Normalization import numpy as np import tensorflow as tf import matplotlib.pyplot as plt ...
- stm32中断优先级管理与外部中断编程
stm32中断优先级管理与外部中断编程 中断优先级管理 外部中断编程 官方示例程序 exti.h #ifndef __EXTI_H #define __EXIT_H #include "sy ...
- spring_AOP_XML
例子下载 对于xml的AOP配置主要集中在配置文件中,所以只要设置好配置文件就行了 beans.xml <?xml version="1.0" encoding=" ...
- python数据结构之冒泡排序
冒泡排序是一种基础排序算法,在python中,我们利用列表的的方式来完成,它对列表中的元素进行重复的遍历,在遍历的同时进行比较,如果两个数没有按照我们规定的顺序进行排列,就按照我们预先设定好的是顺序或 ...
- shell下获取系统时间
shell下获取系统时间的方法直接调用系统变量 获取今天时期:`date +%Y%m%d` 或 `date +%F` 或 $(date +%y%m%d) 获取昨天时期:`date -d yesterd ...
- BZOJ.2726.[SDOI2012]任务安排(DP 斜率优化)
题目链接 数据范围在这:https://lydsy.com/JudgeOnline/wttl/thread.php?tid=613, 另外是\(n\leq3\times10^5\). 用\(t_i\) ...
- C#中的集合之ArryList
List泛型集合 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList 直接 ...
- 流畅的Python——切片
2.4 切片 在 Python 里,像列表(list).元组(tuple)和字符串(str)这类序列类型都支持切片操作,但是实际上切片操作比人们所想象的要强大很多. 在我个人的使用经历来看,在算法实践 ...