时间序列分析算法【R详解】

 2024-02-21 01:06:42  阅读 0

介绍

在商业应用中,时间是最重要的因素,可以提高成功率。 然而,大多数公司都在努力跟上时代的步伐。 但随着技术的发展,出现了许多有效的方法,使我们能够预测未来。 别担心,本文不会讨论时间机器,它会讨论非常实际的东西。

本文将讨论预测方法。 有一种预测是与时间相关的,这种处理与时间相关的数据的方法称为时间序列模型。 该模型可以发现时间相关数据中的一些隐藏信息来辅助决策。

当我们处理时间序列数据时,时间序列模型是非常有用的模型。 大多数公司根据时间序列数据分析第二年的销售额、网站流量、竞争地位等。 然而,很多人并不了解时间序列分析领域。

所以,如果您不了解时间序列模型。 本文将为您介绍时间序列模型的处理步骤及其相关技术。

本文包含以下内容:

目录

* 1.时间序列模型简介

* 2.使用R语言探索时间序列数据

* 3.ARMA时间序列模型介绍

* 4.ARIMA时间序列模型的框架及应用

开始吧

1.时间序列模型简介

让我们开始。 本节包括平稳序列、随机游走、Rho 系数和平稳性检验。 如果您对此一无所知,请不要担心 - 本节将详细介绍这些概念,我敢打赌您喜欢我的介绍。

平稳序列

判断序列是否平稳的标准有3个:

1. 平均值是一个与时间 t 无关的常数。 下图(左)满足平稳序列的条件,下图(右)明显具有时间依赖性。

方差是一个与时间 t 无关的常数。 该性质称为方差齐性。 下图显示了什么是方差对齐,什么不是。 (注意右侧的不同分布。)

协方差是一个常数,只与周期间隔k有关,与时间t无关。 如下图(右)所示,您可以注意到,随着时间的增加,曲线变得越来越近。 因此红色序列的协方差不是恒定的。

为什么我们应该关心平稳时间序列?

除非时间序列是平稳的,否则无法构建时间序列模型。 很多情况下,时间平稳性条件往往不满足,所以首先要做的就是让时间序列平稳,然后尝试用随机模型来预测这个时间序列。 稳定数据的方法有很多,例如消除长期趋势和差异化。

随机游走

这是时间序列最基本的概念。 您可能熟悉这个概念。 然而,工业界的许多人仍然将随机游走视为平稳序列。 在本节中,我将使用一些数学工具来帮助理解这个概念。让我们先看一个例子

示例:想象一个女孩在一个巨大的棋盘上随机移动。 这里,下一个位置仅取决于前一个位置。

(来源:/WOP/…)

现在想象一下你在一个封闭的房间里并且看不到那个女孩。 但你想预测女孩在不同时间会在哪里。 怎样才能更准确地预测呢? 当然,随着时间的推移,你的预测会变得越来越不准确。 在t=0时刻,你肯定知道女孩在哪里。 下一刻,女孩移动到了附件中的八个方格之一。 这时候你预测的概率已经下降到1/8了。 继续预测,我们现在制定这个序列:

$X(t) = X(t-1) + Er(t)$
这里的$Er_t$代表这这个时间点随机干扰项。这个就是女孩在每一个时间点带来的随机性。

现在我们对所有 x 个时间点进行递归,最后我们将得到以下方程:

$X(t) = X(0) + Sum(Er(1),Er(2),Er(3).....Er(t))$

现在,让我们尝试验证随机游走的平稳性假设:

1. 平均值是常数吗?

E[X(t)] = E[X(0)] + Sum(E[Er(1)],E[Er(2)],E[Er(3)].....E[Er(t)])

我们知道,随机过程产生的随机扰动项的期望值为 0。到目前为止: E[X(t)] = E[X(0)] = 常数

2. 方差是否恒定?

Var[X(t)] = Var[X(0)] + Sum(Var[Er(1)],Var[Er(2)],Var[Er(3)].....Var[Er(t)])
Var[X(t)] = t * Var(Error) = 时间相关

因此,我们推断随机游走不是平稳过程,因为它具有时变方差。 此外,如果我们检查协方差,我们会发现协方差是时间相关的。

让我们看一些更有趣的事情

我们已经知道随机游走是一个非平稳过程。 让我们在方程中引入一个新系数,看看是否可以制定一个检查平稳性的公式。

Rho系数

X(t) = Rho * X(t-1) + Er(t)

现在,我们将更改 Rho,看看是否可以使该序列平稳。 这里我们只是看一下,不进行平稳性检验。

让我们从 Rho=0 的完全平稳序列开始。 这是时间序列的图:

将Rho值增加到0.5,我们将得到下图:

您可能会注意到我们的周期越来越长,但基本上似乎没有严重违反平稳性假设。 现在让我们考虑更极端的情况 ρ = 0.9

