chapter15.1-2 時間序列1--時間序列分解

15.1 時間序列--概念

15.1.1 概念

  • 橫截面數據:在一個給定的時間點測量變量值
  • 縱向數據:隨著時間的變化反復測量變量值

對時序數據的研究包括兩個基本問題:

  1. 對數據的描述【這段時間內發生了什么?趨勢?季節性?】
  2. 預測【接下來會發生什么?時間序列模型的預測】

15.1.2 生成時間序列

在R中,一個數值型向量或數據框中的一列可通過ts()函數存儲為時序對象

myseries <- ts(data, start=, end=, frequency=)

  • data:原始的包含觀測值的數值型向量
  • start:時序的起始時間
  • end:時序的終止時間
  • frequency:為每個單位時間所包含的觀測值數量(如frequency=1對應年度數據,frequency=12對應月度數據,frequency=4對應季度數據
sales <- c(18, 33, 41, 7, 34, 35, 24, 25, 24, 21, 25, 20, 22, 31, 40, 29, 25, 21, 22, 54, 31, 25, 26, 35)
tsales <- ts(sales, start=c(2003, 1), frequency=12) 
tsales
plot(tsales)   # 繪制時間序列

start(tsales)         # start()獲得起始時間
end(tsales)           # end()獲得結束時間
frequency(tsales)     # frequency()獲得頻率

# window()函數取子集
tsales.subset <- window(tsales, start=c(2003, 5), end=c(2004, 6)) 
tsales.subset

15.2 時序的平滑化和季節分解

時間序列數據【存在季節性因素,如月度數據、季度數據等】可以被分解為趨勢因子、季節性因子和隨機因子

  • 趨勢因子trend component能捕捉到長期變化
  • 季節性因子seasonal component能捕捉到一年內的周期性變化
  • 隨機(誤差)因子irregular/error component能捕捉到那些不能被趨勢或季節效應解釋的變化。

可以通過相加模型,也可以通過相乘模型來分解數據
\begin{align} \\&Y_{t} = Trend_{t} + Seasonal_{t} + Irregular_{t} \\ \\&Y_{t} = Trend_{t} \times Seasonal_{t} \times Irregular_{t} \end{align}
對于乘法模型,可以取對數,將其轉化為加性模型

那么如何將時間序列進行拆分,分解成這三部分呢?對于趨勢和季節的分解,下面介紹移動平均和季節因子

15.2.1 分解趨勢--移動平均

時序數據集中通常有很顯著的隨機或誤差成分。為了辨明數據中的規律,我們總是希望能夠撇開這些波動,畫出一條平滑曲線。畫出平滑曲線的最簡單辦法是簡單移動平均。比如每個數據點都可用這一點和其前后q個點的平均值來表示,這就是居中移動平均centered moving average
S_{t} =\frac{ (Y_{t-q}+...+Y + ...+Y_{t+q})}{2q+1}

St是時間點t的平滑值,k=2q+1是每次用來平均的觀測值的個數,一般我們會將其設為一個奇數。居中移動平均法的代價是,每個時序集中我們會損失最后的q個觀測值,平均值消除了數據中的一些隨機性

使用R語言forecast包中的ma()函數來對Nile時序數據進行平滑處理

ma(ts,k=)

  • ts:時間序列數據
  • k:移動平均的步長為k
library(forecast) 
opar <- par(no.readonly=TRUE) 
par(mfrow=c(2,2)) 
ylim <- c(min(Nile), max(Nile)) 
plot(Nile, main="Raw time series") 
plot(ma(Nile, 3), main="Simple Moving Averages (k=3)", ylim=ylim) 
plot(ma(Nile, 7), main="Simple Moving Averages (k=7)", ylim=ylim) 
plot(ma(Nile, 15), main="Simple Moving Averages (k=15)", ylim=ylim) 
par(opar)

從圖像來看,隨著k的增大,圖像變得越來越平滑。因此我們需要找到最能畫出數據中規律的k,避免過平滑或者欠平滑。這里并沒有什么特別的科學理論來指導k的選取,我們只是需要先嘗試多個不同的k,再決定一個最好的k

除此之外,還可以使用加權移動平均來進行平滑化
\begin{align} \\& assuming\ k=2q+1 \\ \\& weight = [a_{t-q},...,a_{t},...,a_{t+q}] \\ \\& S_{t} = \sum _{j = t-q}^{t+q}ajY_{j} \end{align}

加權移動平均法的一大優勢是它可以讓趨勢周期項的估計更平滑。觀測值不是直接完全進入或離開計算,它們的權重緩步增加,然后緩步下降,讓曲線更加平滑

15.2.2 季節分解

季節指數的計算

  • 季節因子(Seasonal factor)

\begin{align} \\& \bar x_{k} = \frac{\sum_{i=1}^{n} x_{i}k}{n}, n = 1,2,3... \\ \\& \bar x = \frac{\sum_{i=1}^{n} \sum_{k=1}{m}x_{i}k}{nm},n = 1,2,3... ; k=1,2,3...m \\ \\&S_{k} = \frac{\bar x_{k}}{\bar x},k=1,2,3....m \end{align}

  1. Sk代表第k個季節的季節因子,分子代表第k個季度的平均數,分母代表總平均數
  2. 季節因子表示第k個季節的數相對于總平均數的占比,反應當前季節相對于平均值的變化
  3. Sk越接近1,季節性越弱,Sk大于1說明該季度的值高于平均值,Sk小于1說明該季度的值低于平均值
  • 季節性差分

    有時候我們需要消除季節性,需要將季節性從數據中剔除,這個過程叫季節調整
    \Delta _sx_{t} = x_{t} - x_{t-s}
    s代表周期,即使用t期的數據減t-s期的數據

將時序分解為趨勢項、季節項和隨機項的常用方法是用LOESS光滑做季節性分解。這可以通 過R中的stl()函數

stl(ts, s.window=, t.window=)

  • ts:要分解的時間序列
  • s.window:控制季節效應變化的速度
  • t.window:控制趨勢項變化的速度

stl函數只能處理相加模型,如果要處理相乘模型,可以使用log進行轉換

AirPassengers  # 國際航班乘客數據集
plot(AirPassengers) 
lAirPassengers <- log(AirPassengers) 
plot(lAirPassengers, ylab="log(AirPassengers)")
fit <- stl(lAirPassengers, s.window="period")  # 將季節效應限定為每年都一樣
plot(fit)
fit$time.series

相關參考:

[1] https://www.youtube.com/watch?v=2mM8BUqWAZ4

[2] https://zhuanlan.zhihu.com/p/21877990

[3] http://www.lxweimin.com/p/e6d286132690

[4] https://nwfsc-timeseries.github.io/atsa-labs/sec-boxjenkins-stationarity.html

[6] Kabacoff, Robert. R 語言實戰. Ren min you dian chu ban she, 2016.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374