对于时间序列数据,常常需要用ARIMA模型作出拟合。本文使用R语言对客运量数据作出ARIMA拟合,提供一个一般化的ARIMA模型模板。

在开始前,安装并导入必要的包

install.packages('fUnitRoots')#安装单位根检验包
library(fUnitRoots)
install.packages('tseries')
library(tseries)
install.packages('forecast')#安装预测用的包
library(forecast)

1.读取数据并画图

data_1=read.csv('E:/R_project/ARIMA/数据_1.csv')#路径务必使用 / ,且不要包含汉字!
x=ts(data_1$TLHYL,start = 1949,end=2008)#将数据转化为时间序列格式
plot(x,type='o')#画图

本文所使用的客流量时间序列数据:https://download.csdn.net/download/weixin_45590329/14143811
时间序列折线图如下所示,显然数据有递增趋势,初步判断数据不平稳

2.平稳性检验

adfTest(x,lags=1,type = c("c"));adfTest(x,lags=2,type = c("c"));adfTest(x,lags=3,type = c("c"))
adfTest(x,lags=1,type = c("nc"));adfTest(x,lags=2,type = c("nc"));adfTest(x,lags=3,type = c("nc"));
adfTest(x,lags=1,type = c("ct"));adfTest(x,lags=2,type = c("ct"));adfTest(x,lags=3,type = c("ct"));

进行三种形式的ADF单位根检验,p值较大(如部分结果所示),发现序列不平稳

3.对数据作一阶差分处理

dx=diff(x)
plot(dx)

作出数据一阶差分后折线图,初步判断平稳

4.对一阶差分数据进行平稳性检验

adfTest(dx,lags=1,type = c("c"));adfTest(dx,lags=2,type = c("c"));adfTest(dx,lags=3,type = c("c"))
adfTest(dx,lags=1,type = c("nc"));adfTest(dx,lags=2,type = c("nc"));adfTest(dx,lags=3,type = c("nc"));
adfTest(dx,lags=1,type = c("ct"));adfTest(dx,lags=2,type = c("ct"));adfTest(dx,lags=3,type = c("ct"));

如图所示,拒绝原假设说明序列平稳

5.序列的白噪声检验:LB检验

Box.test (dx, lag = 6, type = "Ljung")
Box.test (dx, lag = 12, type = "Ljung")

拒绝原假设说明序列为非白噪声,非白噪声序列才有拟合的意义

6.确定ARMA(p,q)阶数

acf(dx)   # 自相关系数图1阶截尾,决定MA(1)
pacf(dx)  # 偏相关系数图1阶截尾,决定AR(1)

根据自相关系数图ACF和偏自相关系数图PACF,将原始数据确定为ARIMA(1,1,1)模型


7.参数估计

m1 = arima(x,order=c(1,1,1),method="CSS") # CSS为条件最小二乘法
m1
coef(m1)m2=arima(x,order=c(1,1,1), method="ML") # ML为极大似然估计法
m2
coef(m2)

模型1的结果如图所示:

8.模型检验:检验序列残差是否为白噪声

e1=residuals(m1)#提取拟合的残差,并进行白噪声检验
Box.test(e1, lag = 6, type = "Ljung")
Box.test (e1, lag =12, type = "Ljung")e2=residuals(m2)#提取拟合的残差,并进行白噪声检验
Box.test(e2, lag = 6, type = "Ljung")
Box.test (e2, lag =12, type = "Ljung")

最终检验结果显示无法拒绝原假设,说明残差序列为白噪声,模型拟合良好

9.模型优化:AIC和BIC准则

aic1=m1$loglik + (0+2+1)/length(x)
sbc1=m1$loglik + log(length(x))*(0+2+1)/length(x)
aic1;sbc1aic2=m2$loglik + (0+2+1)/length(x)
sbc2=m2$loglik + log(length(x))*(0+2+1)/length(x)
aic2;sbc2

模型1的aic和sbc均小于模型2,故模型1拟合更好

10.模型预测

predict(m1,n.ahead = 5)

往后预测5个值,得到340962.1 347956.4 352567.9 355608.4

11.预测并画图

data_1.TLHYL = forecast(m1,h=5)
data_1.TLHYL
plot(data_1.TLHYL)