我们仍然看到,在一定的时间间隔之后,极值返回到零。 这个级数显然也不违反非平稳性。现在,让我们看看使用 ρ = 1 的随机游走

这显然违反了固定条件。 是什么让 rho=1 如此特别? ,这种情况不满足平稳性检验?我们来找出其中的数学原因

公式 X(t) = Rho * X(t-1) + Er(t) 的期望为:

E[X(t)] = Rho *E[ X(t-1)]

这个公式是有道理的。 下一个X(或时间点t)被拉至Rho*前一个x的值。

例如,如果 x(t–1) = 1,则 E[X(T)] = 0.5(Rho = 0.5)。 现在,如果你从零移动到任何方向,你想要的下一步期望就是 0。唯一能让期望变得更大的是错误率。 当 Rho 变为 1 时会发生什么? 不可能再有下一步的可能了。

测试稳定性

这里要学习的最后一个知识点是检查。 。 统计学中,-test测试一个自回归模型是否有单位根。这里根据上面的Rho系数进行调整,将公式转换为-test

X(t) = Rho * X(t-1) + Er(t)
=>  X(t) - X(t-1) = (Rho - 1) X(t - 1) + Er(t)

我们想要测试如果 Rho–1=0,差异是否显着。 如果原假设不成立,我们将得到平稳时间序列。

平稳性测试以及将序列转换为平稳序列是时间序列建模中最重要的部分。 因此,您需要记住本节中提到的所有概念才能继续下一节。

接下来让我们看一个时间序列的例子。

2.使用R探索时间序列

在本节中,我们将学习如何使用 R 来处理时间序列。 这里我们只是探索时间序列,不会建立时间序列模型。

本节使用的数据是R:中的内置数据。 该数据集包含 1949 年至 1960 年每个月国际航空乘客数量的数据。

输入数据集

下面的代码将帮助我们导入数据集并能够看到数据集的一些少量内容。

 1 > data(AirPassengers)#在入数据
 2  > class(AirPassengers)
 3  [1] "ts"
 4 #查看AirPassengers数据类型,这里是时间序列数据
 5  > start(AirPassengers)
 6  [1] 1949 1
 7 #这个是Airpassengers数据开始的时间
 8 > end(AirPassengers)
 9  [1] 1960 12
10 #这个是Airpassengers数据结束的时间
11 > frequency(AirPassengers)
12  [1] 12
13 #时间序列的频率是一年12个月
14  > summary(AirPassengers)
15  Min. 1st Qu. Median Mean 3rd Qu. Max.
16  104.0 180.0 265.5 280.3 360.5 622.0

矩阵中的详细数据

1 #The number of passengers are distributed across the spectrum
2 > plot(AirPassengers)
3 #绘制出时间序列
4 >abline(reg=lm(AirPassengers~time(AirPassengers)))
5 # 拟合一条直线

 1 > cycle(AirPassengers)
 2      Jan Feb Mar Apr May Jun Jul Aug Sep Oct  Nov Dec
 3 1949   1   2   3   4   5   6   7   8   9  10  11  12
 4 1950   1   2   3   4   5   6   7   8   9  10  11  12
 5 1951   1   2   3   4   5   6   7   8   9  10  11  12
 6 1952   1   2   3   4   5   6   7   8   9  10  11  12
 7 1953   1   2   3   4   5   6   7   8   9  10  11  12
 8 1954   1   2   3   4   5   6   7   8   9  10  11  12
 9 1955   1   2   3   4   5   6   7   8   9  10  11  12
10 1956   1   2   3   4   5   6   7   8   9  10  11  12
11 1957   1   2   3   4   5   6   7   8   9  10  11  12
12 1958   1   2   3   4   5   6   7   8   9  10  11  12
13 1959   1   2   3   4   5   6   7   8   9  10  11  12
14 1960   1   2   3   4   5   6   7   8   9  10  11  12
15 #打印每年的周期
16 > plot(aggregate(AirPassengers,FUN=mean))
17 #绘制
18 > boxplot(AirPassengers~cycle(AirPassengers))
19 #绘制盒图

重要推论 年度趋势表明,旅客数量逐年增加。 7 月和 8 月的均值和方差远高于其他月份。 每个月的均值不一样,但方差差异很小。 因此,可以看出,存在很强的周期性。 ,周期12个月或更短。

查看数据并测试数据是构建时间序列模型最重要的部分 - 没有这一步,您将不知道该序列是否平稳。 就像这个例子一样,我们已经知道了这个模型的很多细节。

接下来,我们将建立一些时间序列模型以及这些模型的特点,并做出一些预测。

3.ARMA时间序列模型

