R语言 时间序列arima模型
基本理论知识
ARMA模型称为自回归移动平均模型,是时间序列里常用的模型之一。ARMA模型是对不含季节变动的平稳序列进行建模。它将序列值表示为过去值和过去扰动项的加权和。模型形式如下:
其中 ytyt 为序列值, ϵtϵt 为扰动项。模型可以简记为:
其中
称为自回归系数多项式。
称为移动平均系数多项式。
ARIMA模型 的本质和ARMA是一样的,将ARMA模型里的序列值 ytyt 换成一阶差分的值即可。
自相关系数acf 刻画的是 ytyt 与滞后k阶 yt−kyt−k 之间的相关系数,
偏自相关系数pacf 刻画的是去除 yt−1yt−1 , yt−2yt−2 等值对 yt−kyt−k 的影响后,计算的纯 ytyt 与滞后k阶 yt−kyt−k 之间的相关系数。
平稳性 :均值为常数,且两个变量间的协方差只取决于它们之间的时间间隔而不取决于时间点。即
白噪声 :所有随机变量的均值为0,方差不变为常数,且彼此之间不想管的序列即为白噪声序列。一般假设模型的残差为白噪声。即
建模
建模流程图
1、画出时序图和自相关图
画出序列的时序图,观察序列是否平稳。利用acf()函数画出序列的自相关图,通过自相关图判断序列是否平稳。若自相关图里的自相关系数很快的衰减为0,则序列平稳,否则为非平稳。对于非平稳序列需要将其转化为平稳序列,才可用ARMA进行建模。以R自带的时间序列Nile(尼罗河的流量)为例。
> plot(Nile,type="l")
> plot(Nile,type="l",xlab="时间",ylab="尼罗河流量")
> acf(Nile,main="自相关图") #画出自相关图
> opar<-par(mfrow=c(2,1))
> plot(Nile,type="l",xlab="时间",ylab="尼罗河流量")
> acf(Nile,main="自相关图")
> par(opar)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
结果如下:
从时序图可以看到序列再1990年有一个下降的趋势,并且自相关图里自相关系数没有快速的减为0(一般认为自相关系数低于2倍标准差即图中蓝色虚线一下时即为0),而是呈现出拖尾的特征,故判断序列为非平稳序列。
2、对序列进行平稳化处理
若序列为非平稳,则需将序列通过差分转化为平稳序列。差分可以消除序列的线性趋势。ndiffs()函数可以帮助我们判断需要进行几次差分。将序列取对数可以保证ARMA模型同方差的假设。代码如下:
> opar<-par(mfrow=c(2,1))
> plot(data,type="l",xlab="时间",ylab="尼罗河流量对数值",main="差分前")
> acf(data,main="自相关图",xlab="滞后阶数")
> par(opar)
> library(forecast)
> ndiffs(data)
[1] 1 #结果表明序列需要进行1阶差分
> ndata<-diff(data,1)
> ndiffs(ndata)
[1] 0 #结果表明无需进行
> opar<-par(mfrow=c(2,1))
> plot(ndata,type="l",main="差分后")
> acf(ndata,main="自相关图",xlab="滞后阶数")
> par(opar)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
从上图可以看到,1阶差分以后序列变为平稳序列,且自相关图显示自相关系数在滞后1阶后就快速的减为0。进一步表明序列平稳。
3、ARMA模型的定阶及参数估计
acf值 | pacf值 | 模型 |
---|---|---|
拖尾(逐渐减为0) | P阶截尾(p阶快速减为0) | ARIMA(p,d,0) |
q阶截尾 | 拖尾 | ARIMA(0,d,q) |
拖尾 | 拖尾 | ARIMA(p,d,q) |
如上表所示,我们可以通过acf和pacf图来判断模型的阶数。还可以通过模型的AIC和BIC值来选取模型,AIC和BIC的介绍见前面的基本理论知识。R里面的auto.arima()函数就是通过选取AIC和BIC最小来选取模型的。
R可以通过arima()函数估计模型参数,调用格式为:
arima(data,order=c(p,d,q),method=,…)
参数 | 含义 |
---|---|
data | 时间序列 |
order | 模型的阶数 |
method | 模型参数估计的方法,“ML”极大似然估计,”CSS”条件最小二乘估计,“CSS-ML” |
> opar<-par(mfrow=c(2,1))
> acf(ndata)
> pacf(ndata)
> par(opar)
> model1<-arima(data,order=c(0,1,1),method="ML")
> model1Call:
arima(x = data, order = c(0, 1, 1), method = "ML")Coefficients:ma1-0.7677
s.e. 0.1046sigma^2 estimated as 0.02623: log likelihood = 39.3, aic = -74.6
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
通过上面的acf和pacf图,我们可以选取建立ARIMA(0,1,1)模型。最后估计出来的模型为
4、模型检验
模型参数检验包括两个检验:参数的显著性检验和残差的正态性和无关性检验。
参数的显著性检验:用估计出的系数除以其的标准差(se)得到的商与T统计量5%的临界值(1.96)比较,商的绝对值大于1.96,则拒绝原假设,认为系数显著的不为0,否则认为系数不显著。系数不显著的可以去掉,语法为arima(data,order,fixed=c(NA,0,NA…)),fixed为0的位置即为被去掉的参数的位置。
残差的正态性检验:画出残差的QQ图即可判断,QQ图中残差基本完全落在45°线上即为符合正态性假设。否则模型可能出现错误。语法为:
qqnorm(model$residuals)
qqline(model$residuals)
残差的无关性检验:也称为残差的白噪声检验,由前面白噪声的定义可知,残差(=估计值-真实值)应为不相关的序列。常用LB统计量来检验残差。
服从自由度为K-p-q的卡方分布,其中n为样本容量。语法为:
Box.test(model$residuals,type=”Ljung-Box”)
> qqnorm(model1$residuals)
> qqline(model1$residuals)
> Box.test(model1$residuals,type="Ljung-Box")Box-Ljung testdata: model1$residuals
X-squared = 1.5897, df = 1, p-value = 0.2074
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
从 画出的QQ图和LB检验的结果来看,残差符合正态性假设且不相关,则认为模型拟合数据比较充分,可以用来进行下一步预测。
5、预测
> p<-predict(model1,4)
> p
$pred
Time Series:
Start = 1971
End = 1974
Frequency = 1
[1] 6.686726 6.686726 6.686726 6.686726$se
Time Series:
Start = 1971
End = 1974
Frequency = 1
[1] 0.1619621 0.1662765 0.1704817 0.1745857> plot(Nile,xlab="时间",ylab="流量")
> lines(exp(p$pred),col="red")
> exp(p$pred)
Time Series:
Start = 1971
End = 1974
Frequency = 1
[1] 801.6934 801.6934 801.6934 801.6934
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
从预测结果可以看到 ,预测的后四年的值均为801.69。时间序列在做预测时经常会出现这个问题。如果数据能够多一点,做出来的模型可能预测效果会好一点。时间序列模型只适合短时期的预测,不适合长时期的。而且我个人认为时间序列的模型在加入外生变量方面不是很方便,没有回归做起来方便(这一点是在参加天池的比赛时体会到的),这也是时间序列模型应用的一个缺点。
R语言 时间序列arima模型相关推荐
- R语言-时间序列-arima模型-forecast、tseries包
最近初步接触了下如何用R语言进行时间序列分析,自己动手写了段小代码. 首先呢是生成随机观测值,接着画出时间序列图,然后进行单根检验和用 ACF 和 PACF 指令分别画出自相关数和偏自相关系数图. 随 ...
- R语言 时间序列ARIMA模型方法
原理什么的百度一搜一堆,看不明白,先学会用这个工具吧! ARIMA:全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记AR ...
- R语言时间序列ARIMA新手教程
R语言时间序列ARIMA新手教程 首先说一下ARMA回归的底层逻辑,所谓的AR模型和MA模型都是ARMA模型的一种特殊情况,有点类似正方形和长方形都是矩形.ARMA模型的表达式为: p为自回归部分的滞 ...
- arima 数据预处理_基于R语言的ARIMA模型
A IMA模型是一种著名的时间序列预测方法,主要是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型.ARIMA模型根据原序列是否平稳以及 ...
- R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合、模型阶数(p,d,q)、设置seasonal参数指定在模型中是否包含季节信息
R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合.模型阶数(p,d,q).设置seasonal参数指定在模型中是否包含季节信息 目录
- R语言拟合ARIMA模型并使用拟合模型进行预测推理、使用autoplot函数可视化ARIMA模型预测结果、可视化包含置信区间的预测结果
R语言拟合ARIMA模型并使用拟合模型进行预测推理.使用autoplot函数可视化ARIMA模型预测结果.可视化包含置信区间的预测结果 目录
- R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(如果只想提取预测值,将结果分配给一个对象,然后提取名为mean的列表)
R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(如果只想提取预测值,将结果分配给一个对象,然后提取名为mean的列表) 目录
- R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(包含时间点、预测值、两个置信区间)
R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(包含时间点.预测值.两个置信区间) 目录
- R语言使用ARIMA模型预测股票收益时间序列
"预测非常困难,特别是关于未来".丹麦物理学家尼尔斯·波尔(Neils Bohr),最近我们被要求撰写关于arima的研究报告,包括一些图形和统计输出. 很多人都会看到这句名言.预 ...
最新文章
- 助力区域性银行突破困局,网易云信入选爱分析报告典型案例
- [HDU 3625] Examining the Rooms(第一类斯特林数)
- 超人学院Hadoop大数据高薪就业分享
- java 开发环境 列表_Java 开发环境配置
- 锁php_php+redis实现分布式锁
- 软件案例分析-音乐软件界的卧龙凤雏-酷狗音乐与网易云音乐
- APPweb测试工具
- 35岁的程序员:第25章,离职
- 2022年黑客书籍推荐
- [Paper Reading]开始写Paper Reading Report
- 静态背景下运动目标检测 matlab_动态拉伸、静态拉伸你做对了么?
- 微信服务器与客户端消息通讯机制,微信在部分地区发生连接故障,你遇到了么?...
- sql中替换字段的部分字符
- 该内存不能为“read”的解决方法
- Android 炫酷动画APP,21 款炫酷动画开源框架,照亮你的APP
- 7-65 平面向量加法 (15分)
- 正宗、创新红烧肉全法
- 写段小程序,为自己的配置加个密
- 镶嵌数据集工具小结(七)色彩平衡与接缝线 Ⅰ
- NGNIX在CENTEROS 下部署
热门文章
- Error starting userland proxy: listen tcp4 0.0.0.0:8005: bind: address alrea
- 利用python和递归实现赶鸭子问题
- Stanford Alpaca (羊驼):ChatGPT 学术版开源实现
- LCD RGB 控制技术 时钟篇(上)
- 【饭谈】面试场上的珍珑棋局(PUA之无限打击)
- 天呐!350道Java面试真题分享
- 改变生活的态度,突破瓶颈
- 快速检索2021年EI会议论文的方法
- The Fun Of Algorithm - Day4 - 百钱百鸡问题
- OpenCV参考手册之Mat类详解(二)