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阶时超过置信边界,其他都为超过,我们认为存在一定的偶尔因素。

Ljung-Box检验时,p =0.4749,意味着置信度只有53%这样的值不足以拒绝“预测误差在1-20阶是非零自相关,则我们接受预测误差在1-20阶是非零自相关的。

同样我们验证测试误差是否符合零均值正态分布,我们画出时间预测误差图和一个附上正态曲线预测误差分布的直方图(这部分借用上次咱自己写的plotForecastErrors函数):

plot.ts(skirtsseriesforecasts2$residuals)
source("plotForecastErrors.R")
plotForecastErrors(skirtsseriesforecasts2$residuals)

可见预测误差在整个时间段内是方差大致不变的。

由预测误差直方图可见预测误差是零均值的正态分布。

时间: 2024-10-03 14:44:03

R语言与数据分析之八:霍尔特指数平滑法的相关文章

R语言基因组数据分析可能会用到的data.table函数整理

R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理的步骤进行了程序上的优化,使用多线程,甚至很多函数是使用C写的,大大加快数据运行速度.因此,在对大数据处理上,使用data.table无疑具有极高的效率.这里主要介绍在基因组数据分析中可能会用到的函数. fread 做基因组数据分析时,常常需要读入处理大文件,这个时候我们就可以舍弃read.ta

基于R语言的数据分析和挖掘方法总结——描述性统计

1.1 方法简介 描述性统计包含多种基本描述统计量,让用户对于数据结构可以有一个初步的认识.在此所提供之统计量包含: 基本信息:样本数.总和 集中趋势:均值.中位数.众数 离散趋势:方差(标准差).变异系数.全距(最小值.最大值).内四分位距(25%分位数.75%分位数) 分布描述:峰度系数.偏度系数 用户可选择多个变量同时进行计算,亦可选择分组变量进行多组别的统计量计算. 1.2 详细介绍 1.2.1 样本数和总和 1. R语言涉及的方法:length(x) 1.2.2 均值(Mean) 1.

R语言确定聚类的最佳簇数:3种聚类优化方法

原文链接:http://tecdat.cn/?p=7275 确定数据集中最佳的簇数是分区聚类(例如k均值聚类)中的一个基本问题,它要求用户指定要生成的簇数k. 一个简单且流行的解决方案包括检查使用分层聚类生成的树状图,以查看其是否暗示特定数量的聚类.不幸的是,这种方法也是主观的. 我们将介绍用于确定k均值,k medoids(PAM)和层次聚类的最佳聚类数的不同方法. 这些方法包括直接方法和统计测试方法: 直接方法:包括优化准则,例如簇内平方和或平均轮廓之和.相应的方法分别称为弯头方法和轮廓方法

基于R语言的数据分析和挖掘方法总结——均值检验

2.1 单组样本均值t检验(One-sample t-test) 2.1.1 方法简介 t检验,又称学生t(student t)检验,是由英国统计学家戈斯特(William Sealy Gosset, 1876-1937)所提出,student则是他的笔名.t检验是一种检验总体均值的统计方法,当数据中仅含单组样本且样本数较大时(通常样本个数≧30的样本可视为样本数较大),可用这种方法来检验总体均值是否大于.小于或等于某一特定数值.当数据中仅含单组样本但样本数较小时(通常样本个数<30的样本可视为

R语言与数据分析之三:分类算法2

上期与大家分享的传统分类算法都是建立在判别函数的基础上,通过判别函数值来确定目标样本所属的分类,这类算法有个最基本的假设:线性假设.今天继续和大家分享下比较现代的分类算法:决策树和神经网络.这两个算法都来源于人工智能和机器学习学科. 首先和小伙伴介绍下数据挖掘领域比较经典的Knn(nearest neighbor)算法(最近邻算法) 算法基本思想: Step1:计算出待测样本与学习集中所有点的距离(欧式距离或马氏距离),按距离大小排序,选择出距离最近的K个学习点: Step2:统计被筛选出来的K

R语言与数据分析之二:绘图

图形展示是最高效且形象的数据描述手段,因此巧妙的图像展示是高质量数据分析报告的必备内容,因此强大的图形展示功能也是统计分析软件的必备功能.R语言提供了强大的吐血展示功能.今天我由简单到复杂分别和小伙伴们分享如何用R语言画出各位想要的图形. 首先罗列下所有可选图形: 1.直方图(hist()):2.散点图(plot()):3.柱状图(barplot());4.饼图(pie());5.箱线图(boxplot());6.星相图(stars());7.脸谱图(faces());8.茎叶图(stem())

R语言与数据分析之七:时间序列简单指数平滑

上篇我们对时间序列数列有了整体的认识并将时间序列进行了分解,今天和小伙伴们分享常用预测算法中相对最简单的:简单指数平滑法.简单指数平滑适用于可用相加模型描述,并且处于恒定水平和没有季节变动的时间序列地短期预测. 简单指数平滑法提供了一种方法估计当前时间点上的水平.为了更加准确的估计当前时间的水平,我们使用alpha参数来控制平滑,alpha的取值在0-1之间.当alpha越接近0,临近预测的观测值在预测中的权重就越小. 我们采用伦敦1813年到1912年全部的每年每英尺降雨量来做分析对象,首先读

R语言和数据分析十大:购物篮分析

提到数据挖掘,我们的第一个反应是之前的啤酒和尿布的故事听说过,这个故事是一个典型的数据挖掘关联规则.篮分析的传统线性回归之间的主要差别的差别,对于离散数据的相关性分析: 常见的关联规则: 关联规则:牛奶=>卵子[支撑=2%,置信度=60%] 支持度:分析中的所有事务的2%同一时候购买了牛奶和鸡蛋,需设定域值,来限定规则的产生. 置信度:购买了牛奶的筒子有60%也购买了鸡蛋,需设定域值,来限定规则的产生. 最小支持度阈值和最小置信度阈值:由挖掘者或领域专家设定. 与关联分析相关的专业术语包含: 项

R语言与数据分析

K最近邻(k-Nearest Neighbor,KNN)分类算法 R语言实现包:R语言中有kknn package实现了weighted k-nearest neighbor. 决策树: R语言实现决策树:rpart扩展包 iris.rp = rpart(Species~.,data = iris,method = "class")print(iris.rp)#输出模型结果 node), split, n, loss, yval, (yprob) * denotes terminal