您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 时间序列分解Decompose
时间序列分解算法和decompose函数实现李思亮55531469@qq.com目录时间序列分解算法和decompose函数实现.............................................................................................................11数据读入并生成时间序列...................................................................................................................................22数据可视化...........................................................................................................................................................43时间序列分解.......................................................................................................................................................7在时间序列分析的过程中,往往需要对时间序列作出初步分析,本文主要采用R语言作为分析平台,从数据的读入,可视化图,分解(decompose)为趋势项,季节项,随机波动等角度对数据开展分析的几个案例。最后对分解算法作出初步描述并探讨其预测预报中的潜在应用。本文的数据和部分内容主要采用中的内容,感兴趣的读者可以参考。1数据读入并生成时间序列对于数据分析来讲,数据读入是一个比较关键的步骤。常用的数据读入函数有scan,read.table等。下面列举了几种常见的数据。首先是,中包含了英国国王的寿命从William开始,数据来源(HipelandMcleod,1994)。kings-scan(=3)Read42itemskings[1]604367505642506568436534473449411335535616436959485986556851334967778167718168707756上述例子中,读入了连续42个公国国王的寿命并将其赋给变量‘kings’如果我们希望对读入数据开展分析,下一步就是将其转化为时间序列对象(时间序列类),R提供了很多函数用于分析时间序列类数据。可以使用ts函数将变量转化为时间序列类。kingsts-ts(kings)kingstsTimeSeries:Start=1End=42Frequency=1[1]604367505642506568436534473449411335535616436959485986556851334967778167718168707756对于上述数据操作的好处是将数据转化为特定的“时间序列类”便于我们使用R中的函数分析数据。有时候我们会按照一定的时间周期来收集数据,这个周期可能是季度,月,日,小时,分。在大数据时代,有些情况下的数据是按照秒来采集收集。这种情况下,我们需要对数据的周期或频率进行设置。这里采用ts函数中的frequency参数可以实现这种功能。比方说,若按1年为一个周期,我们的月度时间序列数据应为frequency=12,若为季度时间序列数据,则可设置frequency=4。另外,还可以利用start参数,设置时间序列的起点,比如若我们一个周期共4个观测,而第一个数据对应为1986年的起的第2个观测,则可使用start=c(1986,2)。有一个纽约市月出生数量的数据集,从1946年1月至1959年12月。数据可通过获取。我们将其读入至R中。births-scan()Read168itemsbirthsTS-ts(births,frequency=12,start=c(1946,1))birthsTSJanFebMarAprMayJunJulAugSepOctNovDec194626.66323.59826.93124.74025.80624.36424.47723.90123.17523.22721.67221.870194721.43921.08923.70921.66921.75220.76123.47923.82423.10523.11021.75922.073194821.93720.03523.59021.67222.22222.12323.95023.50422.23823.14221.05921.573194921.54820.00022.42420.61521.76122.87424.10423.74823.26222.90721.51922.025195022.60420.89424.67723.67325.32023.58324.67124.45424.12224.25222.08422.991195123.28723.04925.07624.03724.43024.66726.45125.61825.01425.11022.96423.981195223.79822.27024.77522.64623.98824.73726.27625.81625.21025.19923.16224.707195324.36422.64425.56524.06225.43124.63527.00926.60626.26826.46225.24625.180195424.65723.30426.98226.19927.21026.12226.70626.87826.15226.37924.71225.688195524.99024.23926.72123.47524.76726.21928.36128.59927.91427.78425.69326.881195626.21724.21827.91426.97528.52727.13928.98228.16928.05629.13626.29126.987195726.58924.84827.54326.89628.87827.39028.06528.14129.04828.48426.63427.735195827.13224.92428.96326.58927.93128.00929.22928.75928.40527.94525.91226.619195926.07625.28627.66025.95126.39825.56528.86530.00029.26129.01226.99227.897类似的,文件中包含了澳大利亚昆士兰州的一个海滩小镇纪念品商店的月销量数据,时间从1987/01~1993/12(数据来源WheelwrightandHyndman,1998)。我们用下述代码将其读入至R中。souvenir-scan()Read84itemssouvenirTS-ts(souvenir,frequency=12,start=c(1987,1))souvenirTSJanFebMarAprMayJunJulAugSepOctNovDec19871664.812397.532840.713547.293752.963714.744349.613566.345021.826423.487600.6019756.2119882499.815198.247225.144806.035900.884951.346179.124752.155496.435835.1012600.0828541.7219894717.025702.639957.585304.786492.436630.807349.628176.628573.179690.5015151.8434061.0119905921.105814.5812421.256369.777609.127224.758121.227979.258093.068476.7017914.6630114.4119914826.646470.239638.778821.178722.3710209.4811276.5512552.2211637.3913606.8921822.1145060.6919927615.039849.6914558.4011587.339332.5613082.0916732.7819888.6123933.3825391.3536024.8080721.71199310243.2411266.8821826.8417357.3315997.7918601.5326155.1528586.5230505.4130821.3346634.38104660.672数据可视化上述章节中我们读入并生成了3个时间序列数据分别为,kingsts,birthsTS和souvenirTS。数据分析的后续过程为可视化过程,让有关人员可以从直观角度来认识数据的变化规律。plot函数提供了各种类的绘图功能plot(kingsts)上图中的时间序列看来的话,没有比较明显的周期性规律,直观判断上述时间序列类似于一个随机波动序列(平稳时间序列),后续我们会探讨如何判断序列为平稳时间序列。我们对纽约市月出生数量画图,结果为plot(birthsTS)从上述结果看来,每个月的出生数量似乎含有一定的季节变化(周期性),在夏季较高,在冬季较低。另外每个周期内的波动幅度(振幅)似乎是固定的,并不随时间序列的水平(趋势)变化而变化。随机波动随时间变化也不明显。我们同样对澳大利亚昆士兰州海滩旅游小镇纪念品商店的月销量数据画图。从上图中可以看出误差波动和振幅都随时间水平增加而增加。因此,我们需要对原始时间序列作出对数变换(取log),以便使用additive模型对数据开展分析预测。直观上看来,上述的对数化时间序列的季节变化和随机变化随时间稳定在一个范围内,不随时间序列变化而变化。因此,时间序列对数化可以用于additive模型。3时间序列分解时间序列分解主要针对非平稳时间序列,非平稳时间序列包含4种主要趋势:长期趋势(Trend),循环趋势,季节趋势(Seasonal)和随机趋势(Random)。可以利用additive模型分解长期趋势项和季节项。使用R语言的decompose函数。该函数可以分解出趋势项,季节项和随机项并利用additive模型描述时间序列。时间序列分解的主要参考的函数有decompose函数和stl函数。在这里我们先介绍decompose函数的主要思路。相加分解模型(additive)的主要形式为:xt=Tt+St+et另外还有相乘模型(multiplicative),主要形式为:xt=Tt*St*et其中,在t时刻,xt为该时刻的观测值,Tt为该时刻的趋势值,St为该时刻的季节(周期)效应,et为该时刻的无规则部分,也就是剩余项。一般而言,理
本文标题:时间序列分解Decompose
链接地址:https://www.777doc.com/doc-4861971 .html