R语言时间序列分析之ARIMA模型预测

今天学习ARIMA预测时间序列。

指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求。但是,如果你想使用指数平滑法计算出预测区间, 那么预测误差必须是不相关的, 而且必须是服从零均值、 方差不变的正态分布。即使指数平滑法对时间序列连续数值之间相关性没有要求,在某种情况下, 我们可以通过考虑数据之间的相关性来创建更好的预测模型。自回归移动平均模型( ARIMA) 包含一个确定(explicit) 的统计模型用于处理时间序列的不规则部分,它也允许不规则部分可以自相关。

首先,先确定数据的差分。

ARIMA 模型为平稳时间序列定义的。 因此, 如果你从一个非平稳的时间序列开始, 首先你就需要做时间序列差分直到你得到一个平稳时间序列。如果你必须对时间序列做 d 阶差分才能得到一个平稳序列,那么你就使用ARIMA(p,d,q)模型,其中 d 是差分的阶数。

我们以每年女人裙子边缘的直径做成的时间序列数据为例。从 1866 年到 1911 年在平均值上是不平稳的。 随着时间增加, 数值变化很大。

> skirts <- scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat",skip=5)

Read 46 items

> skirtsts<- ts(skirts,start = c(1866))

> plot.ts(skirtsts)

我们可以通过键入下面的代码来得到时间序列(数据存于“skirtsts”) 的一阶差分, 并画出差分序列的图:

> skirtstsdiff<-diff(skirtsts,differences=1)

> plot.ts(skirtstsdiff)


从一阶差分的图中可以看出,数据仍是不平稳的。我们继续差分。

> skirtstsdiff2<-diff(skirtsts,differences=2)

> plot.ts(skirtstsdiff2)

二次差分(上面)后的时间序列在均值和方差上确实看起来像是平稳的, 随着时间推移, 时间序列的水平和方差大致保持不变。因此, 看起来我们需要对裙子直径进行两次差分以得到平稳序列。

第二步,找到合适的ARIMA模型

