时间序列的R语言实现_Part1

内容来自a little book of r for time series,查看资源请戳:点击打开链接

翻译基本忠于原文,加上了一些我自己的理解说明,有任何问题欢迎指正,谢谢!

时间序列数据读取

时间序列数据是指按时间排好序的数据。可以指定开始时间,时间周期等参数。

下面是三个时间序列的读取的例子:

1. 英国历任国王去世年龄

计算机生成了可选文字: >klnq3Read42<一SCanite几5("http://robjh,面an.cam/t,didata/二主,c/k主ng,.dat",,k主p=3)鑫从口既读取数据>kinq3七ime3erie3<一>kinqs七ilnese二ie3Ti几eSelie3:S七ar七=1End,弓2Frequency=1[l]6043675056[25]咬859865568tB(kin卯)#将kin卯数据存为时间序列对象4250656843653曦4734曦9喂113355356164369595133喂967778167718168707756

 

ts()方法就是将数据存为时间序列对象kingstimeseries,查看kingstimeseries会看到StartEndFrequency三个参数,分别是时间序列的开始时间,结束时间和时间周期。在时间序列对象创建时,没有制定的话,开始时间默认start = 1end =时间序列长度,frequency = 1

2. 纽约19461月到195912月的每月新生儿数

计算机生成了可选文字: >birth3<一3can(.http://rabjhyndlnan.cam/t3dldata/data/nybirths.dat.)Redd1681七e加昌>blr七h3七lrne3erle3<一七3(birth3,frequency=12,3七ar七=c(19任6,1))>blrth3tl现e3erlesJ即FebMarAprMayJunJulAuqsepOctNovDec19性626。66323。59826。93124。74025。80624。36424。47723。90123。17523。22721。6722工。87019任721。任3921。08923。70921。66921。75220。76123。任7923。82性23。10523。11021。75922。07319任821。93720。03523。59021。67222。22222。12323。95023。50性22。23823。1任221。05921。57319任921。5任820。00022。任2任20。61521。76122。87任2任。10任23。7任823。26222。90721。5几922。025195022。60任20。8942任。67723。67325。32023。5832弓。6712性。性5性2性。1222性。25222。08弓22。991195123。28723。O任925。0762任。0372任。任302性。66726。任5125。61825。01任25。11022。96任23。981195223。79822。2702性。77522。64623。98824。73726。27625。81625。21025。19923。16224。70719532任。36任22。6任任25。5652任。06225。任312任。63527。00926。60626。26826。任6225。2性625。180195任2任。65723。30426。98226。19927。21026。12226。70626。87826。15226。3792弓。71225。68819552任。9902性。23926。72123。任752任。76726。21928。36128。59927。91任27。78性25。69326。88几195626。2172性。21827。91性26。97528。52727。13928。98228。16928。05629。几3626。29126。987195726。58924.e性827。54326.8962e.3,827。39028。06528.工4129。04828.43426.63427。735195827。1322任。92任28。96326。58927。93128。00929。22928。75928。弓0527。9弓525。91226。619195926。07625。28627。66025。95126。39825。56528。86530。00029。26129。01226。99227。897

这里,设置了start=c(1946,1),就是19461月,然后R会根据数据长度自动向后递推,一般end不需要另外设置,从这个角度来看,时间序列的数据必须是连续的区间上的,中间不能有空缺。frequency = 121年有12个月,也就是时间序列的周期。周期数据和非周期数据在分析时可能会存在很大差异。

说明:翻译自前面说到的文档中2.2节,这部分数据,英文的意思应该是新生儿的数量,个人不太理解出生人数为什么还有小数点,纽约那么大一个城市一个月只有20多个新生儿,不太合理。在想是不是出生率,出生率=(年内出生数/年内平均人口数)×1000‰,并且出生率在千分之二十多左右也算正常范围。

 澳大利亚昆士兰一沙滩旅游胜地某一纪念品店从19871月到199312月的月销量数据

计算机生成了可选文字: >3ouvenir<一3can("http://robjhynd如an.com/七sdldata/da七a/fancy.da七”)Reads任lte现昌>3ouvenlrtlme3erle3<一七3(3ouvenlr,frequency=12,3tar七=c(1987,1))>3OUVenil七1皿e3e了le3JanFebHarAprMayJun1987166任。812397。5328性0。7135任7。293752。96371任。7任19882任99。815198。2性7225。14心806.035900.884951。3弓1989性717。025702。639957。58530任.786弓92.弓36630.8019905921。10581任。5812性21。256369.777609.12722任.751991任826。6性6性70。239638。778821.178722.3710209.任8199276工5。0398性9。691性558。性011587。339332.5613082.091993102性3。2性11266。8821826。8任17357.3315997.79工8601.53JulAuqSepOc七NovDec1987任3任9。613566。3性5021。826任23.任87600.6019756.2119886179。12性752。155任96。任35835。1012600。08285任1。72198973任9。628176。628573。179690.5015151.3任3任061.011990812几。227979。258093。068任76。701791任。663011任。任1199111276。5512552。2211637。3913606.8921822.11曦5060。69199216732。7819888。6工23933。382539工.353602弓.8080721.,1199326155。1528586。5230505。4130821。33性6634。3810喂660。67

 

展示时间序列

计算机生成了可选文字: >plo七.七5(kinqstizneserle3)

使用前面的输入的三个时间序列数据,kingstimeseriesbirthtimeseriessouvenirtimeseries,方法plot.ts(),就会将时间序列的走势以折线图的方式展示出来,横轴为时间,纵轴为数据值。三个时间序列的数据分别展示如下:

计算机生成了可选文字: 吕090寸s。工Jese任1156三艺pr臼10203040TIme

从这个图看,英国国王逝世年龄比较随机,没有很强的规律性。

计算机生成了可选文字: 用周胃离团吕S田一J山S山E一}S皿七一q19461948195019521954195619581960Time

这个图很明显能看出一个新生儿出生数,有个按年的周期规律每年的3月左右和10月左右都有出生小高峰。

计算机生成了可选文字: 的O+a}寸O+山8寸O+99寸O+a寸Sa一J田SQJE一七一U田知习05寸O+山入00+田O19871988198919901991199219931994TIme

