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

2023-11-07

原理什么的百度一搜一堆,看不明白,先学会用这个工具吧!
  ARIMA:全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),是由博克思(Box)和詹金斯(Jenkins)于70年代初提出一著名时间序列预测方法 ,所以又称为box-jenkins模型、博克思-詹金斯法。其中ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数。所谓ARIMA模型,是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型。ARIMA模型根据原序列是否平稳以及回归中所含部分的不同,包括移动平均过程(MA)、自回归过程(AR)、自回归移动平均过程(ARMA)以及ARIMA过程。(这是我从百度百科挖过来的-_-)
步骤总结如下:

#加载时间序列程序包
library(tseries)
library(forecast)
#使用该包自带的程序,是指航空乘客的分布
air <- AirPassengers
#作这个时间序列的图,通过图作一个直观判断
plot(air)

air

#也可以直接使用tsdisplay来观察,它包含了时序图,以及acf、pacf两个相关图
tsdisplay(air)

air2

#可以拆掉最后一年来做样本的训练集,再将最后一年做样本的测试集
sair<-ts(as.vector(air[1:132]),frequency=12,start=c(1949,1))
#同样可以看一下拆掉之后的训练集图形
tsdisplay(sair)

sair

#sair的明显存在一个向上的趋势,用差分方法干掉,先看滞后1次的图形
s1<-diff(sair,1)
#从图上看,基本围绕了0在振动,基本平稳,进一步使用adf检验,看一下是否存在单位根(验证平稳性,若存在则不平稳)
adf.test(s1)
#单位根检验通过(p<0.05,显著拒绝存在单位根),再看一下差分之后的图形。
tsdisplay(s1)

s1

#图形显示acf图存在拖尾,q=0,pacf图超出虚线较多,但从整体上看,从16阶之后截断,而上面的线可以大概看到(1,8,10,12,16)这五个数超出虚线甚多,所以,可以每个都测试一下。形成(1,1,0)(8,1,0),10,1,0),(12,1,0),(16,1,0),然后判断一下各自的AIC值,取最小值即可。
#且acf图存在一个12阶的季节性影响因素,然后通过作滞后12阶的图看一下是否消除
tsdisplay(diff(s1,12))

s12

#图形可以看出,已经消除了季节性的影响,所以ARIMA季节参数中周期应该为12,由于季节性图的acf图和pacf上看到最后一个超出虚线的阶数均为1,季度参数可以这么设置(1,1,1)[12]
#拟合模型,看一下哪个模型最好,注意,拟合模型使用的data是原始数据,并不是差分之后的数据!
arima(sair,order=c(1,1,0),seasonal=list(order=c(1,1,1),period=12))#AIC=899.95
arima(sair,order=c(8,1,0),seasonal=list(order=c(1,1,1),period=12))#AIC=907.17
arima(sair,order=c(10,1,0),seasonal=list(order=c(1,1,1),period=12))#AIC=909
arima(sair,order=c(12,1,0),seasonal=list(order=c(1,1,1),period=12))#AIC=905.38
arima(sair,order=c(16,1,0),seasonal=list(order=c(1,1,1),period=12))#NaNs
#从上面的拟合可以看出,选择(1,1,0)(1,1,1)[12]的模型AIC值最小,也可以使用auto.arima函数来自动确定这些参数:
auto.arima(sair)
#Series: sair 
#ARIMA(0,1,1)(0,1,0)[12]
#Coefficients:
#       ma1
#      -0.2263
#s.e.   0.0900
#sigma^2 estimated as 110.5:  log likelihood=-448.34 AIC=900.69   AICc=900.79   BIC=906.24
#auto.arima给出的建议是(0,1,1)(0,1,0)[12],其AIC是900.69,相差不大,可以使用两个方案都看一下预测的结果。
#先进行拟合
fit1<-arima(sair,order=c(1,1,0),seasonal=list(order=c(1,1,1),period=12))
fit2<-arima(sair,order=c(0,1,1),seasonal=list(order=c(0,1,0),period=12))
#然后使用tsdiag看一下各自的结果,图中表明残差标准差基本都在[-1,1]之间,残差的自回归都为0(两虚线内),Ljung-Box检验的p值都在0.05之上,结果不错。
tsdiag(fit1)

fit1

tsdiag(fit2)

fit2

