arima 数据预处理_时间序列分析|ARIMA模型分步骤解析及R中实践
你是否想要做时间序列分析,但却不知道代码怎么写?
你是否不清楚时间序列分析各种模型该在什么情况下使用?
本文将针对以上两个问题,带你入门时间序列分析~
等等!
不止’入门‘
读完这篇,你立即就能在R中写出不同模型的相应代码~
先介绍以下我自己吧~
我目前是Warner Bros.做Data Scientist,记得刚入职时,老板就跟我说未来我的主要任务是用各种类型的时间序列模型做预测:预测好莱坞游览车未来三年每天的乘客数量、预测, ,等华纳出品的电影每分钟的观看量,预估艾伦秀不同播出计划的未来收视率和收入等等等等~~~
刚入职的第一个月每天愁眉不展,时间序列的方法很多,很多时候,即使理论基础学懂了,但是到实践上,R里的code要怎么写又是个大问题,网上的很多教程,教授了公式,却不教授具体的代码怎么写。
幸运的是,老板是个比较技术咖的人,他教会了我很多实际操作上的东西,结合我过去七个月做过的各种时间序列模型,决定好好总结一下时间序列常见模型各自的适用场合、特征等理论知识,更重要的是,每个模型在R里的具体代码实现以及操作步骤,希望能帮助到需要使用R来做时间序列的朋友们~
时间序列数据是在一段时间内作为时间间隔序列收集的数据点。时间序列数据分析意味着对可用数据进行分析,以找出数据的模式或趋势,从而预测一些将来的价值,这些价值将有助于提高效率并优化业务决策。
常见的用于时间序列分析的技术:ARIMA模型
指数平滑模型
本篇将介绍 - ARIMA模型在R中如何使用
ARIMA建模
ARIMA是AutoRegressive集成移动平均线的缩写。自回归(AR)项是指差分序列的滞后,移动平均(MA)项是指误差的滞后,而I是用于使时间序列平稳的差分数。
ARIMA模型假设数据平稳 – 这意味着数据的变化不依赖于时间变化。白噪声序列和具有循环特性的序列也可以视为平稳序列。
数据应为单变量– ARIMA处理单个变量。自动回归就是关于过去值的回归。
(PS: 对于有外部变量的数据,可以使用ARIMAX模型,这个将在下一篇中介绍)
以下步骤1~5,很重要!很重要!!
ARIMA建模要遵循的步骤将数据集转化为时间序列格式
作图分析数据
确定p,d,q
拟合模型
做出预测
下面将根据建模步骤来介绍R中code
首先,导入需要用到的包:
library(ggplot2) #作图
library(forecast) #建模
library(dplyr) # 数据处理
library(lubridate) # 时间处理
将数据集转化为时间序列格式
使用R进行时间序列数据建模的第一步是将数据转换为时间序列数据格式。为此,我们需要在R中运行以下命令:
wbstl_weekly_data_ts = ts(wbstl_weekly_data$weekly_totalgross,frequency = 365.25/12,
start= decimal_date(ymd('2011-01-01')))wbstl_weekly_data$weekly_totalgross是我们要转换为时间序列的单变量数据
start给出数据的开始时间,在本例中为2011年1月。
frequency是数据的频率。由于它是月度数据,所以'frequency = 12'。(每周的数据,则frequency=52; daily data,则frequency=365.25)
2. 作图分析数据
ggplot(wbstl_weekly_data, aes(x =month, y = weekly_totalgross)) + geom_line()
这是数据的样子:
我们可以从图本身推断出,数据点遵循总体上升趋势,但在突然降低的值方面有一些异常值。现在,我们需要进行一些分析,以找出数据中确切的非平稳性和季节性。
3. 确定p,d,q
数据准备就绪并满足所有建模假设后,要确定要拟合数据的模型的顺序,我们需要三个变量:p,d和q,它们是指代负顺序的非负整数。模型的自回归,积分和移动平均值部分。
要找到合适的p和q值,我们需要使用acf()并pacf()。
pacf()滞后k是自相关函数,它描述了相距k步的所有数据点之间的相关性-在考虑了它们与这k步之间的数据的相关性之后。它有助于识别ARIMA模型中的自回归(AR)系数(p值)的数量。
acf(tsstationary,lag.max = 34)
pacf(tsstationary,lag.max = 34)
结果如下:
ACF用以确认q, 图中可以看出q = 1
PACF用以确认p = 2
处理好了数据,下面 进入最重要的部分:模型拟合 + 预测
4. 模型拟合
fitARIMA
order 指定ARIMA模型的非季节部分:(p,d,q)指AR阶,差异度和MA阶。
seasonal指定ARIMA模型的季节性部分,加上周期(此处是月度数据,所以为12)。该函数需要一个包含组件顺序和周期的列表,但是给定长度为3的数字矢量,它将把它们变成一个合适的列表,其规格为“ order”。
method表示拟合方法,可以是“最大似然(ML)”或“最小平方和(CSS)”。
这是一个递归过程,我们需要arima()使用不同的(p,d,q)值运行此函数,以找到最优化和高效的模型。
上述介绍的是怎么手动根据数据确定ARIMA模型中各参数,这边还有个懒人方法 (实践中更多也是使用该懒人方法 - auto.arima() )
auto.arima()功能:
预测程序包提供两个功能:ets()和auto.arima()用于自动选择指数模型和ARIMA模型。
auto.arima()R中的函数结合了单位根测试,最小化AIC和MLE来获得ARIMA模型。
KPSS检验用于确定差异数量(d)在Hyndman-Khandakar算法中,用于自动ARIMA建模。
然后通过最小化AICc来选择p,d和q。该算法使用逐步搜索遍历模型空间,以选择具有最小AICc的最佳模型。
如果d = 0,则常数c被包括在内;如果d≥1,则常数c设置为零。通过将当前模型的p和/或q改变±1并包括/排除当前模型中的c来考虑当前模型的变化。
到目前为止考虑的最佳模型(当前模型或这些变体之一)成为新的当前模型。
现在,重复此过程,直到找不到更低的AIC。
auto.arima(tsData,seasonal.test="ch",
parallel=TRUE,num.cores=8,stepwise=FALSE,approximation=FALSE)
该行code,运行时间较长,上周我用了1140个数据点,运行了1.5hr
5. 使用ARIMA模型进行预测
一旦为时间序列数据选择了最合适的模型,该ARIMA模型的参数就可以用作预测模型来预测时间序列的未来值。
使用predict()的函数 - 用于根据各种模型拟合函数的结果进行预测。它需要一个参数n.ahead()来指定要预测多少时间。
predict (fitARIMA,h = 5)
意思就是对未来5个月进行预测
forecast.Arima()forecastR包中的函数还可用于预测时间序列的未来值。在这里,我们还可以使用level参数指定预测间隔的置信度。
futurVal
plot.forecast(futurVal)
我们需要确保预测误差不相关,正态分布为均值零和恒定方差。我们可以使用诊断方法找出具有最佳可能预测值的适当模型。
预测显示为蓝线,而99.5%置信度水平的预测间隔为浅阴影区域。
这是整个过程,我们可以使用ARIMA分析时间序列数据和现有序列的预测值。
总结一下:
ARIMA建模要遵循的步骤将数据集转化为时间序列格式
作图分析数据
确定p,d,q / 或只用auto.arima()
拟合模型
做出预测
大家看完别忘了赞一个让更多人看到
另外,欢迎关注我的专栏: 煮一锅数据汤
专栏定期分享数据分析方面干货,如时间序列模型实践、机器学习模型讲解、R编程语言操作、SQL小白入门等煮一锅数据汤zhuanlan.zhihu.com
arima 数据预处理_时间序列分析|ARIMA模型分步骤解析及R中实践相关推荐
- covariance matrix r语言_时间序列分析|ARIMAX模型分步骤详解和R中实践
这是关于时间序列的第N篇文章,本文将介绍ARIMAX模型,简单来说就是在ARIMA的基础上增加一个外生变量.ARIMAX和ARIMA相比在理论上没有太多新的内容,所以本文直接介绍在R里怎么一步一步跑A ...
- spss入门——简单的数据预处理到时间序列分析系列(七)
spss数据预处理到时间序列分析 (七)预测 呼~,终于到了我们的这个系列的结尾了,预测2016的数据!! 应用所建立的模型分析预测2016的数据(原因:数据为编撰的,只到2015年) 操作完以后到了 ...
- spss入门——简单的数据预处理到时间序列分析系列(四)
简单的数据预处理到时间序列分析 spss数据预处理到时间序列分析 (四)曲线拟合 在数据插补之前一定要找找数据的变化趋势,通常数据拟合就是一个较好的方案. 散点进行曲线拟合的方法 根据前面所画散点图, ...
- spss入门——简单的数据预处理到时间序列分析系列(二)
简单的数据预处理到时间序列分析 spss数据预处理到时间序列分析 (二)时间变量生成及绘制散点图 时隔这么久终于又和大家见面了( ̄▽ ̄)~*,咱们继续我们的内容 在完成数据导入后,就可以开始下一步的准 ...
- python时间序列分析航空旅人_时间序列分析-ARIMA模型(python)
时间序列概念:在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻 所得到的离散数字组成的序列集合,称之为时间序列.时间序列分析是根据系统观察得到的时间序列数据,通过曲线拟合和参数估 ...
- python arima模型_时间序列分析 ARIMA模型 Python(2)
最近做了一个时间序列分析的项目.时间序列分析不同于以前的项目--看一下相关的库怎么用,就可以快速上线应用.它是非常需要你的基础知识的,Hamilton关于<时间序列分析>方面的知识,写了厚 ...
- arima 数据预处理_基于R语言的ARIMA模型
A IMA模型是一种著名的时间序列预测方法,主要是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型.ARIMA模型根据原序列是否平稳以及 ...
- arima 数据预处理_数据预测算法-ARIMA预测
简介 ARIMA: AutoRegressive Integrated Moving Average ARIMA是两个算法的结合:AR和MA.其公式如下: 是白噪声,均值为0, C是常数. ARIMA ...
- Python_Statsmodels包_时间序列分析_ARIMA模型
以前都是用SPSS/EVIEWS等来做的,现在用Python来搞搞看,前后弄了一个星期,总算基本走通了. 基础库: pandas,numpy,scipy,matplotlib,statsmodels ...
最新文章
- 东北农业大学程晓非团队发表植物病毒运动与复制相关综述文章
- TypeScript 泛型
- Asp.net Eval 学习总结
- 直播 | CVPR 2021论文解读:引入因果结构的解耦表征学习
- HASH暴力破解工具-Hashcat
- 搭建自动安装的linux,RedHat7搭建无人值守自动安装Linux操作系统(PXE+Kickstart)
- linux 内核 丢弃分片包,LINUX内核关于IP分片重组问题请教
- devc++不兼容_Mac压缩文件Win不支持?BetterZip帮你解决!
- 设计模式(十三): 命令模式
- js 高级应用 自定义事件
- java基础的正则表达式
- Win11玩永劫无间闪退怎么办?Win11玩永劫无间闪退的解决方法
- 小白的python之路Linux部分10/2829
- 基于PWM调宽的呼吸灯算法
- 程序设计入门-java
- 排序算法系列:归并排序算法
- 小鱼发现玩机械臂的小姐姐越来越多了。。。再说说手眼标定那些事~
- C语言实现状态机(二)
- 使用selenium模拟登录解决滑块验证问题
- 在HTML中把文本变成斜体的是,CSS/HTML:什么是使文本斜体的正确方法?
热门文章
- svn 命令行查看history及比较不同版本
- Linux负载均衡粘滞会话:IP_HASH Session(nosql mysql 文件共享系统 ) Cookie客户端加密识别用户
- 微信小程序————经纬度转化为具体位置(逆地址解析)
- GitHub 的前世今生
- 学计算机cpu重要还是显卡重要,玩游戏的过程中究竟是显卡重要还是CPU重要?
- react封装函数_React-Router源码解读
- 开头和结尾标记 在不同系统_写人作文的写作技巧。含思维导图、开头结尾写法及范文分析...
- 摄像头poe供电原理_弱电知识之六:跟我学做监控,认识POE交换机与POE监控摄像头...
- windows安装 Chocolatey
- 双链表java实现_双链表 Java实现数据结构