纪念品的销售额的数据,从1987年到1994年,数据跨度很大,所以可以看到,纵轴变成了科学计数法。这个时间序列数据随时间季节性的波动和随机波动的幅度在增大,不能用加性模型(additive model)描述,可以理解说时间序列不稳定。因此,可以对souvenirtimeseries数据取自然对数,使之更稳定。

说明:加性模型(additive model),网上没有找到很明确的说法。我的理解应该是能用加性模型描述的时间序列应该是我们理解中的平稳时间序列。

计算机生成了可选文字: 万只se工J。s。El七工u。,nos口。一19871988198919901991199219931994Time

这时,取对数后的时间序列随时间的波动幅度变得比较稳定了。

 

分解时间序列

将时间序列值分解,通常有趋势部分值和无规律部分值,若是周期性的数据,则还可能会有周期部分值。

 

非周期性数据

非周期性数据可分解为趋势部分和无规律部分。

估算一个可用加性模型描述的非周期性时间序列的趋势部分值,可以使用平滑方法,最常用的是计算时间序列的简单移动平均值。R可以用TTR包中的SMA()方法。

安装好TTR包,加载后。对kingstimeseries数据计算以3为平滑期,即n=3,的简单移动平均值,得到一个新的平滑时间序列。

计算机生成了可选文字: >library("TTR")载入需要的程辑包:载入需要的程辑包:Xt3200载入程辑包:Thefollowlnqobjec七5arema3kedfrom、packaqe:ba3e户:a3。Da七e,a3。Da七e。numerlc警告信.宫,:1:程辑包,TTR’是用R版本3.1.2来建造的2:程辑包,xt扩是用R版本3.1.2来建造的3:程辑包,zoo’是用R版本3.1.2来建造的>klnq3tirne3e二le5s瓦互3<一S瓦瓦(klnq3tl几e3erle3,n=3)>plot.t3(klnq3tlmese二le35瓦A3)

 

计算机生成了可选文字: 2吕吕内V乏55。工J。s。Lulls口三沉《〕弋丁月1O203040Time

3为平滑期得到的时间序列还是存在随机波动,所以可以尝试更大的平滑期,n=8。过程结果如下:

计算机生成了可选文字: >klnq3time3erle3SMAS<一SMA(klnq3timeserles,n=8)>plat.t3(klnq3ti瓦e3erle55HAS)

 

计算机生成了可选文字: 日吕吕《〕气丁SV乏55。工J。s。Lull吕C一艺1O203O40T1me

这时得到的趋势部分值就没有了明显的随机波动,显示出一个大的趋势,前20位国王的逝世年龄呈一个下降的趋势,后面逝世年龄逐渐增大,到时间序列的最后第40为国王时,逝世年龄已经增加到了73岁的样子。

 

周期性数据

