R语言与数据分析之八:时间序列--霍尔特指数平滑法
上篇我和小伙伴们分享了简单指数平滑法,简单指数平滑法仅仅能预測那些处于恒定水平和没有季节变动的时间序列,今天和大家分享非恒定水平即有增长或者减少趋势的。没有季节性可相加模型的时间序列预測算法---霍尔特指数平滑法(Holt)。
Holt 指数平滑法预计当前时间的水平和斜率。其平滑水平是由两个參数控制。alpha:预计当前点水平。beta:预计当前点趋势部分斜率。两个參数都介于0-1之间。当參数越接近0,大部分最近的观測值的权值将较小。
我们以1866年到1911年每年女士裙子直径为案例,我们首先录入数据并绘制出该序列:
skirts <- scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat",skip=5)
skirtsseries <- ts(skirts,start=c(1866))
plot.ts(skirtsseries)
观察上图可见该序列从1866年的600涨到了1880年的1050,后面又下降到1911年的520。再次使用R中的HoltWinters()进行霍尔特指数平滑预測(gamma=FALSE),并绘出预測和观測值的曲线图。来观看预測结果
skirtsseriesforecasts <- HoltWinters(skirtsseries, gamma=FALSE)
plot(skirtsseriesforecasts)
整体看来,预測的效果还不错(黑色为原始序列,红色为预測值)。虽然他们对观測值有一点点延迟。相同我们也能够通过变量skirtsseriesforecasts$SSE查看样本内误差平方和
相关预測值如上图,alpha值为0.84;beta预測值为1.0。这些都是很高的值。充分显示了不管是水平上还是趋势的斜率上,当前值对时间序列上的近期的观測值的依赖关系比較重,这种结果也符合我们的预期,由于时间序列的水平和斜率在整个时间段内发生了巨大的变化。此外我们能够通过HoltWinters()函数中的“l.start”和“b.start”的參数指定水平和趋势的初始值。常见的设定水平初始值为时间序列的第一个值(608),斜率的初始值则是其第二个值减去第一个值(9),则设定例如以下:
HoltWinters(skirtsseries, gamma=FALSE, l.start=608, b.start=9)
相同採用forecast包预測未来时间节点的值,如果我们预測未来19期的数据。详细实现和结果展演示样例如以下:
library("forecast")
skirtsseriesforecasts2 <- forecast.HoltWinters(skirtsseriesforecasts, h=19)
plot.forecast(skirtsseriesforecasts2)
上图中预測部分使用蓝色的线条标识出来,深灰色的阴影区域为80%。浅灰色阴影区为95%的预測区间。
为了检验预測效果。我们相同检验延迟1-20阶中的预測误差是否非零自相关。相同继续採用Ljung-Box检验:
acf(skirtsseriesforecasts2$residuals, lag.max=20)
Box.test(skirtsseriesforecasts2$residuals, lag=20, type="Ljung-Box")
相关图呈现样本内预測误差在滞后5阶时超过置信边界,其它都为超过,我们觉得存在一定的偶尔因素。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaG93YXJkZ2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
Ljung-Box检验时,p =0.4749,意味着置信度仅仅有53%这种值不足以拒绝“预測误差在1-20阶是非零自相关,则我们接受预測误差在1-20阶是非零自相关的。
相同我们验证測试误差是否符合零均值正态分布,我们画出时间预測误差图和一个附上正态曲线预測误差分布的直方图(这部分借用上次咱自己写的plotForecastErrors函数):
plot.ts(skirtsseriesforecasts2$residuals)
source("plotForecastErrors.R")
plotForecastErrors(skirtsseriesforecasts2$residuals)
可见预測误差在整个时间段内是方差大致不变的。
由预測误差直方图可见预測误差是零均值的正态分布。
R语言与数据分析之八:时间序列--霍尔特指数平滑法的更多相关文章
- R语言基因组数据分析可能会用到的data.table函数整理
R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部 ...
- 基于R语言的数据分析和挖掘方法总结——描述性统计
1.1 方法简介 描述性统计包含多种基本描述统计量,让用户对于数据结构可以有一个初步的认识.在此所提供之统计量包含: 基本信息:样本数.总和 集中趋势:均值.中位数.众数 离散趋势:方差(标准差).变 ...
- R语言与数据分析
K最近邻(k-Nearest Neighbor,KNN)分类算法 R语言实现包:R语言中有kknn package实现了weighted k-nearest neighbor. 决策树: R语言实现决 ...
- R语言与数据分析之九:时间内序列--HoltWinters指数平滑法
今天继续就指数平滑法中最复杂的一种时间序列:有增长或者减少趋势而且存在季节性波动的时间序列的预測算法即Holt-Winters和大家分享.这样的序列能够被分解为水平趋势部分.季节波动部分,因此这两个因 ...
- R语言和数据分析十大:购物篮分析
提到数据挖掘,我们的第一个反应是之前的啤酒和尿布的故事听说过,这个故事是一个典型的数据挖掘关联规则.篮分析的传统线性回归之间的主要差别的差别,对于离散数据的相关性分析: 常见的关联规则: 关联规则:牛 ...
- 基于R语言的数据分析和挖掘方法总结——中位数检验
3.1 单组样本符号秩检验(Wilcoxon signed-rank test) 3.1.1 方法简介 此处使用的统计分析方法为美国统计学家Frank Wilcoxon所提出的非参数方法,称为Wilc ...
- 基于R语言的数据分析和挖掘方法总结——均值检验
2.1 单组样本均值t检验(One-sample t-test) 2.1.1 方法简介 t检验,又称学生t(student t)检验,是由英国统计学家戈斯特(William Sealy Gosset, ...
- R语言︱LDA主题模型——最优主题数选取(topicmodels)+LDAvis可视化(lda+LDAvis)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:在自己学LDA主题模型时候,发现该模 ...
- R语言:计算现金工资的币数
新入职的员工,有的没有相应银行卡,需要计算现金工资的币数.实发工资,一般取整数. 简化计算,纸币面值只有100.10.1.4278除以100等于42余78,78除以10等于7余8,8除以1等于8. 复 ...
随机推荐
- C++雾中风景1:友元类与面向对象
因为后续准备入职的公司都希望能转C++,所以最近也是按部就班的开始进行C++的学习.然后这个系列的文章打算探究C++的语言特性,也比较一下不同语言(如Java,Scala,Python,Go)之间的设 ...
- 如何部署Java_web项目到云服务器上
步骤 1:购买 Linux 实例(略) 步骤2:安装JDK 本节介绍如何安装java jdk. 软件包中包含的软件及版本如下: Tomcat:1.8.0_121 说明:这是写文档时参考的软件版本.您下 ...
- SmartAdmin(SmartAdmin_v1.5.2)
SmartAdmin_v1.5.2是一个基于bootstrap上开发的页面设置,前后台数据交互和样式显示. 用过的例子有F:\SmartAdmin_v1.5.2\SmartAdmin_v1.5.2\D ...
- JS中!=、==、!==、===的用法和区别
1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较"转化成同一类型后的值"看"值"是否相等,===如果类型不同 ...
- JavaWeb框架SSH_Struts2_(一)
1. Struts2 框架入门及结合Intellj idea完成登陆demo测试 1.1 本章目录: 框架入门 Struts2简介 Struts2入门案例 Struts2执行流程分析 2. 具体 ...
- fragmentTabHost 使用示例
目前我们看微信的底部,有四个导航栏,那我们应该来怎么实现类似的导航栏呢? 在 android 4.0 的时候,推出了一个新的工具,fragmentTabHost . fragmentTabHost ...
- C语 三子棋小游戏
#include <stdio.h> #include <Windows.h> #include<time.h> #define row 3 #define lis ...
- 选择排序-Python与PHP实现版
选择排序Python实现 import random # 生成待排序数组 a=[random.randint(1,999) for x in range(0,36)] # 选择排序 def selec ...
- CSS样式命名整理(非原创)
非原创,具体出自哪里忘了,如果侵害您的利益,请联系我. CSS样式命名整理 页面结构 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体 ...
- SimpleMarkdown - 一款简单的Markdown编辑器
源码地址: https://github.com/zhuangZhou/SimpleMarkdown 预览地址: http://hawkzz.com:8000 作者网站:http://hawkzz.c ...