r语言没有forecast这个函数_用R语言进行时间序列分析及预测(一)

时间:2025-01-13 19:34:48

《商务与经济统计》与《R语言实战》实践笔记

数据和案例摘录自《商务与经济统计》,并作出一些修改。

时间序列的模式主要是3大类,1.水平模式,2趋势模式,3,季节模式。在第一部分的笔记内容,先记录前两种模式。

1.水平模式

当数据围绕着一个不变的均值上下波动时,则存在水平模式。为了说明时间序列拥有水平模式,考虑下表的数据。这些数据是佛蒙特州本宁顿的一个批发商销售汽油的数量。时间序列的平均数为每月19.25(1000加仑)。

(1)输入数据,观察时间序列模式。

从上面时间序列图,可以显示出是水平模式,但是这个只是主观的观察,并没有足够的证据。关于确定时间序列是否平稳,这里先不做讨论。

(2)单指数平滑法

单指数平滑法指数平滑法是利用过去时间序列的加权平均数作为预测值,即我们只选择一个权重——最近时期观察观测值的权重。其他数据的权重可以自动推算出来,并随着观测值距离预测值越远,权重也变得越来越小。这个权重就是α值,α值越接近1,则近期观测值的权重 越大;反之,α越接近于0。而这个α值在R语言可以最优化在给定数据集上的拟合效果。

ets(mode=“ANN”)语句对tsales时序拟合单指数模型,其中A表示可以加误差,NN表示时序中不存在趋势项(斜率)和季节项。

(3)向前预测

forecast()函数用于预测时序未来的k步,其形式为forecast(fit,k)。这一数据集中一步向前预测的结果是19.24,其95%的置信区间为14.50到23.99,80%的置信区间为16.14到22.14。并给出了预测折线图。

(4)准确性度量

forecast包同时提供了accuracy()函数,展示了时序预测中最主流的几个准确性度量。一般来说平均误差(ME)和平均百分比误差(MPE)用处不大,因为正向和负向的误差会抵消掉。在这几种预测准确性度量中,并不存在某种最优度量,不过平均残差平方和的平方根(RMSE)相对最有名,最常用。

2.有线性的趋势推测法

我们考虑的案例是某自行车制造厂过去10年自行车销售量的的时间序列。

(1)输入数据,观察时间序列的模式

这一部分主要用Holt线性指数平滑法进行预测,它是单一指数平滑法的一个推广,使用两个平滑常数:一个用于解释时间序列的水平,另一个用于解释数据中的线性趋势(斜率)。

从上面的时间序列图可以显示在过去10年有些上下的波动,但是我们可能会同意,时间序列似乎总体是增长的或者有向上的趋势。下面我们就用Holt指数平滑法建立用于预测有线性趋势的时间序列的指数平滑指数。

(2)Holt线性平滑法

注意看一下model=“AAN”,这个拟合模型用了水平项和趋势项(斜率)两个参数。而α和β值是R语言自动给出的最优化拟合值。

(3)向前预测

forecast()函数预测了接下来5年自行车的销售量,80%和95%的置信区间,并给出了折线图。

(4)准确性度量

参考《商务与经济统计》第17章 时间序列分析及预测,在这案例书中用了两个方法预测,第一个线性趋势回归得出MSE值为3.837,即RMSE=1.959,第二个是Holt线性指数平滑,给定了α=0.1,β=0.2,建立预测,得出MSE值为4.41,即RMSE=2.1,虽然在预测度量的几个数据中并不存在最优度量,但是通过对比,可以看出用R语言拟合的模型RMSE值更小。

《商务与经济统计》 书中对于α值和β值,因为使用的工具是Minitab,虽然没有用过,不过应该是由于自身的局限,需要我们自己去试验不同的α值和β值,这非常费时间和准确度不足,而R语言在这方面就更强大的,可以帮助我们选择最合适的α值和β值。