如果你的时间序列是平稳的,或者你通过做 n 次差分转化为一个平稳时间序列, 接下来就是要选择合适的 ARIMA模型,这意味着需要寻找 ARIMA(p,d,q)中合适的 p 值和 q 值。为了得到这些,通常需要检查[平稳时间序列的(自)相关图和偏相关图。

我们使用 R 中的“acf()”和“pacf” 函数来分别( 自) 相关图和偏相关图。“acf()”和“pacf 设定“plot=FALSE” 来得到自相关和偏相关的真实值。

> acf(skirtstsdiff2,lag.max=20)

> acf(skirtstsdiff2,lag.max=20,plot=FALSE)

Autocorrelations of series ‘skirtstsdiff2’, by lag

0      1      2      3      4      5      6      7      8      9     10

1.000 -0.303  0.096  0.009  0.102 -0.453  0.173 -0.025 -0.039  0.073 -0.094

11     12     13     14     15     16     17     18     19     20

0.133 -0.089 -0.027 -0.102  0.207 -0.260  0.114  0.101  0.011 -0.090

自相关图显示滞后1阶自相关值基本没有超过边界值,虽然5阶自相关值超出边界,那么很可能属于偶然出现的,而自相关值在其他上都没有超出显著边界, 而且我们可以期望 1 到 20 之间的会偶尔超出 95%的置信边界。

> pacf(skirtstsdiff2,lag.max=20)

> pacf(skirtstsdiff2,lag.max=20,plot=FALSE)

Partial autocorrelations of series ‘skirtstsdiff2’, by lag

1      2      3      4      5      6      7      8      9     10     11

-0.303  0.005  0.043  0.128 -0.439 -0.110  0.073  0.028  0.128 -0.355  0.095

12     13     14     15     16     17     18     19     20

0.052 -0.094 -0.103 -0.034 -0.021 -0.002  0.074  0.020 -0.034

偏自相关值选5阶。

故我们的ARMIA模型为armia(1,2,5)

> skirtsarima<-arima(skirtsts,order=c(1,2,5))

> skirtsarima

SSeries: skirtsts

ARIMA(1,2,5)

Coefficients:

ar1     ma1     ma2     ma3     ma4      ma5

-0.4345  0.2762  0.1033  0.1472  0.0267  -0.8384

s.e.   0.1837  0.2171  0.2198  0.2716  0.1904   0.2888

sigma^2 estimated as 206.1:  log likelihood=-183.8

AIC=381.6   AICc=384.71   BIC=394.09

预测后5年裙子的边缘直径

>  skirtsarimaforecast<-forecast.Arima(skirtsarima,h=5,level=c(99.5))

> skirtsarimaforecast

Point Forecast  Lo 99.5  Hi 99.5

1912       548.5762 507.1167 590.0357

1913       545.1793 459.3292 631.0295

1914       540.9354 396.3768 685.4940

1915       531.8838 316.2785 747.4892

1916       529.1296 233.2625 824.9968

> plot.forecast(skirtsarimaforecast$residuals)   #谢谢@忆水如烟的指正

第三步,检验

在指数平滑模型下, 观察 ARIMA 模型的预测误差是否是平均值为 0 且方差为常数的正态分布(服从零均值、方差不变的正态分布) 是个好主意,同时也要观察连续预测误差是否(自)相关。

> acf(skirtsarimaforecast$residuals,lag.max=20)

> Box.test(skirtsarimaforecast$residuals, lag=20, type="Ljung-Box")

Box-Ljung test

data:  skirtsarimaforecast$residuals

X-squared = 8.5974, df = 20, p-value = 0.9871

既然相 关图显示出在滞后1 - 20阶( l a g s 1 - 20 )中样本自相关值都没有超出显著(置信)边界,而且Ljung-Box检验的p值为0.99,所以我们推断在滞后1-20阶(lags1-20)中没明显证据说明预测误差是非零自相关的。

为了调查预测误差是否是平均值为零且方差为常数的正态分布(服从零均值、方差不变的正态分布),我们可以做预测误差的时间曲线图和直方图(具有正态分布曲线):

> plot.ts(skirtsarimaforecast$residuals)

> plotForecastErrors(skirtsarimaforecast$residuals)

上图预测中的时间曲线图显示出对着时间增加,方差大致为常数(大致不变)(尽管上半部分的时间序

列方差看起来稍微高一些)。时间序列的直方图显示预测误大致是正态分布的且平均值接近于 0(服从零均值的正态分布的)。因此,把预测误差看作平均值为0方差为常数正态分布(服从零均值、方差不变的正态分布)是合理的。

既然依次连续的预测误差看起来不是相关,而且看起来是平均值为 0 方差为常数的正态分布(服从零均值、方差不变的正态分布),那么对于裙子直径的数据, ARIMA(1,2,5)看起来是可以提供非常合适预测的模型。

至此,时间序列的学习结束

R语言时间序列分析之ARIMA模型预测相关推荐

  1. r语言没有forecast这个函数_R语言学习日记——时间序列分析之ARIMA模型预测

    指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求.但是,如果你想使用指数平滑法计算出预测区间,那么预测误差必须是不相关的, 而且必须是服从零均值. 方差不变的正态分 ...

  2. R语言时间序列分析-根据aic值选择arima模型

    在上一篇中,探讨了R语言时间序列分析常用步骤,如何比对AIC值判断最优模型?代码和解释如下: #WWWusage是datasets包自带的每分钟通过服务器连接到因特网的用户数的长度为100的时间序列数 ...

  3. arma模型 java_时间序列分析之 ARIMA 模型的JAVA实现

    最近要用ARIMA模型预测用户的数量变化,所以调研了一下ARIMA模型,最后用JAVA实现了ARIMA算法. 一.ARIMA原理 ARIMA的原理主要参考的是ARIMA原理. 二.JAVA实现 弄懂了 ...

  4. SPSS分析技术:时间序列分析的ARIMA模型;考虑各种促销因素的服装销售额预测

    基础准备 学习积累的过程,是量变到质变的过程.草堂君在前面介绍了时间序列分析的多篇文章,这些文章的安排都是按照循序渐进学习时间序列分析的过程来安排的,大家可以点击下方的链接回顾: 数据分析技术:时间序 ...

  5. 时间序列分析方法——ARIMA模型案例

    目录 一.方法简介 数据示例 二.ARIMA模型python建模过程[^2] 1 添加基础库 2 读取数据 3 绘制时间序列图 4 自相关 5 平稳性检验 6 时间序列的差分d 7 合适的p,q 8 ...

  6. 基于R语言时间序列分析所有指令[2021]

    文章主要是总结一学期所学,基本覆盖了所有常见的指令,足够完成arima模型的数据选择到模型预测.      时间序列应用广泛,不能仅仅局限于理论学习,代码实践更为重要. 往期文章链接: 基于 ARIM ...

  7. R语言时间序列分析小例

    复习心烦,偶遇大作业,故摸鱼 作业题目 自由选取一组数据(可以是R 自带的数据集.或者其它来源,鼓励选取一些有趣的课题进行数据分析),利用我们这学期所学知识建立恰当模型(ARIMA.GARCH 等), ...

  8. Eviews7.2模型建模与预测时间序列分析(ARIMA 模型的建立与预测)

    1.模型识别 (1)数据录入 打开 Eviews 软件,选择―File菜单中的―New–Workfile|选项,在"Workfile structure type" 栏选择&quo ...

  9. R时间序列分析|SP500股指的ARIMA模型预测与残差ARCH效应分析

    R时间序列分析|S&P500股指的ARIMA模型预测与残差ARCH效应分析 前言 一.数据及分析目的 二.数据探索 三.ARIMA模型构建 四.残差分析 五.模型预测 前言 由于R语言对新手并 ...

最新文章

  1. 多波次导弹发射中的规划问题(二) 问题一解答
  2. 【ESP8266】使用ESP8266 NONOS SDK的JSON API
  3. Weex 解决Print: Entry, :CFBundleIdentifier, Does Not Exist 错误方法
  4. 数据结构实验之栈五:下一较大值(一)
  5. Hive 处理 json 的几个函数
  6. Java中判断当前数据是否全为数字
  7. HTTP 错误 403.1 - 禁止访问:执行访问被拒绝
  8. 【SimpleITK】分割结果融合策略
  9. 《一本书读懂24种互联网思维》读书笔记
  10. 通过GPS测试跑步速度可行性验证
  11. 华为云计算hcip证书有效期_华为云计算容器HCIP V1.0认证
  12. 服务器ie浏览器总是未响应怎么办,电脑ie浏览器老是无响应怎么办
  13. 【最强大脑】天才数学家陶哲轩亲授25条职业建议
  14. 产品分析 | K12在线教育之猿辅导
  15. 为什么越来越多的人选择FUP T10S系列超声波探伤仪
  16. 【转】美国百所大学招生网专页~
  17. 实验室设备管理系统SQL代码
  18. 保证金监控中心查询期货开户密码
  19. Delphi著名皮肤控件库大全
  20. 【Markdown】Typora中文手册

热门文章

  1. 石膏板建筑材料英国UKCA认证—EN 520
  2. ubuntu下安装搜狗拼音输入法
  3. IFC中的轴网(IfcGrid)
  4. DFS【模板】找到最大岛
  5. SSL peer shut down incorrectly 问题处理方法
  6. 主机地址、网络地址、主机路由、网络路由
  7. GLUT教程 - glutPostRedisplay函数
  8. 信号完整性研究系列--什么是信号完整性
  9. 乐视实行四天半工作制,贾跃亭羡慕的表示下周回国
  10. 比越南妹划算 1元团购美女