R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数据

本文深入探讨了R语言中ARMA,ARIMA,SARIMA和ARIMAX模型在时间序列预测中的应用。通过实例展示了如何使用backshift运算符计算滞后差异,以及如何利用自相关函数和部分自相关函数进行数据分析。文章还详细介绍了如何在R中分解时间序列数据,区分固定与非固定过程,并提供了多个数据集的预测模型实例。
摘要由CSDN通过智能技术生成

在本文中,我将介绍ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型如何用于预测给定的时间序列数据。

 

使用后移运算符计算滞后差异

我们可以使用backshift运算符来执行计算。例如,后轴运算符可用于计算的时间序列值的滞后差异ÿy经由yi−Bk(yi),∀i∈k+1,…,tyi−Bk(yi),∀i∈k+1,…,t其中kk表示的差异滞后。对于k=1k=1,我们获得普通的成对差异,而对于k=2k=2我们获得相对于前任先前的成对差异。让我们考虑R中的一个例子。

使用R,我们可以使用diff函数计算滞后差异。函数的第二个参数表示所需的滞后kk,默认设置为k=1k=1。例如:

 
By <- diff(y) <span style="color:#888888"># y_i - B y_i</span>
B3y <- diff(y, <span style="color:#880000">3</span>) <span style="color:#888888"># y_i - B^3 y_i</span>
message(paste0(<span style="color:#880000">"y is: "</span>, paste(y, collapse = <span style="color: 
## y is: 1,3,5,10,20
## By is: 2,2,5,10
## B^3y is: 9,17

 自相关函数

 

要计算自相关,我们可以使用以下R函数:

<span style="color:#000000"><span style="color:#000000"><code>get_autocor <- <strong>function</strong>(x, lag) {
    x.left <- x[<span style="color:#880000">1</span>:(length(x) - lag)]
    x.right <- x[(<span style="color:#880000">1</span>+lag):(length(x))]
    autocor <- cor(x.left, x.right)
    <strong>return</strong>(autocor)
}</code></span></span>

 

<span style="color:#000000"><span style="color:#000000"><code><span style="color:#888888"># correlation of measurements 1 time point apart (lag 1)</span>
get_autocor(y, <span style="color:#880000">1</span>) </code></span></span>
## [1] 0.9944627
<span style="color:#000000"><span style="color:#000000"><code><span style="color:#888888"># correlation of measurements 2 time points apart (lag 2)</span>
get_autocor(y, <span style="color:#880000">2</span>)</code></span></span>
## [1] 0.9819805

数据的高度自相关表明数据具有明确的时间趋势。

部分自相关

由于观察到较大滞后的自相关可以是较低滞后的相关结果,因此通常值得考虑部分自相关函数(pACF)。pACF的想法是计算部分相关性,这种相关性决定了对变量的最近观察的相关性。pACF定义为:

 

φkk:=Corr(yt,yt−k|yt−1,⋯,yt−k+1)k=0,1,2,⋯φkk:=Corr⁡(yt,yt−k|yt−1,⋯,yt−k+1)k=0,1,2,⋯

 

使用pACF可以识别是否存在实际滞后的自相关或这些自相关是否是由其他测量引起的。

计算和绘制ACF和pACF的最简单方法是分别使用acfpacf函数:

<span style="color:#000000"><span style="color:#000000"><code>par(mfrow = c(<span style="color:#880000">1</span>,<span style="color:#880000">2</span>))
acf(y) <span style="color:#888888"># conventional ACF</span>
pacf(y) <span style="color:#888888"># pACF</span></code></span></span>

在ACF可视化中,ACF或pACF被绘制为滞后的函数。指示的水平蓝色虚线表示自相关显着的水平。

分解时间序列数据

  •  StSt
  • TtTt
  • ϵtϵt

执行分解的方式取决于时间序列数据是加法还是乘法。

加法和乘法时间序列数据

加法模型假设数据可以分解为

 

yt = St + Tt + ϵt.yt = St + Tt + ϵt.

 

另一方面,乘法模型假设数据可以被分解为

 

 

  • 添加剂:每个时期的季节效应放大器相似。
  • 乘法:季节性趋势随时间序列的变化而变化。

AirPassengers数据集提供了乘法时间序列的示例。

<span style="color:#000000"><span style="color:#000000"><code>data(AirPassengers)
plot(AirPassengers)</code></span></span>

log(StTtϵt)=log(St)+log(Tt)+log(ϵt)log⁡(StTtϵt)=log⁡(St)+log⁡(Tt)+log⁡(ϵt)AirPassengers 数据集:

<span style="color:#000000"><span style="color:#000000"><code>plot(log(AirPassengers))</code></span></span>

正如我们所看到的,采用对数已经使季节性成分的幅度沿时间均衡。请注意,总体增长趋势没有改变。

在R中分解时间序列数据

要分解R中的时间序列数据,我们可以使用该decompose函数。请注意,我们应该通过type参数提供时间序列是加法的还是乘法的。

示例1:AirPassengers数据集

对于AirPassengers数据集,我们指定数据是乘法的并获得以下分解:

<span style="color:#000000"><span style="color:#000000"><code>plot(decompose(AirPassengers, type = <span style="color:#880000">"multiplicative"</span>))</code></span></span>

分解表明,多年来航空公司乘客总数在增加。此外,我们已经观察到的季节性影响已被清楚地捕捉到。

示例2:EuStockMarkets数据集

让我们考虑可以为EuStockMarkets数据集找到的分解:

<span style=" /span>] <span style="color:#888888"># DAX data</span>
<span style="color:#888888"># data do not seem to be multiplicative, use additive decomposition</span>
decomposed <- decompose(daxData, type = < 

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值