参考:/fengzzi/p/10044426.html
指数模型是用来预测时序未来值的最常用模型。这类模型相对比较简单,但是实践证明它们的短期预测能力较好。不同指数模型建模时选用的因子可能不同。比如
单指数模型(simple/single exponential model)拟合的是只有常数水平项和时间点i处随机项的时间序列,这时认为时间序列不存在趋势项和季节效应;双指数模型(double exponential model;也叫Holt指数平滑,Holt exponential smoothing)拟合的是有水平项和趋势项的时序;三指数模型(triple exponential model;也叫Holt-Winters指数平滑,Holt-Winters exponential smoothing)拟合的是有水平项、趋势项以及季节效应的时序。
R中自带的HoltWinters()函数或者forecast包中的ets()函数可以拟合指数模型。ets()函数的备选参数更多,因此更实用。
1. HoltWinters()函数
R语言与数据分析之七:时间序列简单指数平滑
R语言与数据分析之八:时间序列--霍尔特指数平滑法
R语言与数据分析之九:时间内序列--HoltWinters指数平滑法
2. forecast包中的ets()函数
平滑参数(α,β,γ)=(水平,趋势,季节)
2.1 最简单参数
ets(ts, model="zzz")
model="ZZZ",依次含义为错误类型、趋势类型、季节类型。 "A"=additive, "M"=multiplicative and "Z"=automatically
其中ts
是要分析的时序,限定模型的字母有三个。第一个字母代表误差项,第二个字母代表趋势项,第三个字母则代表季节项。可选的字母包括:相加模型(A)、相乘模型(M)、无(N)、自动选择(Z)。
"A"=additive, "M"=multiplicative and "Z"=automatically
2.2 所有参数
ets(y, model="ZZZ", damped=NULL, alpha=NULL, beta=NULL, gamma=NULL,phi=NULL, additive.only=FALSE, lambda=NULL,lower=c(rep(0.0001,3), 0.8), upper=c(rep(0.9999,3),0.98),opt.crit=c("lik","amse","mse","sigma","mae"), nmse=3,bounds=c("both","usual","admissible"), ic=c("aic","aicc","bic"),restrict=TRUE)
y:一个数值向量或时间系列
model="ZZZ":依次含义为错误类型、趋势类型、季节类型。 "A"=additive, "M"=multiplicative and "Z"=automatically
(additive,为加法;multiplicative,乘法;damped,阻尼;Null,无)
damped=NULL,一个的阻尼趋势
lower=c(rep(0.0001,3), 0.8), upper=c(rep(0.9999,3),0.98), 参数(α,β,γ,φ)的上下界
opt.crit=c("lik","amse","mse","sigma","mae"):优化标准, “MSE”(均方误差),“AMSE”((Average MSE over first nmse forecast horizons),“sigma”(标准偏差残差),“mae”(残差绝对值的平均值),或“lik”(对数似然,默认值)
nmse=3, 平均多级MSE(1 <=nmse<= 10)的步数。
bounds=c("both","usual","admissible"): 收敛参数空间类型,"usual" 表示所有参数都必须指定上限和下限之间,“"admissible"表示参数必须位于允许的空间,”"both"(默认)的交叉点这些区域。
ic=c("aic","aicc","bic"):在模型选择要使用的信息准则。
restrict=TRUE:如果是TRUE,无限方差模型将不会被允许