R做时间序列(ARIMA)的案例

2023-12-24 17:38
文章标签 时间 案例 序列 arima

本文主要是介绍R做时间序列(ARIMA)的案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Arima预测模型(R语言)
ARIMA(p,d,q) 模型全称为 差分自回归移动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA), AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数。
所谓ARIMA模型,是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型。ARIMA模型根据原序列是否平稳以及回归中所含部分的不同,包括移动平均过程(MA)、自回归过程(AR)、自回归移动平均过程(ARMA)以及ARIMA过程。

下面我们选取了一些具有周期性(7天)的测试数据,通过ARIMA模型做一个简单的预测。

source<- c(10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422,
6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331,9449,6773,6304,9355,10477,
10148,10395,11261,8713,7299,10424,10795,11069,11602,11427,9095,7707,10767,12136,12812,
12006,12528,10329,7818,11719,11683,12603,11495,13670,11337,10232,13261,13230,15535,
16837,19598,14823,11622,19391,18177,19994,14723,15694,13248,9543,12872,13101,15053,
12619,13749,10228,9725,14729,12518,14564,15085,14722,11999,9390,13481,14795,15845,
15271,14686,11054,10395,14775,14618,16029,15231,14246,12095,10473,15323,15381,14947)


测试数据的时间序列图,如下:

data<-xts(data,seq(as.POSIXct("2014-01-01"),len=length(data),by="day"))

plot(data)



通过以下代码:

data_diff1<-diff(data,differences=1)
plot(data_diff1) 
data_diff2<-diff(data,differences=2)
plot(data_diff2) 




可以看出一次差分后的时间序列在均值和方差上看起来像是平稳的,与二次差分的图形相差不大,随着时间推移,时间序列大致保持不变,因此设置差分项d=1。

接下来需要选择合适的ARIMA模型,即确定ARIMA(p,d,q)中合适的 p、q 值,我们通过R中的“acf()”和“pacf”函数来做判断。

1、查看自相关图

acf <- acf(data_diff1,lag.max=100,plot=FALSE)
plot(acf)


2、查看偏自相关图

 pacf <- pacf(data_diff1,lag.max=100,plot=FALSE) 
 plot(pacf)


ARMA(p,q)模型的ACF与PACF理论模式

模型

ACF

PACF

AR(p)

衰减趋于零(几何型或振荡型)

p阶后截尾

MA(q)

q阶后截尾

衰减趋于零(几何型或振荡型)

ARMA(p,q)

q阶后衰减趋于零(几何型或振荡型)

p阶后衰减趋于零(几何型或振荡型)

因此我们的arima模型为arima(7,1,0)

data.fit <- arima(data,order=c(7,1,0), seasonal=list(order=c(1,1,0), period=7))
data.fit 


Series: data
ARIMA(7,1,0)(1,1,0)[7]
Coefficients:
          ar1 ar2 ar3 ar4 ar5 ar6 ar7 sar1
      -0.2829 -0.2128 -0.0180 0.0606 0.3164 0.0415 -0.0883 -0.5075
s.e. 0.1040 0.1076 0.1076 0.1048 0.1062 0.1066 0.1520 0.1449
sigma^2 estimated as 1589493: log likelihood=-789.34
AIC=1596.68 AICc=1598.88 BIC=1619.38

预测后一周的值:

forecast <- forecast.Arima(data.fit,h=7,level=c(99.5))
forecast
plot.forecast(forecast)

Forecast Lo 80 Hi 80 Lo 95 Hi 95
101 15206.61 13590.892 16822.33 12735.583 17677.64
102 14654.18 12665.935 16642.42 11613.422 17694.94
103 11589.60 9388.579 13790.62 8223.428 14955.77
104 10190.69 7742.040 12639.34 6445.803 13935.58
105 14362.50 11640.733 17084.26 10199.919 18525.07
106 14785.77 11620.577 17950.96 9945.025 19626.52
107 15501.02 12049.124 18952.91 10221.802 20780.23


tsdiag检验——

tsdiag(data.fit)


Acf检验说明:

      残差没有明显的自相关性

Ljung-Box测试显示:

      所有的P-value>0.5, 说明残差为白噪声


*最近正在看这一块的东西,有些地方还没弄太明白,尤其是公式原理,若有不正确的地方,欢迎指正。

如何用R做单变量的时间序列?

---加载时间序列程序包

library(tseries)
--使用该包自带的程序,是指航空乘客的分布
air <- AirPassengers
--作这个时间序列的图,通过图作一个直观判断
ts.plot(air)
--查看自相关图
acf(air)
--查看偏相关图
pacf(air)
--初步判断
--1、有趁势。2、可能有季节性。3、应该使用MA()模型来拟合
--通过decompose 进行分解:随机、趋势、季节
x<-decompose(air)

---作图查看

plot(x)

plot(x$seasonal)

---选择合适的模型拟合
---趋势通过差分来消除
---季节性因素,确定相应的period
air.fit <- arima(air,order=c(0,1,1), seasonal=list(order=c(0,1,1), period=12))
---对结果进行诊断
tsdiag(air.fit)

--加载时间序列包
library(forecast)
--向前预测12期,默认情况下24期
--给出80%,95%置信度下的置信区间
air.forecast <- forecast(air.fit,12)
plot.forecast(air.forecast)

这里只是简单用到R自带的数据做了一个简单的演示过程,找个时间我再完整写一篇关于时间序列建模过程的文章,以及如何判断时间序列的P、Q、I等参数的确定。





这篇关于R做时间序列(ARIMA)的案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532584

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

uva 10131 最长子序列

题意: 给大象的体重和智商,求体重按从大到小,智商从高到低的最长子序列,并输出路径。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vect

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

POJ1631最长单调递增子序列

最长单调递增子序列 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;publ

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX