R语言与时间序列分析(二)

作者: 李作 | 来源:发表于2016-10-19 20:31 被阅读1226次

    当当当当现在开始跑程序了

    Step 1:导入数据

    我们用的是《商务与经济统计》中的时间序列分析数据,这是一个关于四年每个季度电视销售数量的数据,先上代码:

    >path<-"F:/商务与经济统计(原书第11版)光盘内容/数据文件/第18章/TVSales.csv"
    >TVsales<-read.csv(path,header=TRUE)
    >TVsales
     Year Quarter Sales..1000s.
    1     1       1           4.8
    2     1       2           4.1
    3     1       3           6.0
    4     1       4           6.5
    5     2       1           5.8
    6     2       2           5.2
    7     2       3           6.8
    8     2       4           7.4
    9     3       1           6.0
    10    3       2           5.6
    11    3       3           7.5
    12    3       4           7.8
    13    4       1           6.3
    14    4       2           5.9
    15    4       3           8.0
    16    4       4           8.4
    

    第一列是年份,第二列是季度,第三列是销售量(每千台)

    Step 2:绘制时间序列图

     TVsalestimeseries<-ts(TVsales$Sales..1000s.,frequency =4)
     TVsalestimeseries
     Qtr1 Qtr2 Qtr3 Qtr4
    1  4.8  4.1  6.0  6.5
    2  5.8  5.2  6.8  7.4
    3  6.0  5.6  7.5  7.8
    4  6.3  5.9  8.0  8.4
     plot.ts(TVsalestimeseries)
    

    这里的ts的是将数据转存到一个时间序列对象中,然后绘制时间序列图(忽略我丑丑的图)

    Paste_Image.png

    从图中可以很明显地看出,曲线按年呈现类似周期性的变化,且整体呈现上升趋势,因而为季节与趋势模式,然后我们用decompose()函数对其进行分解。

    Step 3:分解时间序列

    TVsalestimeseriescompents<-decompose(TVsalestimeseries)
    plot(TVsalestimeseriescompents)
    
    Paste_Image.png

    以上四幅图中,分别为原始时间序列数据、数据的趋势、季节性因素以及剔除了趋势和季节性因素之后的随机成分,我们可以将它们提取出来。

    plot(TVsalestimeseriescompents$seasonal,type="b",main='季节对销售的影响')
    
    Paste_Image.png

    从上图可以看出,每年第二季度销售量进入低谷,第四季度达到高峰,这也明显对应着人们观看电视兴趣的直观期望,即第二季度由于春季和初夏的户外活动,减少了潜在消费者观看电视的兴趣;第四季度由于冬季即将到来人们减少了户外活动,因此电视购买模式趋向于峰值。

    然后,我们看一下消除季节影响的时间序列:

    TVsalestimeseriesadjusted<-TVsalestimeseries-TVsalestimeseriescompents$seasonal
    plot(TVsalestimeseriesadjusted,main='消除季节影响的电视机销售量时间序列')
    
    
    Paste_Image.png

    消除季节影响后,可以看出,电视的销售量呈现出逐年上升的趋势。

    Step 4:预测未来一年的销售数量

    在这里,我们采用Holt-Winters指数平滑法对数据进行预测

    TVsalestimeseriesforecasts<-HoltWinters(TVsalestimeseries)
    plot(TVsalestimeseriesforecasts)
    
    Paste_Image.png

    由图知,曲线很好的拟合了原始数据,然后我们要用forecast包预测未来一年的数据:

     library(forecast)
    TVsalestimeseriesforecasts2<-forecast.HoltWinters(TVsalestimeseriesforecasts,h=4)
    TVsalestimeseriesforecasts2
         Point Forecast    Lo 80     Hi 80    Lo 95     Hi 95
    5 Q1       7.693695 7.207385  8.180005 6.949948  8.437442
    5 Q2       7.118695 6.523164  7.714226 6.207909  8.029481
    5 Q3       8.868695 8.181078  9.556311 7.817076  9.920314
    5 Q4       9.343695 8.574945 10.112444 8.167993 10.519396
    

    以上,我们预测了未来一年每个季度的数据,并分别给出80%和95%的置信区间,然后画个图看看:

     plot.forecast(TVsalestimeseriesforecasts2)
    
    Paste_Image.png

    以上,蓝色的部分就是预测值,阴影部分便分别是80%和95%的置信区间。
    至此,时间序列分析就算完成了,然后,我来说说一说我参考的资料吧:
    网络资源:R语言时间序列初探
    书籍:《商务与经济统计》 David R.Anderson (辛辛提那大学)、Dennis J.Sweeney(辛辛提那大学)、Thomas A .Williams(罗切斯特理工学院)著
    《R语言与数据挖掘最佳实践与经典案例》 Yanchang Zhao 著

    相关文章

      网友评论

        本文标题:R语言与时间序列分析(二)

        本文链接:https://www.haomeiwen.com/subject/ixvxuttx.html