時間序列的R語言實現_Part1
內容來自a little book of r for time series,檢視資源請戳:點選開啟連結。
翻譯基本忠於原文,加上了一些我自己的理解說明,有任何問題歡迎指正,謝謝!
時間序列資料讀取
時間序列資料是指按時間排好序的資料。可以指定開始時間,時間週期等引數。
下面是三個時間序列的讀取的例子:
1. 英國曆任國王去世年齡
ts()方法就是將資料存為時間序列物件kingstimeseries,檢視kingstimeseries會看到Start,End,Frequency三個引數,分別是時間序列的開始時間,結束時間和時間週期。在時間序列物件建立時,沒有制定的話,開始時間預設start = 1
2. 紐約1946年1月到1959年12月的每月新生兒數
這裡,設定了start=c(1946,1),就是1946年1月,然後R會根據資料長度自動向後遞推,一般end不需要另外設定,從這個角度來看,時間序列的資料必須是連續的區間上的,中間不能有空缺。frequency = 12,1年有12個月,也就是時間序列的週期。週期數據和非週期數據在分析時可能會存在很大差異。
說明:翻譯自前面說到的文件中2.2節,這部分資料,英文的意思應該是新生兒的數量,個人不太理解出生人數為什麼還有小數點,紐約那麼大一個城市一個月只有20多個新生兒,不太合理。在想是不是出生率,
澳大利亞昆士蘭一沙灘旅遊勝地某一紀念品店從1987年1月到1993年12月的月銷量資料
展示時間序列
使用前面的輸入的三個時間序列資料,kingstimeseries、birthtimeseries、souvenirtimeseries,方法plot.ts(),就會將時間序列的走勢以折線圖的方式展示出來,橫軸為時間,縱軸為資料值。三個時間序列的資料分別展示如下:
從這個圖看,英國國王逝世年齡比較隨機,沒有很強的規律性。
這個圖很明顯能看出一個新生兒出生數,有個按年的週期規律每年的3月左右和10月左右都有出生小高峰。
紀念品的銷售額的資料,從1987年到1994年,資料跨度很大,所以可以看到,縱軸變成了科學計數法。這個時間序列資料隨時間季節性的波動和隨機波動的幅度在增大,不能用加性模型(additive model)描述,可以理解說時間序列不穩定。因此,可以對souvenirtimeseries資料取自然對數,使之更穩定。
說明:加性模型(additive model),網上沒有找到很明確的說法。我的理解應該是能用加性模型描述的時間序列應該是我們理解中的平穩時間序列。
這時,取對數後的時間序列隨時間的波動幅度變得比較穩定了。
分解時間序列
將時間序列值分解,通常有趨勢部分值和無規律部分值,若是週期性的資料,則還可能會有周期部分值。
非週期性資料
非週期性資料可分解為趨勢部分和無規律部分。
估算一個可用加性模型描述的非週期性時間序列的趨勢部分值,可以使用平滑方法,最常用的是計算時間序列的簡單移動平均值。R可以用TTR包中的SMA()方法。
安裝好TTR包,載入後。對kingstimeseries資料計算以3為平滑期,即n=3,的簡單移動平均值,得到一個新的平滑時間序列。
以3為平滑期得到的時間序列還是存在隨機波動,所以可以嘗試更大的平滑期,n=8。過程結果如下:
這時得到的趨勢部分值就沒有了明顯的隨機波動,顯示出一個大的趨勢,前20位國王的逝世年齡呈一個下降的趨勢,後面逝世年齡逐漸增大,到時間序列的最後第40為國王時,逝世年齡已經增加到了73歲的樣子。
週期性資料
週期性時間序列資料可分解為趨勢部分,無規律部分和週期性部分。
分解週期性資料,可用R中的decompose()方法,這個方法返回一個list物件,時間序列的趨勢部分值,無規律部分值和週期性部分值,分別被存放在其中的trend、seasonal、random物件中。用前面輸入的週期性時間序列紐約新生人口數來做這個分解。
“$”符號是R中的一個引用符號,類似其他面向物件中的“.”,表示檢視birthstimeseriescomponents這個結構中的seasonal物件,也就是紐約這段時間新生兒月出生率時間序列的季節性部分值。同理,可以用birthstimeseriescomponents$trend和birthstimeseriescomponents$irregular分別檢視到,該時間序列趨勢部分值和無規律部分值。
檢視時間序列分解結果圖的方法及結果:
上圖中,四個圖分別對應原始時間序列、趨勢部分、週期性部分、隨機部分。同樣可以plot(birthstimeseriescomponents$trend)檢視每個部分的圖。
說明:在R中R Graphics頁面,向下滑動滑鼠也可以切換到單個部分的圖。若是滑鼠不夠靈敏可能就每次滑動滑鼠會跳過幾個圖,大家可以試試。
這部分講了時間序列資料輸入R中,時間序列資料週期的設定,季節性和非季節性時間資料的區分,還有針對時間序列的分解。後面會涉及的內容是指數平滑法做時間序列的預測,ARIMA模型做時間序列的預測。建議先對這兩個演算法做一個簡單的瞭解。