zoukankan      html  css  js  c++  java
  • R语言与数据分析之九:时间内序列--HoltWinters指数平滑法

    今天继续就指数平滑法中最复杂的一种时间序列:有增长或者减少趋势而且存在季节性波动的时间序列的预測算法即Holt-Winters和大家分享。这样的序列能够被分解为水平趋势部分、季节波动部分,因此这两个因素应该在算法中有相应的參数来控制。

    Holt-Winters算法中提供了alpha、beta和gamma 来分别相应当前点的水平、趋势部分和季节部分。參数的去执法范围都是0-1之间,而且參数接近0时。最近的观測值的影响权重就越小。我们以澳大利亚昆士兰州海滨纪念商品的月度销售日子为分析对象。老套路。咱先录入数据,并绘制出该时间序列。捞个总体印象:

    souvenir <- scan("http://robjhyndman.com/tsdldata/data/fancy.dat")
    souvenirtimeseries <- ts(souvenir, frequency=12, start=c(1987,1))
    logsouvenirtimeseries <- log(souvenirtimeseries)
    plot.ts(logsouvenirtimeseries)
    


    我们採用R中提供的HoltWinters算法进行预測,实现和结果例如以下:

    souvenirtimeseriesforecasts <- HoltWinters(logsouvenirtimeseries)

    Alpha=0.4,意味着当期预測基于平衡了近期和较远期的观測值。Beta 为0表明趋势部分的斜率在整个时间序列上市不变的,且等于初始值。这个也符合我们的直观感受,水平改变许多,可是趋势部分斜率是基本不变的,于此相反gamma=0.96表明当期季节部分预測只基于近期的观測值。

    我们同一时候画出预測值和观測值来看下预測的效果怎样:

    plot(souvenirtimeseriesforecasts)

    可见Holt-Winters算法很成功的预測了季节峰值,为了预測未来期数的值。我们相同採用forecast函数包,以预測未来48个月销售为例:

    library("forecast")
    souvenirtimeseriesforecasts2 <- forecast.HoltWinters(souvenirtimeseriesforecasts, h=48)
    plot.forecast(souvenirtimeseriesforecasts2)
    


    图中蓝色线条显示的为预測值,深灰色部分为80%的置信区间。浅灰色为95的置信区间。

    接下来老套路採用Ljung-Box 和画出直方图来检查预測误差的随机性,就不反复贴代码了,有忘记的童鞋请转前两篇。我这里就直接贴结果图了:

    三张图的结果表示咱们R提供的Holt-Winters()算法还是特别牛掰的,关于指数平滑就到此就彻底结束啦。



  • 相关阅读:
    软件乘法实现
    矩阵连乘求解优化
    { 控件动态创建的堆与栈 }
    digital clock based C
    C++初探
    C语言语法教程-链表
    EF Core 实现读写分离的最佳方案
    Windows Terminal 安装及美化
    .netcore centos环境搭建实战
    AutoMapper.RegExtension 介绍
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5098379.html
Copyright © 2011-2022 走看看