基于模型1做5期预测,并作图:

所有代码:

install.packages('fUnitRoots')#安装单位根检验包
library(fUnitRoots)
install.packages('tseries')
library(tseries)
install.packages('forecast')#安装预测用的包
library(forecast)#1.读取数据
data_1=read.csv('E:/R_project/ARIMA/数据_1.csv')
x=ts(data_1$TLHYL,start = 1949,end=2008)#将数据转化为时间序列格式
plot(x,type='o')
#画图,数据有明显递增趋势,初步判断不平稳#2.平稳性检验
adfTest(x,lags=1,type = c("c"));adfTest(x,lags=2,type = c("c"));adfTest(x,lags=3,type = c("c"))
adfTest(x,lags=1,type = c("nc"));adfTest(x,lags=2,type = c("nc"));adfTest(x,lags=3,type = c("nc"));
adfTest(x,lags=1,type = c("ct"));adfTest(x,lags=2,type = c("ct"));adfTest(x,lags=3,type = c("ct"));
#进行三种形式的ADF单位根检验,p值较大(如部分结果所示),发现序列不平稳#3.对数据作一阶差分处理
dx=diff(x)
plot(dx)#作出数据一阶差分后折线图,初步判断平稳#4.对一阶差分数据进行平稳性检验
adfTest(dx,lags=1,type = c("c"));adfTest(dx,lags=2,type = c("c"));adfTest(dx,lags=3,type = c("c"))
adfTest(dx,lags=1,type = c("nc"));adfTest(dx,lags=2,type = c("nc"));adfTest(dx,lags=3,type = c("nc"));
adfTest(dx,lags=1,type = c("ct"));adfTest(dx,lags=2,type = c("ct"));adfTest(dx,lags=3,type = c("ct"));
#拒绝原假设说明序列平稳#5.序列的白噪声检验:LB检验
#非白噪声序列才有拟合的意义
Box.test (dx, lag = 6, type = "Ljung")
Box.test (dx, lag = 12, type = "Ljung")
#拒绝原假设说明序列为非白噪声#6.确定ARMA(p,q)阶数
acf(dx)   # 自相关系数图1阶截尾,决定MA(1)
pacf(dx)  # 偏相关系数图1阶截尾,决定AR(1)
#将原始数据确定为ARIMA(1,1,1)模型#7.参数估计
m1 = arima(x,order=c(1,1,1),method="CSS") # CSS为条件最小二乘法
m1
coef(m1)m2=arima(x,order=c(1,1,1), method="ML") # ML为极大似然估计法
m2
coef(m2)#8.模型检验:检验序列残差是否为白噪声
#最终检验结果显示无法拒绝原假设,说明残差序列为白噪声,模型拟合良好
e1=residuals(m1)#提取拟合的残差,并进行白噪声检验
Box.test(e1, lag = 6, type = "Ljung")
Box.test (e1, lag =12, type = "Ljung")e2=residuals(m2)#提取拟合的残差,并进行白噪声检验
Box.test(e2, lag = 6, type = "Ljung")
Box.test (e2, lag =12, type = "Ljung")#9.模型优化:AIC和BIC准则
#模型1的aic和sbc均小于模型2,故模型1拟合更好
aic1=m1$loglik + (0+2+1)/length(x)
sbc1=m1$loglik + log(length(x))*(0+2+1)/length(x)
aic1;sbc1aic2=m2$loglik + (0+2+1)/length(x)
sbc2=m2$loglik + log(length(x))*(0+2+1)/length(x)
aic2;sbc2#10.模型预测
predict(m1,n.ahead = 5)#往后预测5个值,得到340962.1 347956.4 352567.9 355608.4 #11.预测并画图
data_1.TLHYL = forecast(m1,h=5)#基于模型1做5期预测
data_1.TLHYL
plot(data_1.TLHYL)

