前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析

多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析

作者头像
拓端
发布于 2022-03-11 12:51:07
发布于 2022-03-11 12:51:07
7.3K00
代码可运行
举报
文章被收录于专栏:拓端tecdat拓端tecdat
运行总次数:0
代码可运行

原文链接:http://tecdat.cn/?p=22849

当需要为数据选择最合适的预测模型或方法时,预测者通常将可用的样本分成两部分:内样本(又称 "训练集")和保留样本(或外样本,或 "测试集")。然后,在样本中估计模型,并使用一些误差指标来评估其预测性能。

如果这样的程序只做一次,那么这被称为 "固定原点 "评估。然而,时间序列可能包含离群值,一个差的模型可能比更合适的模型表现得更好。为了加强对模型的评估,我们使用了一种叫做 "滚动原点 "的方法。

滚动原点是一种预测方法,根据这种方法,预测原点被连续更新,预测是由每个原点产生的(Tashman 2000)。这种方法允许获得几个时间序列的预测误差,从而更好地了解模型的表现。

如何实现呢?

下图描述了滚动原点的基本思想。白色单元格对应的是样本内数据,而浅灰色单元格对应的是前三步的预测。该图中时间序列有25个观测值,预测从8个原点开始产生,从原点15开始。模型在每次迭代中都被重新估计,并产生预测结果。之后,在系列的末尾增加一个新的观测值,这个过程继续进行。当没有更多的数据需要添加时,这个过程就会停止。这可以被认为是一个滚动的原点,有一个固定的保留样本量。这个程序的结果是产生了8个一到三步的预测。在此基础上,我们可以计算出误差测量方法,并选择表现最好的模型。

从8个原点产生预测的另一个选择是,从原点17而不是15开始(见下图)。在这种情况下,程序一直持续到原点22,即产生最后一个三步超前预测的时候,然后继续以递减的预测范围进行。因此,两步预测从原点23产生,只有一步预测从原点24产生。因此,我们得到8个一步预测,7个两步预测和6个三步预测。这可以被认为是一个滚动的原点,有一个非固定的保留样本量。可用于在小样本的情况下,当我们没有多余的观测值的时候。

最后,在上述两种情况下,我们的样本量都在增加。然而对于某些研究目的,我们可能需要一个恒定的内样本。下图展示了这样一种情况。在这种情况下,在每次迭代中,我们在系列的末尾增加一个观察值,并从系列的开始删除一个观察值(深灰色单元)。

R实现:一元时间序列ARIMA案例

R实现了对任何函数的滚动原点估计,有一个预定义的调用,并返回预期的值。

我们从一个简单的例子开始,从正态分布生成序列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x <- rnorm(100,100,10)