ARMA 也称为自回归移动平均混合模型。 ARMA 模型经常用于时间序列。 在ARMA模型中,AR代表自回归,MA代表移动平均。 如果这些术语听起来很复杂,请不要担心 - 下面将在几分钟内简要解释这些概念。

现在我们将了解这些模型的特征。 在开始之前,您必须首先记住 AR 或 MA 不适用于非平稳序列。

在实际应用中,您可能会得到一个非平稳序列。 你要做的第一件事就是将这个序列转换为平稳序列(通过差分微分/转换),然后选择一个可以使用的时间序列模型。

首先,本文将分别介绍两个模型(AR&MA)。 接下来我们就来看看这些车型的特点。

自回归时间序列模型

让我们通过下面的例子来理解AR模型:

目前的情况是,一个国家的GDP(x(t))取决于去年的GDP(x(t-1))。 这假设一个国家今年的GDP总量取决于去年的GDP总量和今年新开的工厂和服务业。 。 但GDP主要还是看去年的GDP。

那么,GDP的计算公式为:

x(t) = alpha *  x(t – 1) + error (t)       (1

这个方程就是AR公式。 公式(1)表明下一个点完全依赖于前一个点。 alpha是一个系数,希望能够找到alpha来最小化错误率。 x(t-1) 也取决于 x(t)。

例如,x(t)代表某一天某城市果汁的销量。 冬天,很少有小贩出售果汁。 突然有一天,气温升高,果汁需求量激增至1000份。 然而,几天后,气温下降了。 但众所周知,人们在炎热的天气里喝果汁,而这些人中有50%在寒冷的天气里仍然喝果汁。 接下来的几天里,这个比例下降到了25%(50%的50%),几天后又逐渐下降到一个很小的数字。 下图解释了AR序列的惯性:

移动平均时间序列模型

接下来是移动平均线的另一个例子。

一个公司会生成某种类型的包,这种包很容易理解。 由于市场竞争激烈,箱包销量从零开始增长。 因此,有一天,他做了一项实验,设计并制作了不同的袋子,但这些袋子不容易买到。 因此,假设市场总需求量为1000个这样的袋子。 某一天,这款包的需求量特别大,很快就断货了。 截至当天结束时,仍有 100 袋未售出。 我们将此误差称为时间点误差。 未来几天仍有不少顾客购买这款包。 以下是描述此场景的简单公式:

x(t) = beta *  error(t-1) + error (t)

尝试画一下这个,它看起来像这样:

您注意到MA和AR模型之间的区别了吗? 在 MA 模型中,噪声/冲击迅速减小。 在AR模型中,会受到很长一段时间的影响。

AR模型和MA模型的区别

AR和MA模型的主要区别在于不同时间点的时间序列对象的相关性。

MA模型将当前预测值表示为过去时期的随机扰动或预测误差的线性组合。 当n>某个值时,x(t)与x(tn)之间的相关性始终为0。AM模型仅通过自身该时刻的历史观测值来反映相关因素对预测目标的影响和作用系列变量。 阶梯模型该模型以变量相对独立的假设为约束,可以消除普通回归预测方法中自变量选择、多重共线性等带来的困难。 也就是说,AM模型中x(t)和x(t-1)之间的相关性随着时间的推移变得越来越小。 应充分利用这一差异。

使用ACF和PACF绘图

一旦我们得到一个平稳的时间序列。 我们必须回答两个最重要的问题;

Q1:这是 AR 流程还是 MA 流程?

Q2:我们需要使用 AR 或 MA 流程的顺序是什么?

为了解决这两个问题,我们需要使用两个系数:

时间序列 x(t) 的样本自相关系数 (ACF) 滞后 k 个周期,样本偏自相关系数 (PACF) 滞后 k 个周期。 公式省略。

AR模型的ACF和PACF:

通过计算可以证明:

- AR的ACF是拖尾序列,即无论滞后周期k有多大,ACF的计算值都与其滞后1到p阶的自相关函数相关。

- AR的PACF是删失序列,即滞后周期k>p时PACF=0。

上面的蓝线显示了与 0 显着不同的值。显然上面的 PACF 图显示了第二个滞后处的审查,这意味着这是一个 AR(2) 过程。

MA模型的ACF和PACF:

- MA的ACF是截断序列,即滞后周期k>p时PACF=0。

- AR的PACF是拖尾序列,即无论滞后周期k有多大,ACF的计算值都与其滞后1到p阶的自相关函数相关。

显然,上面的ACF图在第二个滞后处进行了删失,这被认为是一个MA(2)过程。

目前,本文已经介绍了使用ACF&PACF图来识别平稳序列的类型。 下面我介绍一下时间序列模型的整体框架。 此外,还将讨论时间序列模型的实际应用。

4.ARIMA时间序列模型的框架及应用

至此,本文已经快速介绍了时间序列模型的基本概念,使用R来探索时间序列和ARMA模型。 现在我们把这些零散的东西整理起来,做了一件很有趣的事情。

框架

下面的框架展示了如何逐步“进行时间序列分析”

我们在上一篇文章中讨论了前三个步骤。 尽管如此,这里还是需要做一个简单的解释:

第一步:时间序列可视化

在构建任何类型的时间序列模型之前,分析其趋势至关重要。 我们感兴趣的细节包括该系列中的各种趋势、周期\季节性或随机行为。 在本文的第二部分已经介绍过。

步骤 2:序列是平稳的

一旦我们了解了模式、趋势、周期。 然后我们可以检查该序列是否平稳。 Dicky-是一种非常流行的测试方法。 该测试方法在意见的第一部分中有介绍。 事情还没有结束! 如果发现序列非平稳怎么办?

以下是使时间序列平稳的三种常用技术。

1 消除趋势:这里我们简单地删除时间序列中的趋势成分。 例如,我的时间序列的方程是:

x(t) = (mean + trend * t) + error

这里我简单删除上式中的trend*t部分,建立x(t)=mean+error模型

2 微分:该技术常用于消除非平稳性。 在这里,我们根据序列的差异而不是真实的序列构建模型。 例如:

x(t) – x(t-1) = ARMA (p ,  q)

这种差异也是 ARIMA 的一部分。 现在我们有3个参数:

p:AR
d:I
q:MA

3 季节性:季节性直接纳入 ARIMA 模型中。 我们将在下面的应用部分进一步讨论这一点。

第 3 步:找到最佳参数

参数 p、q 可以使用 ACF 和 PACF 图找到。 除了这种方法之外,如果相关系数ACF和偏相关系数PACF逐渐减小,这表明我们需要进行时间序列平稳性并引入d参数。

步骤 4:恢复 ARIMA 模型

找到这些参数后,我们现在可以尝试恢复 ARIMA 模型。 上一步找到的值可能只是一个近似估计,我们需要探索更多的(p,d,q)组合。 最小的 BIC 和 AIC 模型参数就是我们想要的。 我们还可以尝试一些时令食材。 在这里,我们会注意到 ACF/PACF 图中的一些季节性因素。

第五步:预测

至此,我们有了 ARIMA 模型,现在可以进行预测了。 我们还可以可视化这种趋势并执行交叉验证。

时间序列模型的应用。

这里我们使用前面的例子。 使用该时间序列进行预测。 我们建议您在继续操作之前观察这些数据。

我们从哪里开始?

下图显示了历年的乘客人数。 在往下看之前,先看一下这张图。

以下是我的观察:

1、旅客数量逐年增加。

2. 这似乎是季节性的,每个周期持续不超过 12 个月。

3、数据方差逐年增大。

在进行平稳性检验之前,我们需要解决两个问题。 首先,我们需要消除不均匀方差。 这里我们取这个序列的对数。 其次,我们需要解决序列的趋势。 我们通过区分时间序列来做到这一点。 现在,让我们检查最终系列的平稳性。

1 adf.test(diff(log(AirPassengers)), alternative="stationary", k=0)
2 #这里可能会显示没有这个函数,需要安装一下.install.packages("tseries")
3 #加在这个包,library(tseries
4     data: diff(log(AirPassengers))
5     Dickey-Fuller = -9.6003, Lag order = 0,
6     p-value = 0.01
7     alternative hypothesis: stationary

我们可以看到这个序列足够平稳,可以做任何时间序列模型。

下一步是找到 ARIMA 模型的正确参数。 我们知道“d”为 1,因此我们需要相差 1 才能使级数平稳。 这里我们画出相关图。 下面是该序列的 ACF 图。

#ACF图
acf(log(AirPassengers))

从上表可以看出什么?

显然ACF下降非常缓慢,这意味着乘客数量并不稳定。 之前我们讨论过,我们现在的情况是对序列去对数后的差值做回归,而不是直接对序列去对数后的数据熵差值做回归。 我们来看看微分 ACF 和 PACF 曲线。

> acf(diff(log(AirPassengers)))
> pacf(diff(log(AirPassengers)))

显然ACF截止值与第一次滞后有滞后,所以我们知道p的值应该为0。q的值应该为1或2。经过几次迭代,我们发现(p,d,q)取( 0,1,1 ),AIC 和 BIC 最小。

1 > fit <- arima(log(AirPassengers), c(0, 1, 1),seasonal = list(order = c(0, 1, 1), period = 12))
2 > pred <- predict(fit, n.ahead = 10*12)
3 ts.plot(AirPassengers,2.718^pred$pred, log = "y", lty = c(1,3))

参考

R 中的准时 A

依次地

第8章时间序列分析

标签: 序列 模型 平稳

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码