1. 程式人生 > >時間序列的R語言實現_Part1

時間序列的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 = 1

end =時間序列長度,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模型做時間序列的預測。建議先對這兩個演算法做一個簡單的瞭解。