设为首页 加入收藏

TOP

时间序列分析算法【R详解】(三)
2017-10-10 12:08:32 】 浏览:6206
Tags:时间序列 分析 算法 详解
用。

4、ARIMA时间序列模型的框架与应用

到此,本文快速介绍了时间序列模型的基础概念、使用R探索时间序列和ARMA模型。现在我们将这些零散的东西组织起来,做一件很有趣的事情。

框架

下图的框架展示了如何一步一步的“做一个时间序列分析
clip_image034
前三步我们在前文意见讨论了。尽管如此,这里还是需要简单说明一下:

第一步:时间序列可视化

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

第二步:序列平稳

一旦我们知道了模式、趋势、周期。我们就可以检查序列是否平稳。Dicky-Fuller是一种很流行的检验方式。在第一部分意见介绍了这种检验方式。在这里还没有结束!如果发现序列是非平稳序列怎么办?
这里有三种比较常用的技术来让一个时间序列平稳。
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模型中。下面的应用部分我们再讨论这个。

第三步:找到最优参数

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

第四步:简历ARIMA模型

找到了这些参数,我们现在就可以尝试简历ARIMA模型了。从上一步找到的值可能只是一个近似估计的值,我们需要探索更多(p,d,q)的组合。最小的BIC和AIC的模型参数才是我们要的。我们也可以尝试一些季节性成分。在这里,在ACF/PACF图中我们会注意到一些季节性的东西。

第五步:预测

到这步,我们就有了ARIMA模型,我们现在就可以做预测了。我们也可以将这种趋势可视化,进行交叉验证。

时间序列模型的应用。

这里我们用前面的例子。使用这个时间序列做预测。我们建议你在进行下一步之前,先观察这个数据。

我们从哪里开始呢?

下图是这些年的乘客数的图。在往下看之前,观察这个图。
clip_image036
这里是我的观察:
1. 乘客有着逐年增加的趋势。
2. 这看起来有季节性,每一个周期不超过12个月。
3. 数据的方差逐年增加。
在我们进行平稳性测试之前我们需要解决两个问题。第一,我们需要消除方差不齐。这里我们对这个序列做求对数。第二我们需要解决序列的趋势性。我们通过对时序序列做差分。现在,我们来检验最终序列的平稳性。

adf.test(diff(log(AirPassengers)), alternative="stationary", k=0)
#这里可能会显示没有这个函数,需要安装一下.install.packages("tseries")
#加在这个包,library(tseries)

Augmented Dickey-Fuller Test

data: diff(log(AirPassengers))
 Dickey-Fuller = -9.6003, Lag order = 0,
 p-value = 0.01
 alternative hypothesis: stationary

我们可以看出这个序列是足够平稳做任何时间序列模型。
下一步就是找到ARIMA模型的正确的参数。我们意见知道’d‘是1,因此我们需要做1差分让序列平稳。这里我们绘制出相关图。下面就是这个序列的ACF图。

#ACF Plots

acf(log(AirPassengers))

clip_image038[4]

从上述表格可以看出什么?

很显然ACF下降的十分的慢,这就意味着乘客的数量并不是平稳的。我们在前面已经讨论了,我们现状准备在序列去对数后的差分上做回归,而不是直接在序列去对数后的数据熵差分。让我们看一下差分后的ACF和PACF曲线吧。

acf(diff(log(AirPassengers)))

clip_image040

pacf(diff(log(AirPassengers)))

clip_image040[1]

显然ACF截止与第一个滞后,因此我们知道p的值应该是0.而q的值应该是1或者2.几次迭代以后,我们发现(p,d,q)取(0,1,1)时,AIC和BIC最小。

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

clip_image042[4]

参考资料

A Complete Tutorial on Time Series Modeling in R
时间序列
第八章时间序列分析

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇R语言各种假设检验实例整理(常用.. 下一篇R语言写2048游戏

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目