#预测
f.p1<-forecast(fit1,h=12,level=c(99.5))
f.p2<-forecast(fit2,h=12,level=c(99.5))
#先看一下fit1【即(1,1,0)(1,1,1)[12]】的效果
plot(f.p1,ylim=c(100,700))
lines(f.p1$fitted,col="green")
lines(air,col="red")

fit1

#再看一下fit2【即(0,1,1)(0,1,0)[12]】的效果
plot(f.p2,ylim=c(100,700))
lines(f.p2$fitted,col="green")
lines(air,col="red")

fit2

#从上面两个图(红色为air数据,绿色为利用sair计算出来的原始数据拟合值,蓝色段为预测值),可以看出,几乎没有区别,而且预测效果也非常好。

时间序列预测,ARIMA的模型小结到此为止,到现在为止,关于AR和MA的系数还有季节参数里面的系数选择都没有一点头绪,只能用这种穷举法来一个个找了,费时费力,不过auto.arima貌似很强大,就是给出的系数和网上看来的经验得出的系数有出入,明明是acf拖尾,q应该为0,即AR模型,偏偏就使用了MA,不懂,也没时间仔细研究它的理论,就这样吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R语言 时间序列ARIMA模型方法 的相关文章

  • 准备编程竞赛的缩写和函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 不理解..密度的行为

    在下面的数据框中 我预计密度的 y 轴值为 0 6 和 0 4 但它们是 1 0 我觉得我使用的方式显然缺少一些非常基本的东西 密度 但是我的大脑冻结了 我将如何使用 密度 获得所需的行为 任何帮助将不胜感激 df lt data fram
  • 获取所有参数作为列表

    R 是否提供对象 函数 方法 关键字来获取所有函数参数 使用一个例子 function a b default 会提供a and b也 在函数环境内 有没有类似的说法list 这还包括a and b在结果中 或者换一种方式 简写list a
  • 使用cowplot包的多重图的中心X轴标签

    我有一个多图图形 由 2x2 配置中的 4 个图组成 我使用 cowplot 包和plot grid函数使用下面的代码排列了绘图 plot grid p1 p2 p3 p4 align vh vjust 1 scale 1 其中 p1 p4
  • 使用 ggplot 未完全填充等值线图

    我正在尝试使用以下方法绘制我的第一个填充等高线图ggplot 根据我的数据 我期待类似的结果 但我的结果是 a lt c 1 1 1 1 1 3 1 2 2 2 2 2 2 5 2 1 3 3 3 3 1 3 2 b lt c rep c
  • 如何使用 ggplot2 绘制 NA 间隙

    在 R 的基本绘图中 如果数据系列 ggplot2 中存在 NA 则会绘制间隙 举个例子看看 df data frame x c 1 10 y c 1 10 df 5 7 NA plot df type l 但是 ggplot2 删除了缺失
  • 如何在 R 中绘制预测的子集?

    我有一个简单的 R 脚本来根据文件创建预测 自 2014 年以来就有数据记录 但我在尝试实现以下两个目标时遇到了困难 仅绘制预测信息的子集 从 11 2017 开始 以特定格式包含月份和年份 即 6 月 17 日 这是链接到dataset
  • R 中 x 轴曲线的阴影面积

    所以我有一个位于 x 轴下方和上方的图表 并且想要对线和 0 之间的区域进行着色 在这里 我尝试使用多边形函数 但它只给出曲线下的面积 plot year difference1 type l polygon year difference
  • R.scale() 和 sklearn.preprocessing.scale() 之间的区别

    我目前正在将数据分析从 R 转移到 Python 当在 R 中缩放数据集时 我将使用 R scale 根据我的理解 它将执行以下操作 x mean x sd x 为了替换该函数 我尝试使用 sklearn preprocessing sca
  • 如何在主图区域之外的 ggplot2 中添加多个标题

    我想为页脚添加两个标题 但 ggplot 似乎只需要 1 是否有解决方法可以将注释或 geom text 添加到左下角和右下角 library ggplot2 p lt ggplot mtcars aes x wt y mpg geom p
  • 如何在R中绘制仪表图表?

    如何在 R 中绘制以下图 Red 30 Yellow 40 Green 30 Needle at 52 所以这里有一个完整的ggplot解决方案 注意 从原始帖子中编辑 在仪表中断处添加数字指示器和标签 这似乎是OP在评论中所要求的 如果不
  • 带有 geom_errorbar 的position_dodge

    我有以下代码 require ggplot2 pd lt position dodge 0 3 ggplot dt aes x Time y OR colour Group geom errorbar aes ymin CI lower y
  • 使用 X11 窗口的 R 脚本仅打开一秒钟

    我正在通过 Linux Mint 16 命令行运行 R 脚本 它包含我想在窗口中显示的箱线图 所以我使用 x11 函数来创建该窗口 这是我的代码 testdata lt data frame sample 1 1000 size 100 r
  • R中的不定积分

    我正在计算方程的不定积分 我将加速度计的数据通过可视化 C 程序输入到 R 中 然后就可以很简单地得出一个方程来表示加速度曲线 这一切都很好 但是我还需要计算撞击速度 根据我在高中时代的理解 我的加速度曲线的不定积分将产生速度方程 我知道执
  • Openxlsx 多次验证损坏输出文件

    我正在尝试添加多个验证并将公式添加到 Excel 文件 这是我使用的代码 library openxlsx fileTemplate lt New01 xlsx wbTemplate lt loadWorkbook fileTemplate
  • 选择一个单元格内的最小值或最大值(分隔字符串)

    我有一个数据框 其中每个样本的列可以有多个值 例如 Gene Pvalue1 Pvalue2 Pvalue3 Beta Ace 0 0381 0 00357 0 01755 0 001385 0 0037 NA 0 039 0 03 1 1
  • 如何管理和处理 R 包中的补充数据

    我想在我的 R 包中添加补充数据 我知道关于LazyData true in DESCRIPTION 但不想使用它 因为示例数据相当大 所以我创建了一个目录 data 其中包含两个 RData文件和一个datalist 我添加使用tools
  • 根据另一个向量替换向量中的值

    我想替换向量中的值 x 与另一个向量 y 陷阱 22 方法需要是动态的 以适应向量中不同数量的 级别 x 例如 考虑向量x x lt sample c 1 2 3 4 5 100 replace TRUE gt x 1 2 4 1 1 3
  • S4 类 [(子集)带有附加参数的继承

    这是一个扩展在 R 中的访问器函数中使用 callNextMethod https stackoverflow com q 24875284 2752888 2017 03 25 更新 为了说明如何仅在加载方法时失败 但在构建的包中时不会失
  • 为什么我必须在每次 R 升级时手动创建目录“~/R/%p-library/%v”?

    每次R升级后 我必须重新安装我使用的软件包 来自源代码 因此必须为新版本重新编译它们 这是一个正确的 可以理解的行为 所以我调用install packages http stat ethz ch R manual R devel libr

随机推荐

  • Network、互联网、Internet和Web的区别和联系

    1 首先Network是最广的 就是汉语里面最广的 网络 如各种电网 神经网络等 2 其次 是互联网 因特网和其他类似的由计算机相互连接而成的大型网络系统都可算是互联网 Internet是互联网中最大的一个 3 再者 是Internet 中
  • powershell新手向,新建、删除文件及对文件添加内容

    一 在当前目录下 新建文件 New item空格1 文件名 doc 文件类型后缀doc txt等 New item 1 doc 删除文件 remove item空格1 文件名 doc 文件类型后缀doc txt等 remove item 1
  • C#——初识Console

    1 console writeline 显示的信息 参数为 想要在用户界面显示的信息 参数的形式可以用到 和占位符 连接符 字符串 变量 在加号两边有一边是字符串 那么 就起到了连接的作用 例如 console writeline 您好 n
  • break停止for....in和for....of循环?

    break可以停止for循环 那么是否可以停止for in和for of循环 for in let names id 1 name sdf id 2 name sdf for var i in names if i id 1 break c
  • Mysql中Unsigned和Zerofill数据型的使用(细节也很重要啊)

    一 今天开同事在使用Mysql的时候 错误使用了Unsigned和Zerofill了 大概是不是蛮懂这两个使用场景吧 很多东西 细节都是很重要的 不能随便用的 decimal是浮点型 使用Unsigned是错误的 二 什么是unsigned
  • 如何使用transformers的trainer.train()函数如何训练自定义Bert的下游模型,并进行评估

    要使用 Transformers 中的 Trainer 训练自定义的 BERT 下游模型 并进行评估 需要进行以下步骤 准备数据集 将原始数据集转换为适合 BERT 模型训练的格式 例如使用 tokenizer 对文本进行编码 将标签转换为
  • 尼姆游戏(聪明版/傻瓜式•人机对战)(代码优化/修复错漏/友好显示)

    对之前发的 练习 尼姆游戏 作了优化 代码精简 修正错漏 添加了玩家选择 微调了输出显示 不能更改前面发的 重发于此 CSDNapp更新到最新版本后 不可以对已发博文作出修改了 修改错漏则只能重发博文 浪费资源啊 练习 尼姆游戏 添加了玩家
  • axios访问后台404_使用 axios 后台无法接收到数据的解决方案

    如果想看排错思路的 可以看完踩坑经历 想直接要结果的 可以直接看解决方案 踩坑经历 最近我在使用 SSM Vue 做自己的小项目 Dao层 和 Service层 之类的代码已经写好了 就差 Controller层 和 Vue 的视图层还没有
  • jdk17安装及环境变量的配置

    jdk17安装及环境变量的配置 跳转oracle官方页面 点击直接下载Windowsjdk17 1 点击下载好的文件 然后下一步 2 在该页面中可以更改jdk的安装目录 默认是C盘 3 安装成功 安装成功之后 对其进行环境变量的配置 4 我
  • RFID系统在物流仓储中的应用

    RFID系统是一种无线识别技术 最近成为物流仓储行业的热门话题 本文将介绍RFID系统在物流仓储中的应用 包括如何使用RFID标签进行物流管理 如何使用RFID技术提高仓库的安全性 并细述RFID技术在物流仓储中的优势 除此之外 本文还会探
  • 华为od机考真题-报数游戏

    while 1 try m int input if 1 gt m or m gt 100 print ERROR else 模拟1 100的圈 nums
  • keil使用指南

    keil使用指南 1 项目的创建 头文件 1 项目的创建 1 首先创建文件夹 2 打开keil软件而后 创建新项目 并定位到1创建的文件夹 3 创建文件 并将文件添加到项目中 4 勾选hex文件生成 5 项目demo编写与编译 编译当前所在
  • 实战wxPython:051- 自定义控件

    前面系列文章中 我们介绍了wxPython提供各种的各种控件 在一般情况下可以满足我们开发应用的各种需求 但是在一些情况下 比如对按钮的美化 一个可以显示CPU占用率的控件等等 这首就需要自定义的控件 才能满足要求 自定义控件可以通过两种方
  • Postgresql 学习记录,模式,分区表,触发器,事务,窗口函数,视图,建表,约束等

    Postgresql 学习记录 模式 分区表 触发器 事务 窗口函数 视图 建表 约束等 PostgreSQL使用一种客户端 服务器的模型 一次PostgreSQL会话由下列相关的进程 程序 组成 一个服务器进程 它管理数据库文件 接受来自
  • 将word文档转换为图片格式的PDF

    0x00 前言 编写一篇文档后 往往会通过转为pdf版本后发布来避免在不同环境下格式出现混乱的情况 但这样操作转出pdf文档可以通过普通的pdf阅读器进行文本的抓取 不能达到我们想要保护知识产权的想法 因此在这里推出一篇如何将word文档转
  • 设计模式之(二)---代理模式Proxy Pattern

    什么是代理模式呢 我很忙 忙的没空理你 那你要找我呢就先找我的代理人吧 那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧 那就是两个人具备同一个接口 代理人虽然不能干活 但是被 代理的人能干活呀 比如西门庆找潘金莲 那潘金莲不好意思答
  • 前端优化-WEB综合

    开启 gzip 压缩 gzip 是 GNUzip 的缩写 最早用于 UNIX 系统的文件压缩 HTTP 协议上的 gzip 编码是一种用来改进 web 应用程序性能的技术 web 服务器和客户端 浏览器 必须共同支持 gzip 目前主流的浏
  • object...args参数

    Java object args参数 Java反射中用到方法public Object newInstance String className Object args 该方法中使用了object args参数 也可以写成object ar
  • 认清现实重新理解游戏的本质

    认清现实重新理解游戏的本质 OVERVIEW 认清现实重新理解游戏的本质 现实 两条小路的启发 四个动机 1 当前的学习任务或工作任务太艰巨 2 完美主义 3 对未来太过于自信 无知 4 大脑小看未来的收益 四个方法 1 让未来的收益足够巨
  • R语言 时间序列ARIMA模型方法

    原理什么的百度一搜一堆 看不明白 先学会用这个工具吧 ARIMA 全称为自回归积分滑动平均模型 Autoregressive Integrated Moving Average Model 简记ARIMA 是由博克思 Box 和詹金斯 Je