周期性时间序列数据可分解为趋势部分,无规律部分和周期性部分。

分解周期性数据,可用R中的decompose()方法,这个方法返回一个list对象,时间序列的趋势部分值,无规律部分值和周期性部分值,分别被存放在其中的trendseasonalrandom对象中。用前面输入的周期性时间序列纽约新生人口数来做这个分解。

计算机生成了可选文字: >blrth3tl瓦e3e:le3co几ponent3<一decolnpo3e(blr七吮3七二几e3e二le3)>blrth3tlme3erle3co功ponent3$3easonalJanFebMarAprMayJun19任6一0。67719弓7一2。08296070。8625232一0。80167870。2516514一0。153255619弓7一0。67719弓7一2。08296070。8625232一0。80167870。251651咬一0。153255619性8一0。6771947一2。08296070。5625232一0。80167870。251651怪一0。153255619弓9一0。6771947一2。08296070。8625232一0。80167870。2516514一0。15325561950一0。67719咬7一2。08296070。8625232一0。80167870。251651咬一0。15325561951一0。67719弓7一2。08296070。8625232一0。80167870。251651喂一0。15325561952一0。67719弓7一2。08296070。8625232一0。80167870。251651咬一0。15325561953一0。67719性7一2。08296070。8625232一0。80167870。2516514一0。15325561954一0。6771947一2。08296070。8625232一0。80167870。2516514一0。15325561955一0。6771947一2。08296070。8625232一0。80167870。2516514一0。15325561956一0。6771947一2。08296070。8625232一0。80167870。2516514一0。15325561957一0。67719弓7一2。08296070。8625232一0。80167870。2516514一0。15325561958一0。67719弓7一2。08296070。8625232一0。80167870。251651咬一0。15325561959一0。6771947一2。08296070。5625232一0。80167870。251651怪一0。1532556JulAuqsepOctNovDec19性61。性560性571。16性59380。69161620。7752444一l。1097652一0。376819719弓71。4560弓571。16任59380。69161620。77524任4一l。1097652一0。376819719弓81。性560弓571。16459380。69161620。7752咬咬咬一l。1097652一0。376819719任91。性560性571。16任59380。69161620。77524任任一1。1097652一0。376819719501。性560性571。16459380。69161620。7752444一l。1097652一0。376819719511。性5604571。16459380。69161620。7752444一l。1097652一0。376819719521。性5604571。16459380。69161620。7752咬4咬一1。1097652一0。376819719531。性560性571。16任59380。69161620。77524任任一1。1097652一0。376819719541。4560弓571。16任59380。69161620。7752咬任4一l。1097652一0。376819719551。性5604571。16459380。69161620。7752444一l。1097652一0。376819719561。性5604571。16459380。69161620。775244咬一l。1097652一0。376819719571。性560性571。16性59380。69161620。7752444一l。1097652一0。376819719581。4560弓571。16任59380。69161620。77524任4一l。1097652一0。376819719591。性560弓571。16459380。69161620。7752咬咬咬一l。1097652一0。3768197

$”符号是R中的一个引用符号,类似其他面向对象中的“.”,表示查看birthstimeseriescomponents这个结构中的seasonal对象,也就是纽约这段时间新生儿月出生率时间序列的季节性部分值。同理,可以用birthstimeseriescomponents$trendbirthstimeseriescomponents$irregular分别查看到,该时间序列趋势部分值和无规律部分值。

查看时间序列分解结果图的方法及结果:

计算机生成了可选文字: >plot(b工rth3tl皿e3e二le3colnponent3)

 

计算机生成了可选文字: DecompOSitjonOfadditivetjmeseries军呱砂时测附味厂尸一啊啊卿秘心恻坷啊哑口到嘴钊p山IUQ)SqO9钊寸钊pCQ」}到州O尸00口尸。0酬}一门UOSB田S明O们0.EOpCm」,9461948195019521954195619581960T1me

上图中,四个图分别对应原始时间序列、趋势部分、周期性部分、随机部分。同样可以plot(birthstimeseriescomponents$trend)查看每个部分的图。

说明:RR Graphics页面,向下滑动鼠标也可以切换到单个部分的图。若是鼠标不够灵敏可能就每次滑动鼠标会跳过几个图,大家可以试试。


这部分讲了时间序列数据输入R中,时间序列数据周期的设置,季节性和非季节性时间数据的区分,还有针对时间序列的分解。后面会涉及的内容是指数平滑法做时间序列的预测,ARIMA模型做时间序列的预测。建议先对这两个算法做一个简单的了解。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值