R语言非线性动态回归模型ARIMAX、随机、确定性趋势时间序列预测个人消费和收入、用电量、国际游客数量

发布时间 2023-10-10 23:49:59作者: 拓端tecdat

全文链接:https://tecdat.cn/?p=33838

原文出处:拓端数据部落公众号

传统时间序列模型允许包含过去观察到的系列信息,但不允许客户包含其他可能相关的信息。例如,假期的影响、竞争对手的活动、法律变化、整体经济或其他外部变量可能解释了某些历史变动,并且可能导致更准确的预测。另一方面,回归模型允许客户从预测变量中包含大量相关信息,但不允许处理ARIMA模型中可以处理的细微时间序列动态。在本文中,我们帮助客户考虑如何扩展ARIMA模型,以便允许其他信息被纳入模型中。

我们考虑了以下形式的回归模型:

image.png

在本文中,我们允许回归中的误差包含自相关。例如,如果ηt'遵循ARIMA(1,1,1)模型,我们可以写成:

image.png

其中εt'是一个白噪声序列。

估计

在估计带有ARMA误差的回归模型时,一个重要的考虑因素是模型中的所有变量必须首先是平稳的。因此,我们首先必须检查yt'和所有预测变量(x1,t,...,xk,t)(β,...,γ)是否呈现出平稳性。

因此,我们首先对模型中的非平稳变量进行差分处理。

如果模型中的所有变量都是平稳的,那么我们只需要考虑残差的ARMA误差。我们得到如下模型:

image.png

其中y′t=yt−yt−1,x′t,i=xt,i−xt−1,i,β′=β−β−1,η′t=ηt−ηt−1,这是一个带有ARMA误差的差分模型。

R中ARIMAX回归

以下R命令:

 
 
fit <- Arima(y, xreg=x, order=c(1,1,0))

将拟合模型y′t=β1x′t+η′t,其中η′t=ϕ1η′t−1+εt是一个AR(1)误差。这等同于带有ARIMA误差的差分模型。

image.png

其中ηt是一个ARIMA(1,1,0)误差。由于进行差分,常数项消失。如果要在差分模型中包含常数项,需要指定include.drift=TRUE。

最终模型的AICc将被计算,并且该值可用于确定最佳预测变量。也就是说,应对要考虑的所有预测变量子集重复此过程,并选择AICc值最小的模型。

示例:个人消费和收入

图1显示了1970年至2016年第3季度个人消费支出和个人可支配收入的季度变化。我们希望根据收入变化来预测支出变化。

 
 


autoplot(uschange[,1:2], 
.......
income")

image.png

图1:1970年至2016年第三季度个人消费支出和可支配个人收入的季度百分比变化。

 
 
(fit <- auto.arim.......
"Income"]))

image.png

数据已经是平稳的了(我们考虑的是百分比变化而不是原始支出和收入),因此不需要进行差分处理。拟合的模型是

image.png

我们可以使用residuals()函数来恢复对于ηt和εt序列的估计值。

 
 
