乐趣区

关于算法:R语言中ARMAARIMABoxJenkinsSARIMA和ARIMAX模型用于预测时间序列数据

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

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

应用 滞后算子 计算滞后差分

咱们能够应用 backshift 滞后算子 来执行计算。例如,滞后算子可用于计算的工夫序列值的滞后 差分,

其中 k 示意的差分滞后期。对于 k =1,咱们取得一般的差分,而对于 k = 2 咱们取得绝对于一阶的差分。让咱们思考 R 中的一个例子。

应用 R,咱们能够应用 diff 函数计算滞后差分。函数的第二个参数示意所需的滞后 k,默认设置为 k =1。例如:

 By <- diff(y) # y\_i - B y\_i
B3y <- diff(y, 3) # y\_i - B^3 y\_i
message(paste0("y is:", paste(y, collapse =
## y is: 1,3,5,10,20
## By is: 2,2,5,10
## B^3y is: 9,17

 自相干函数

滞后 k 的自相干定义为:

要计算自相干,咱们能够应用以下 R 函数:

get_autocor <- function(x, lag) {x.left <- x\[1:(length(x) - lag)\]
    x.right <- x\[(1+lag):(length(x))\]
    autocor <- cor(x.left, x.right)
   return(autocor)
}
get_autocor(y, 1) 
## \[1\] 0.9944627
# 相隔 2 个工夫点(滞后期 2)测量值的相关性
get_autocor(y, 2)
## \[1\] 0.9819805

数据的高度自相干表明数据具备明确的工夫趋势。

偏自相干

因为察看到较大滞后的自相干能够是较低滞后的相干后果,因而通常值得思考偏自相干函数(pACF)。pACF 的想法是计算偏相关性,这种相关性决定了对变量的最近察看样本的相关性。pACF 定义为:

应用 pACF 能够辨认是否存在理论滞后的自相干或这些自相干是否是由其余样本引起的。

计算和绘制 ACF 和 pACF 的最简略办法是别离应用 acfpacf函数:

par(mfrow = c(1,2))
acf(y) # ACF
pacf(y) # pACF

在 ACF 可视化中,ACF 或 pACF 被绘制为滞后的函数。批示的程度蓝色虚线示意自相干 显著 的程度。

合成工夫序列数据

  • St
  • Tt
  • ϵt

执行合成的形式取决于工夫序列数据是加法还是乘法。

加法和乘法工夫序列数据

加法模型假如数据能够合成为

另一方面,乘法模型假如数据能够被合成为

  • 加法:每个期间的节令效应类似。
  • 乘法:季节性趋势随工夫序列的变动而变动。

AirPassengers数据集提供了乘法工夫序列的示例。

data(AirPassengers)
plot(AirPassengers)

AirPassengers 数据集:

plot(log(AirPassengers))

正如咱们所看到的,采纳对数曾经使季节性成分的 变动平衡。请留神,总体增长趋势没有扭转。

在 R 中合成工夫序列数据

要合成 R 中的工夫序列数据,咱们能够应用该 decompose 函数。请留神,咱们应该通过 type 参数提供工夫序列是加法的还是乘法的。

示例 1:AirPassengers 数据集

对于 AirPassengers 数据集,咱们指定数据是乘法的并取得以下合成:

plot(decompose(AirPassengers, type = "multiplicative"))

合成表明,多年来航空公司乘客总数在减少。此外,咱们曾经察看到的季节性影响已被分明地捕捉到。

示例 2:EuStockMarkets 数据集

让咱们思考能够 EuStockMarkets 数据集的合成:

daxData <- EuStockMarkets\[, 1\] #数据仿佛不是可乘的,请应用加法合成

decomposed <- decompose(daxData, type = "additive")
plot(decomposed)

该图显示了 1992 年至 1998 年的 DAX 数据中的以下内容:

  • 整体价格稳步回升。
  • 季节性趋势强烈:每年年初,股价绝对较低,并在冬季完结时达到绝对最大值。
  • 除 1997 年和 1998 年之间的最终测量外,随机噪声的 影响 能够忽略不计。

安稳 与非 安稳 过程

生成工夫序列数据的过程能够是安稳的也能够是非安稳的。例如,数据 EuStockMarketsAirPassengers数据都是非安稳的,因为数据有减少的趋势。为了更好地区分安稳和非安稳过程,请思考以下示例:

par(mfrow = c(1,2))#
data(nino)
x <- nino3.4
plot(x, main = "Stationary process")# 飞机旅客数据
plot(AirPassengers, main = "Non-stationary process")

左图显示了一个安稳过程,其中数据在所有测量中体现类似。右图显示了一个非安稳过程,其中平均值随着工夫的推移而减少。

介绍了与工夫序列数据分析相干的最重要概念后,咱们当初能够开始钻研预测模型。

ARMA 模型

ARMA 代表 自回归挪动均匀模型。ARMA 模型仅实用于安稳过程,并具备两个参数:

  • p:自回归(AR)模型的阶数
  • q:挪动均匀(MA)模型的阶数

应用 backshift 运算符制订 ARMA 模型

应用 backshift 运算符,咱们能够通过以下形式制订 ARMA 模型:

通过定义 ,ARMA 模型简化为

ARIMA 模型

总之,ARIMA 模型具备以下三个参数:

  • p:自回归(AR)模型的阶数
  • d:差分阶数
  • q:挪动均匀(MA)模型的阶数

在 ARIMA 模型中,通过将替换差分,将后果转换为差分 yt

而后通过指定模型

在下文中,让咱们思考 ARIMA 模型的三个参数的解释。

自回归的影响

咱们能够应用该 arima.sim 函数模仿自回归过程。通过该函数,能够通过提供要应用的 MA 和 AR 项的系数来指定模型。在下文中,咱们将绘制自相干图,因为它最适宜于发现自回归的影响。

第一个例子表明,对于 ARIMA(1,0,0)过程,阶数 1 的 pACF 十分高,而对于 ARIMA(2,0,0)过程,阶数 1 和阶数 2 自相干都很重要。因而,能够依据 pACF 显着的最大滞后来抉择 AR 项的阶数。

 差分的影响

 ARIMA(0,1,0)模型简化为随机游走模型

以下示例演示了差分对 AirPassengers 数据集的影响:

尽管第一个图表显示数据显然是非安稳的,但第二个图表明差分工夫序列是相当安稳的。

其中以后估计值取决于先前测量值的残差。

挪动均匀 MA 的影响

能够通过绘制自回归函数来钻研挪动均匀的影响:

请留神,对于自回归图,咱们须要留神第一个 x 轴地位示意滞后为 0(即标识向量)。在第一个图中,只有第一个滞后的自相干是显着的,而第二个图表明前两个滞后的自相干是显着的。为了找到 MA 的阶数,实用与 AR 相似的规定:MA 的阶数对应于自相干显着的最大滞后期。

在 AR 和 MA 之间进行抉择

为了确定哪个更适合,AR 或 MA,咱们须要思考 ACF(自相干函数)和 PACF(偏 ACF)。

AR 和 MA 的影响

AR 和 MA 的组合失去以下工夫序列数据:

 SARIMA 模型

  • P:季节性自回归(SAR)项的阶数
  • D:节令差分阶数
  • q:季节性挪动平均线(SMA)的阶数

ARIMAX 模型

R 中的预测

auto.arima`forecast`

SARIMA 模型用于 安稳 过程

咱们将应用数据展现 ARMA 的应用,该数据 tseries 给出了 Nino Region 3.4 指数的海面温度。让咱们验证数据是否安稳:

d=0

为了验证是否存在任何季节性趋势,咱们将合成数据:

没有整体趋势,这是安稳过程的典型趋势。然而,数据存在强烈的季节性因素。因而,咱们必定心愿蕴含对季节性影响进行建模的参数。

季节性模型

对于季节性模型,咱们须要指定额定的参数参数(P,D,Q)S。因为季节性趋势在工夫序列数据中不占主导地位,咱们将设置 D =0。此外,因为尼诺数据中的季节性趋势是一种年度趋势,咱们能够设置 S =12 个月。为了确定季节性模型的其余参数,咱们思考季节性成分的图。

咱们设置 P =2 Q=0

非季节性模型

对于非季节性模型,咱们须要找到 p 和 q。为此,咱们将绘制 ACF 和 pACF 来确定 AR 和 MA 参数的值。

 咱们能够应用包中的 Arima 函数来拟合模型forecast

咱们当初能够应用该模型来预测将来 Nino 3.4 地区的气温如何变动。有两种办法能够从预测模型中取得预测。第一种办法依赖于 predict 函数,而第二种办法应用包中的 forecast 函数。应用该 predict 性能,咱们能够通过以下形式预测和可视化后果:

## 
## Attaching package: 'ggplot2'
## The following object is masked from 'package:forecast':
## 
##     autolayer

如果咱们不须要自定义绘图,咱们能够应用以下 forecast 函数轻松地获取预测和相应的可视化:

# 应用内置绘图性能:forecast <- forecast(A, h = 60) # 预测将来 5 年
plot(forecast)

用于非安稳数据的 ARIMA 模型

为了演示 ARIMA 模型对非安稳数据的应用,咱们将应用数据集astsa。该数据集提供寰球均匀海洋 – 陆地温度偏差的年度测量值。

d=1

p=0q=1

咱们当初能够预测将来几年均匀海洋 – 陆地温度偏差将如何变动:

该模型表明,将来几年均匀海洋 – 陆地温度偏差将进一步减少。

对于空气质量数据集的 ARIMAX

为了展现 ARIMAX 模型的应用,咱们将应用臭氧数据集。

让咱们加载臭氧数据集并将其划分为测试和训练集。请留神,咱们已确保训练和测试数据蕴含间断的工夫测量。

为此,咱们将在臭氧数据集中创立一个新列,该列反映了绝对工夫点:

当初咱们有了工夫维度,咱们能够绘制臭氧程度:

工夫序列数据仿佛是安稳的。让咱们思考 ACF 和 pACF 图,看看咱们应该思考哪些 AR 和 MA

自相干图十分不分明,这表明数据中实际上没有工夫趋势。因而,咱们会抉择 ARIMA(0,0,0)模型。因为具备参数(0,0,0)的 ARIMAX 模型没有传统线性回归模型的劣势,咱们能够得出结论,臭氧数据的工夫趋势不足以改善臭氧程度的预测。让咱们验证一下:

print(Rsquared.linear)
## \[1\] 0.7676977
  

``````
print(Rsquared.temporal)
  

``````
## \[1\] 0.7569718

咱们能够看到具备负二项式概率线性模型优于 ARIMAX 模型。

对于空气质量数据集的 ARIMAX

要在更适合的数据集上演示 ARIMAX 模型,让咱们加载数据集:

Icecream 数据集蕴含以下变量:

  • 生产 冰淇淋消费量。
  • 支出:均匀每周家庭收入。
  • 价格:每个冰淇淋的价格。
  • temp:华氏 温度 的平均温度。

测量后果是从 1951-03-18 到 1953-07-11 的周围观测。

咱们将模仿生产,冰淇淋生产作为工夫序列,并应用_支出_,_价格_和_平均值_作为外生变量。在开始建模之前,咱们将从数据框中创立一个工夫序列对象。

咱们当初考察数据:

因而,数据有两种趋势:

  1. 总体而言,1951 年至 1953 年间,冰淇淋的消费量大幅减少。
  2. 冰淇淋销售在冬季达到高峰。

因为季节性趋势,咱们可能拟合 ARIMA(1,0,0)(1,0,0)模型。然而,因为咱们晓得温度和外生变量的支出,因而它们能够解释数据的趋势:

income解释了整体趋势。此外,temp解释了季节性趋势,咱们不须要季节性模型。因而,咱们应该应用 ARIMAX(1,0,0)模型进行预测。为了钻研这些假如是否成立,咱们将应用以下代码将 ARIMAX(1,0,0)模型与 ARIMA(1,0,0)(1,0,0)模型进行比拟

ARIMAX(1,0,0)模型的预测显示为蓝色,而 ARIMA(1,0,0)(1,0,0)模型的预测显示为虚线。理论察看值显示为黑线。结果表明,ARIMAX(1,0,0)显著比 ARIMA(1,0,0)(1,0,0)模型更精确。

但请留神,ARIMAX 模型在某种程度上不像纯 ARIMA 模型那样有用于预测。这是因为,ARIMAX 模型须要对应该预测的任何新数据点进行内部预测。例如,对于冰淇淋数据集,咱们没有超出 1953-07-11 的外生数据。因而,咱们无奈应用 ARIMAX 模型预测超出此工夫点,而 ARIMA 模型能够实现:

如果您有任何疑难,请在上面发表评论。


最受欢迎的见解

1. 在 python 中应用 lstm 和 pytorch 进行工夫序列预测

2.python 中利用长短期记忆模型 lstm 进行工夫序列预测剖析

3. 应用 r 语言进行工夫序列(arima,指数平滑)剖析

4.r 语言多元 copula-garch- 模型工夫序列预测

5.r 语言 copulas 和金融工夫序列案例

6. 应用 r 语言随机稳定模型 sv 解决工夫序列中的随机稳定

7.r 语言工夫序列 tar 阈值自回归模型

8.r 语言 k -shape 工夫序列聚类办法对股票价格工夫序列聚类

9.python3 用 arima 模型进行工夫序列预测

退出移动版