R语言与数据分析之九:时间内序列--HoltWinters指数平滑法

本文通过使用Holt-Winters算法对具有趋势和季节性的数据进行预测,展示了如何利用R语言进行时间序列分析,包括参数调整、预测及未来值预测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天继续就指数平滑法中最复杂的一种时间序列:有增长或者减少趋势而且存在季节性波动的时间序列的预測算法即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()算法还是特别牛掰的,关于指数平滑就到此就彻底结束啦。










本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5098379.html,如需转载请自行联系原作者

R语言中有很多时间序列分析的工具包,其中包含了一次指数平滑预测法的函数。 首先,我们需要加载时间序列数据,并将其转换为R中的时间序列对象。假设我们的数据存储在一个名为`data`的数据框中,其中第一列为时间,第二列为时间序列数据: ``` library(xts) data_xts <- xts(data[, 2], order.by = as.Date(data[,1])) ``` 然后,我们可以使用`HoltWinters()`函数来拟合一次指数平滑模型。该函数的第一个参数是我们的时间序列对象,第二个参数是一个逻辑值,用于指定是否使用季节性调整。在这里,我们将不使用季节性调整: ``` model <- HoltWinters(data_xts, gamma = FALSE) ``` 接下来,我们可以使用`predict()`函数来进行预测。该函数的第一个参数是我们的模型对象,第二个参数是我们希望预测的未来时间段的长度: ``` predictions <- predict(model, n.ahead = 12) ``` 在这里,我们预测未来12个时间点的值。 最后,我们可以使用`plot()`函数来可视化我们的预测结果: ``` plot(model) lines(predictions, col = "blue") ``` 这将绘制我们的原始数据和模型拟合的曲线,以及预测值的蓝色线。 完整的代码如下: ``` library(xts) # 加载数据 data <- read.csv("data.csv") # 创建时间序列对象 data_xts <- xts(data[, 2], order.by = as.Date(data[,1])) # 拟合模型 model <- HoltWinters(data_xts, gamma = FALSE) # 进行预测 predictions <- predict(model, n.ahead = 12) # 可视化预测结果 plot(model) lines(predictions, col = "blue") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值