我们在这个例子中使用ARIMA(0,1,1)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
predict(arima(x=data,order=c(0,1,1)),n.ahead=h

调用包括两个重要元素:data和h。data指定了样本内值在我们要使用的函数中的位置。h将告诉我们的函数,在选定的函数中指定了预测的范围。在这个例子中,我们使用arima(x=data,order=c(0,1,1)),产生了一个想要的ARIMA(0,1,1)模型,然后我们使用predict(...,n. ahead=h),从该模型产生一个预测。

还需要指定函数应该返回什么。可以是条件平均数(点预测),预测区间,模型的参数。然而,根据你使用的函数返回的内容,滚动预测返回的内容有一些不同。如果它是一个矢量,那么滚动预测将产生一个矩阵(列中有每个原点的值)。如果它是一个矩阵,那么就会返回一个数组。最后,如果它是一个列表,那么将返回一个列表的列表。

我们先从predict()函数中收集条件平均值。

我们可以使用滚动原点从模型中产生预测结果。比方说,我们想要三步预测和8个原点,所有其他参数的默认值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
predro(x, h , orig )

该函数返回一个列表,其中包含我们要求的所有数值,再加上保留样本的实际数值。我们可以根据这些值计算一些基本的误差指标,例如,按比例的平均绝对误差。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apply(abs(holdo - pred),1,mean) / mean(actual)

在这个例子中,我们使用apply()函数,区分不同的预测期,并了解模型在每个预测期的表现。以类似的方式,我们可以评估其他一些模型的性能,并与第一个模型产生的误差进行比较。这些数字本身并不能说明什么,但如果我们把这个模型的表现与另一个模型进行比较,那么我们就可以推断出一个模型是否比另一个模型更适合数据。

我们还可以绘制来自滚动原点的预测结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plot(Values1)
在这个例子中,来自不同来源的预测结果是相互接近的。这是因为数据是平稳的,模型是相当稳定的。

如果我们看一下返回的矩阵,我们会注意到它们包含缺失值。

这是因为在默认情况下,保留样本被设置为非常数。内样本也被设置为非常数,这就是为什么模型在每次迭代时都会对增加的样本进行重新估计。我们可用修改这一点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
predro(x, h , ori )

请注意,return2的值与return1的值不能直接比较,因为它们是由不同的起点生成的。这一点在我们绘图时可以看出来。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plot(returned2)

如果你使用预测包中的函数,可以用以下方式修改调用和返回值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 "forecast(ets(data) ,level=95"
 c("mean","lower","upper")

多元时间序列ARIMA案例

当你有一个模型和一个时间序列时,滚动预测的是一个方便的方法。但是如果你需要将不同的模型应用于不同的时间序列呢?我们会需要一个循环。在这种情况下,有一个简单的方法来使用滚动预测。现在引入几个时间序列。

对于这个例子,我们需要一个返回值的数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array(NA,c(3,2,3,8))

在这里,我们将有3个时间序列,2个模型和来自8个来源的3步超前预测。我们的模型将被保存在一个单独的列表中。在这个例子中,我们将有ARIMA(0,1,1)和ARIMA(1,1,0)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 list(c(0,1,1), c(1,1,0))

我们从函数中返回相同的预测值,但我们需要改变调用方式,因为现在我们必须将这两种不同的模型考虑在内。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"predict(arima(data,Models\[\[i\]\])ahead=h)"

我们没有直接指定模型,而是使用列表中的第i个元素。

我们还想从保留样本中保存实际值,以便能够计算误差。

这个数组有3个时间序列和来自8个原点的3步超前预测的维度。

最后,我们可以写一个循环并产生预测结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(j in 1:3)  for(i in 1:2)predro(data, h , or=8)

比较两者在不同时间序列上的表现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exp(mean(log(apply(Holdout - Fore  / apply(abs(Holdout - Fore ))

因此,根据这些结果,可以得出结论,在我们的三个时间序列上,ARIMA(0,1,1)平均来说比ARIMA(1,1,0)更准确。

线性回归和ARIMAX案例

我们的最后一个例子,我们创建数据框并拟合线性回归。

请注意,在这个例子中,lm()函数中实现的回归依赖于数据框架,不使用预测范围。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
predict(lm(y~x1+x2+x3,xre),newdat

此外,函数predict.lm()返回的是一个带有数值的矩阵,而不是一个列表。最后调用滚动预测。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pred(y, h , ori  )

在这种情况下, 我们需要在调用的数据参数中提供因变量, 因为该函数需要提取holdout的值.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
predict(lm( xreg ,new =xreg "
predro( $y, h , or  )
plot( Return)

作为最后一个例子,我们考虑以下数据的ARIMAX模型。

并相应地修改调用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ourCall <- "predict(arima(x=data, order=c(0,1,1), xreg=xreg\[counti,\]), n.ahead=h, newxreg=xreg\[counto,\])"

考虑到现在我们处理的是ARIMA,我们需要同时指定数据和h。此外,xreg与之前的例子不同,因为它现在不应该包含因变量。

如果你使用ETSX模型,调用可以简化为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 "es(x=dat, xreg, h=h"

最后,上面提到的所有例子都可以并行完成,特别是当数据非常多且样本量很大时。

参考文献

Davydenko, Andrey, and Robert Fildes. 2013. “Measuring Forecasting Accuracy: The Case of Judgmental Adjustments to Sku-Level Demand Forecasts.” International Journal of Forecasting 29 (3). Elsevier B.V.: 510–22. https://doi.org/10.1016/j.ijforecast.2012.09.002.

Petropoulos, Fotios, and Nikolaos Kourentzes. 2015. “Forecast combinations for intermittent demand.” Journal of the Operational Research Society 66 (6). Nature Publishing Group: 914–24. https://doi.org/10.1057/jors.2014.62.


本文摘选《R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 拓端数据部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
拓端tecdat|R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
当需要为数据选择最合适的预测模型或方法时,预测者通常将可用的样本分成两部分:内样本(又称 "训练集")和保留样本(或外样本,或 "测试集")。然后,在样本中估计模型,并使用一些误差指标来评估其预测性能。
拓端
2021/06/29
1.2K0
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
当ARIMA模型包括其它时间序列作为输入变量时,被称为传递函数模型(transfer function model)、多变量时间序列模型(multivariate time series model)、ARIMAX模型或Box-Tiao模型。传递函数模型是ARIMA模型的自然推广,Pankratz统称这种包含其它时间序列作为输入变量的ARIMA模型为动态回归。
拓端
2022/03/09
1.3K0
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
R语言ARIMA集成模型预测时间序列分析
本文我们使用4个时间序列模型对每周的温度序列建模。第一个是通过auto.arima获得的,然后两个是SARIMA模型,最后一个是Buys-Ballot方法。
拓端
2020/12/30
1.1K0
R语言ARIMA集成模型预测时间序列分析
ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据|附代码数据
该模型假定一个变量的未来的值线性地取决于其过去的值,以及过去(随机)影响的值。ARIMAX模型是ARIMA模型的一个扩展版本。它还包括其他独立(预测)变量。该模型也被称为向量ARIMA或动态回归模型。
拓端
2023/01/12
1.6K0
【视频】ARIMA时间序列模型原理和R语言ARIMAX预测实现案例
ARIMA是可以拟合时间序列数据的模型,根据自身的过去值(即自身的滞后和滞后的预测误差)“解释” 给定的时间序列,因此可以使用方程式预测未来价值。任何具有模式且不是随机白噪声的“非季节性"时间序列都可以使用ARIMA模型进行建模。
拓端
2023/06/13
9000
R语言非线性动态回归模型ARIMAX、随机、确定性趋势时间序列预测个人消费和收入、用电量、国际游客数量
传统时间序列模型允许包含过去观察到的系列信息,但不允许客户包含其他可能相关的信息。例如,假期的影响、竞争对手的活动、法律变化、整体经济或其他外部变量可能解释了某些历史变动,并且可能导致更准确的预测,另一方面,回归模型允许客户从预测变量中包含大量相关信息,但不允许处理ARIMA模型中可以处理的细微时间序列动态。在本文中,我们帮助客户考虑如何扩展ARIMA模型,以便允许其他信息被纳入模型中。
拓端
2023/10/17
4260
R语言非线性动态回归模型ARIMAX、随机、确定性趋势时间序列预测个人消费和收入、用电量、国际游客数量
python3用ARIMA模型进行时间序列预测
ARIMA是首字母缩写词,代表自动回归移动平均。它是一类模型,可在时间序列数据中捕获一组不同的标准时间结构。
拓端
2020/08/07
2.4K0
R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数据
在本文中,我将介绍ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型如何用于预测给定的时间序列数据。
拓端
2020/07/17
3.3K0
R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数据
ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据|附代码数据
该模型假定一个变量的未来的值线性地取决于其过去的值,以及过去(随机)影响的值。ARIMAX模型是ARIMA模型的一个扩展版本。它还包括其他独立(预测)变量。该模型也被称为向量ARIMA或动态回归模型。
拓端
2023/08/15
3560
使用R语言进行时间序列(arima,指数平滑)分析
您要分析时间序列数据的第一件事就是将其读入R,并绘制时间序列。您可以使用scan()函数将数据读入R,该函数假定连续时间点的数据位于包含一列的简单文本文件中。
拓端
2020/08/04
5.3K0
使用R语言进行时间序列(arima,指数平滑)分析
Python时间序列分析--ARIMA模型实战案例
本文将介绍使用Python来完成时间序列分析ARIMA模型的完整步骤与流程,绘制时序图,平稳性检验,单位根检验,白噪声检验,模型定阶,模型有啊,参数估计,模型检验等完整步骤。Python建立时间序列分析–ARIMA模型实战案例
润森
2022/08/18
1.8K0
Python时间序列分析--ARIMA模型实战案例
R语言使用ARIMAX预测失业率经济时间序列数据|附代码数据
在大数据的趋势下,我们经常需要做预测性分析来帮助我们做决定。其中一个重要的事情是根据我们过去和现在的数据来预测未来。这种方法我们通常被称为预测
拓端
2023/01/10
1.3K0
ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据
标准的ARIMA(移动平均自回归模型)模型允许只根据预测变量的过去值进行预测。该模型假定一个变量的未来的值线性地取决于其过去的值,以及过去(随机)影响的值。ARIMAX模型是ARIMA模型的一个扩展版本。它还包括其他独立(预测)变量。该模型也被称为向量ARIMA或动态回归模型。
拓端
2022/06/08
3.3K0
ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据
时间序列分析算法【R详解】
简介 在商业应用中,时间是最重要的因素,能够提升成功率。然而绝大多数公司很难跟上时间的脚步。但是随着技术的发展,出现了很多有效的方法,能够让我们预测未来。不要担心,本文并不会讨论时间机器,讨论的都是很实用的东西。 本文将要讨论关于预测的方法。有一种预测是跟时间相关的,而这种处理与时间相关数据的方法叫做时间序列模型。这个模型能够在与时间相关的数据中,寻到一些隐藏的信息来辅助决策。 当我们处理时序序列数据的时候,时间序列模型是非常有用的模型。大多数公司都是基于时间序列数据来分析第二年的销售量,网站流量,
Angel_Kitty
2018/04/09
2.8K0
时间序列分析算法【R详解】
Python | ARIMA时间序列模型预测航空公司的乘客数量
以下是一个时间序列示例,该示例说明了从1949年到1960年每月航空公司的乘客数量。
拓端
2021/09/29
2.2K0
时间序列预测模型-ARIMA原理及Python实现!
再介绍本篇的内容之前,我们先来看一下本文用到的数据。本文用到的中国银行股票数据下载:http://pan.baidu.com/s/1gfxRFbH。
石晓文
2018/12/06
14.7K1
R语言使用ARIMAX预测失业率经济时间序列数据|附代码数据
在大数据的趋势下,我们经常需要做预测性分析来帮助我们做决定。其中一个重要的事情是根据我们过去和现在的数据来预测未来。这种方法我们通常被称为预测
拓端
2023/04/05
5120
R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模|附代码数据
本文将说明单变量和多变量金融时间序列的不同模型,特别是条件均值和条件协方差矩阵、波动率的模型
拓端
2023/05/06
4730
Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
使用ARIMA模型,您可以使用序列过去的值预测时间序列。在本文中,我们从头开始构建了一个最佳ARIMA模型,并将其扩展到Seasonal ARIMA(SARIMA)和SARIMAX模型。
拓端
2020/08/07
9.2K0
时间序列模型(ARIMA和ARMA)完整步骤详述「建议收藏」
我于2019年发布此篇文章至今收获了许多人的指点,当时的代码的确晦涩难懂,近期有空,将代码重新整理了一遍,重新发送至此。希望能够帮助大家更好地理解。
全栈程序员站长
2022/08/25
7.6K0
时间序列模型(ARIMA和ARMA)完整步骤详述「建议收藏」
推荐阅读
拓端tecdat|R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
1.2K0
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
1.3K0
R语言ARIMA集成模型预测时间序列分析
1.1K0
ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据|附代码数据
1.6K0
【视频】ARIMA时间序列模型原理和R语言ARIMAX预测实现案例
9000
R语言非线性动态回归模型ARIMAX、随机、确定性趋势时间序列预测个人消费和收入、用电量、国际游客数量
4260
python3用ARIMA模型进行时间序列预测
2.4K0
R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数据
3.3K0
ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据|附代码数据
3560
使用R语言进行时间序列(arima,指数平滑)分析
5.3K0
Python时间序列分析--ARIMA模型实战案例
1.8K0
R语言使用ARIMAX预测失业率经济时间序列数据|附代码数据
1.3K0
ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据
3.3K0
时间序列分析算法【R详解】
2.8K0
Python | ARIMA时间序列模型预测航空公司的乘客数量
2.2K0
时间序列预测模型-ARIMA原理及Python实现!
14.7K1
R语言使用ARIMAX预测失业率经济时间序列数据|附代码数据
5120
R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模|附代码数据
4730
Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
9.2K0
时间序列模型(ARIMA和ARMA)完整步骤详述「建议收藏」
7.6K0
相关推荐
拓端tecdat|R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验