前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言非线性动态回归模型ARIMAX、随机、确定性趋势时间序列预测个人消费和收入、用电量、国际游客数量

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

作者头像
拓端
发布2023-10-17 14:46:31
2620
发布2023-10-17 14:46:31
举报
文章被收录于专栏:拓端tecdat拓端tecdat

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

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

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

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

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

估计

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

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

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

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

R中ARIMAX回归

以下R命令:

代码语言:javascript
复制
fit <- Arima(y, xreg=x, order=c(1,1,0))

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

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

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

示例:个人消费和收入

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

代码语言:javascript
复制


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

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

代码语言:javascript
复制
(fit <- auto.arim.......
"Income"]))


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

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

代码语言:javascript
复制
cbind("Regression Errors" = residuals.......

  autoplot(facets=TRUE)

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

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

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

预测

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

示例:个人消费和收入

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

代码语言:javascript
复制
fcast <- forecast.......

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

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

示例:预测用电量

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

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

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

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

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

代码语言:javascript
复制
xreg <- cbind(MaxTemp =.......

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

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

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

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

代码语言:javascript
复制
fcast <- forecast(fit,.......

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

随机趋势和确定性趋势

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

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

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

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

示例:国际游客数据

代码语言:javascript
复制
autoplot(austa) + xlab("Year").......
)

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

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

代码语言:javascript
复制
trend <- seq_along.......
rend))

这个模型可以表示为:

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

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

代码语言:javascript
复制
(fit2 <- au.......
, d=1))

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

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

代码语言:javascript
复制
fc1 <- forecast(fit1.......

  guides(colour=guide_legend(t)

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 全文链接:https://tecdat.cn/?p=33838
    • 估计
      • R中ARIMAX回归
        • 示例:个人消费和收入
      • 预测
        • 示例:个人消费和收入
        • 示例:预测用电量
      • 随机趋势和确定性趋势
        • 示例:国际游客数据
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档