cbind("Regression Errors" = residuals.......

  autoplot(facets=TRUE)

image.png 图2:从拟合模型中获取的回归误差(ηt)和ARIMA误差(εt)。

应该看出ARIMA误差类似于一个白噪声序列。

image.png 图3: 残差(即ARIMA误差)与白噪声没有显著差异。

image.png

预测

使用具有ARIMA误差的回归模型进行预测时,我们需要预测模型的回归部分和ARIMA部分,并合并结果。与普通的回归模型一样,为了获得预测值,我们首先需要预测预测变量。

示例:个人消费和收入

我们将计算未来八个季度的预测值,假设未来的可支配收入百分比变化将等于过去四十年的平均百分比变化。

 
 
fcast <- forecast.......

image.png

图4:使用采用ARIMA(1,0,2)误差模型回归消费支出百分比变化与可支配收入百分比变化,获取的预测值。

该模型的预测区间开发的模型更窄,因为我们现在能够使用收入预测变量来解释数据的一部分变异性。

示例:预测用电量

日用电量可以建模为与温度有关的函数。正如在电费单上可以观察到的,在寒冷的天气里由于加热和炎热的天气里由于空调等原因使用更多的电。寒冷和炎热天气对电力需求的增加反映在图中的U形,其中将日需求与日最高气温相关联。

2014年维多利亚州每日用电量与最高气温的关系。

图5:2014年每日用电量与最高气温的关系。

图6显示了每日需求和每日最高气温的时间序列。这些图强调了需要一个非线性动态模型。

2014年维多利亚州每日用电量和最高气温。

图6:2014年每日用电量和最高温度。

在此示例中,我们使用auto.arima()函数拟合具有ARMA误差的二次回归模型。

 
 
xreg <- cbind(MaxTemp =.......

fit <- auto........
 xreg = xreg)

Residuals diagnostics for a dynamic regression model for daily electricity demand with workday and quadratic temperature effects.

图7:每日电力需求的动态回归模型残差诊断。

image.png

该模型的残差存在显著的自相关性,这意味着预测区间可能无法提供准确的覆盖范围。此外,残差直方图显示出一个正的异常值,这也会影响预测区间的覆盖范围。

使用估计的模型,我们从2015年1月1日(星期四,新年假日)开始预测未来14天的数据。

 
 
fcast <- forecast(fit,.......

每日电力需求的动态回归模型预测。所有未来温度都设置为26摄氏度,工作日虚拟变量被设置为已知的未来值。

图8:每日电力需求的动态回归模型预测。所有未来温度都设置为26摄氏度,工作日虚拟变量被设置为已知的未来值。

随机趋势和确定性趋势

有两种不同的方法来对线性趋势进行建模。通过回归模型可以得到一个“确定性趋势”,如下所示:

image.png

其中ηt为ARMA过程。通过以下模型可以得到一个“随机趋势”:

image.png

这类似于带趋势的随机游走,但这里的误差项是一个ARMA过程,而不仅仅是白噪声。

尽管这些模型看起来非常相似(它们只有在应用到ηt′′时需要应用的差分数量不同),它们的预测特性却非常不同。

示例:国际游客数据

 
 
autoplot(austa) + xlab("Year").......
)

1980年至2015年澳大利亚的年际国际游客人数

图9:1980年至2015年年际国际游客人数。

图9显示了1980年至2015年每年国际游客总数。我们将对这些数据拟合一个确定性趋势模型和一个随机趋势模型。确定性趋势模型的拟合如下:

 
 
trend <- seq_along.......
rend))

image.png

这个模型可以表示为:

image.png

预计每年游客数量的增长为0.17百万人。

或者,可以使用随机趋势模型进行估计。

 
 
(fit2 <- au.......
, d=1))

image.png 这个模型可以表示为: yt−yt−1=0.173+η′t, 或者等价地

image.png

在这种情况下,游客数量的预计增长也是0.17百万人。尽管增长估计相似,但预测区间不同,如图所示。特别是,由于误差是非平稳的,随机趋势具有更宽的预测区间。

 
 
fc1 <- forecast(fit1.......

  guides(colour=guide_legend(t)

austaf-1.png

图10:使用确定趋势模型和随机趋势模型对国际游客的年度预测。

确定性趋势隐含了一个假设,即趋势的斜率不会随时间而变化。另一方面,随机趋势可以变化,并且估计的增长仅被假设为历史时期的平均增长,而不一定是未来观察到的增长率。因此,使用随机趋势进行预测更安全,特别是对于较长的预测时间范围,在这种情况下,预测区间允许未来增长的不确定性更大。


thumb-gettyimages-1147798962 (1).webp 最受欢迎的见解

1.在python中使用lstm和pytorch进行时间序列预测

2.python中利用长短期记忆模型lstm进行时间序列预测分析

3.Python用RNN循环神经网络:LSTM长期记忆、GRU门循环单元、回归和ARIMA对COVID-19新冠疫情新增人数时间序列

4.Python TensorFlow循环神经网络RNN-LSTM神经网络预测股票市场价格时间序列和MSE评估准确性

5.r语言copulas和金融时间序列案例

6.R 语言用RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

7.Matlab创建向量自回归(VAR)模型分析消费者价格指数 (CPI) 和失业率时间序列

8.r语言k-shape时间序列聚类方法对股票价格时间序列聚类

9.R语言结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析