R语言拟合ARIMA模型相关推荐

  1. R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合、模型阶数(p,d,q)、设置seasonal参数指定在模型中是否包含季节信息

    R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合.模型阶数(p,d,q).设置seasonal参数指定在模型中是否包含季节信息 目录

  2. R语言拟合ARIMA模型并使用拟合模型进行预测推理、使用autoplot函数可视化ARIMA模型预测结果、可视化包含置信区间的预测结果

    R语言拟合ARIMA模型并使用拟合模型进行预测推理.使用autoplot函数可视化ARIMA模型预测结果.可视化包含置信区间的预测结果 目录

  3. R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(如果只想提取预测值,将结果分配给一个对象,然后提取名为mean的列表)

    R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(如果只想提取预测值,将结果分配给一个对象,然后提取名为mean的列表) 目录

  4. R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(包含时间点、预测值、两个置信区间)

    R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(包含时间点.预测值.两个置信区间) 目录

  5. 如何使用R语言拟合ANOVA模型

    如何使用R语言拟合ANOVA模型 aov()函数: R语言用于拟合ANOVA模型的函数为aov(),它的语法结构为aov(formula, data=dataframe).函数有两个参数需要指定,分别 ...

  6. arima 数据预处理_基于R语言的ARIMA模型

    A IMA模型是一种著名的时间序列预测方法,主要是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型.ARIMA模型根据原序列是否平稳以及 ...

  7. R语言使用ARIMA模型预测股票收益时间序列

    "预测非常困难,特别是关于未来".丹麦物理学家尼尔斯·波尔(Neils Bohr),最近我们被要求撰写关于arima的研究报告,包括一些图形和统计输出. 很多人都会看到这句名言.预 ...

  8. R语言-时间序列-arima模型-forecast、tseries包

    最近初步接触了下如何用R语言进行时间序列分析,自己动手写了段小代码. 首先呢是生成随机观测值,接着画出时间序列图,然后进行单根检验和用 ACF 和 PACF 指令分别画出自相关数和偏自相关系数图. 随 ...

  9. R语言 时间序列arima模型

    基本理论知识    ARMA模型称为自回归移动平均模型,是时间序列里常用的模型之一.ARMA模型是对不含季节变动的平稳序列进行建模.它将序列值表示为过去值和过去扰动项的加权和.模型形式如下: yt=c ...

  10. R语言 时间序列ARIMA模型方法

    原理什么的百度一搜一堆,看不明白,先学会用这个工具吧! ARIMA:全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记AR ...

最新文章

  1. 浅谈JavaScript 函数作用域当中的“提升”现象
  2. linux 使cpu使用率升高_Linux CPU使用率超过100%的原因
  3. maven手动安装ojdbc14(oracle jdbc驱动)至本地maven仓库
  4. MySQL 高级 游标基本操作
  5. xp和win 2003远程桌面强制进入命令_远程登录t人命令
  6. glassfish服务器默认的网页所在的位置
  7. 快速排序思路(挖坑版),代码实现
  8. 【高数+AI】中山大学的学霸小哥开源了一个能帮你做高数题的AI
  9. usage: git remote add [options] name url -f, --fetch fetch the remote branches ...
  10. 西瓜书《贝叶斯》朴素贝叶斯公式推导
  11. 让你此生难成大器的七宗罪
  12. centen os7安装maven
  13. Wampserver查看php配置信息
  14. 统计自然语言处理梳理一:分词、命名实体识别、词性标注
  15. resin设置权限_如何配置resin 3.1.9
  16. 7个月吐血整理!Android面试相关文章及Github学习资料(标星3.2K)
  17. (转) 如何在Excel和Word文档中插入GIF动画
  18. LTspice基础教程-001.软件简介与安装
  19. 财政部将加强金融企业财务管理
  20. MATLAB 串口通信的实现。。

热门文章

  1. 用C语言编写一个关机程序
  2. 谷歌应用程序无法启动,因为应用程序的并行配置不正确的问题解决方案
  3. [转]技术以外的功夫
  4. python迅雷下载器_简单的迅雷VIP账号获取器(Python)
  5. php酒店客房管理,基于PHP的酒店客房管理系统的设计与实现2.doc
  6. afg低功耗状态黑苹果_拔草1L小主机 Dell9020m  + 黑苹果折腾记录
  7. vr课设《梵高世界》第一人称的解谜游戏
  8. QComboBox自定义设置
  9. oracle数据库sql语句修改表某列字段长度
  10. 麦腾股份正式挂牌新三板,创业孵化市场或将深度洗牌