15.1 時間序列--概念
15.1.1 概念
- 橫截面數(shù)據(jù):在一個給定的時間點(diǎn)測量變量值
- 縱向數(shù)據(jù):隨著時間的變化反復(fù)測量變量值
對時序數(shù)據(jù)的研究包括兩個基本問題:
- 對數(shù)據(jù)的描述【這段時間內(nèi)發(fā)生了什么望忆?趨勢届氢?季節(jié)性受楼?】
- 預(yù)測【接下來會發(fā)生什么?時間序列模型的預(yù)測】
15.1.2 生成時間序列
在R中疮薇,一個數(shù)值型向量或數(shù)據(jù)框中的一列可通過ts()
函數(shù)存儲為時序?qū)ο?/p>
myseries <- ts(data, start=, end=, frequency=)
- data:原始的包含觀測值的數(shù)值型向量
- start:時序的起始時間
- end:時序的終止時間
- frequency:為每個單位時間所包含的觀測值數(shù)量(如frequency=1對應(yīng)年度數(shù)據(jù),frequency=12對應(yīng)月度數(shù)據(jù)赴叹,frequency=4對應(yīng)季度數(shù)據(jù)
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()獲得結(jié)束時間
frequency(tsales) # frequency()獲得頻率
# window()函數(shù)取子集
tsales.subset <- window(tsales, start=c(2003, 5), end=c(2004, 6))
tsales.subset
15.2 時序的平滑化和季節(jié)分解
時間序列數(shù)據(jù)【存在季節(jié)性因素耸弄,如月度數(shù)據(jù)、季度數(shù)據(jù)等】可以被分解為趨勢因子秒咨、季節(jié)性因子和隨機(jī)因子
-
趨勢因子
trend component
能捕捉到長期變化 -
季節(jié)性因子
seasonal component
能捕捉到一年內(nèi)的周期性變化 -
隨機(jī)(誤差)因子
irregular/error component
能捕捉到那些不能被趨勢或季節(jié)效應(yīng)解釋的變化喇辽。
可以通過相加模型,也可以通過相乘模型來分解數(shù)據(jù)
對于乘法模型雨席,可以取對數(shù)菩咨,將其轉(zhuǎn)化為加性模型
那么如何將時間序列進(jìn)行拆分,分解成這三部分呢陡厘?對于趨勢和季節(jié)的分解抽米,下面介紹移動平均和季節(jié)因子
15.2.1 分解趨勢--移動平均
時序數(shù)據(jù)集中通常有很顯著的隨機(jī)或誤差成分。為了辨明數(shù)據(jù)中的規(guī)律糙置,我們總是希望能夠撇開這些波動云茸,畫出一條平滑曲線。畫出平滑曲線的最簡單辦法是簡單移動平均谤饭。比如每個數(shù)據(jù)點(diǎn)都可用這一點(diǎn)和其前后q個點(diǎn)的平均值來表示标捺,這就是居中移動平均centered moving average
St是時間點(diǎn)t的平滑值,k=2q+1
是每次用來平均的觀測值的個數(shù)揉抵,一般我們會將其設(shè)為一個奇數(shù)亡容。居中移動平均法的代價是,每個時序集中我們會損失最后的q個觀測值冤今,平均值消除了數(shù)據(jù)中的一些隨機(jī)性
使用R語言forecast
包中的ma()
函數(shù)來對Nile時序數(shù)據(jù)進(jìn)行平滑處理
ma(ts,k=)
- ts:時間序列數(shù)據(jù)
- 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的增大,圖像變得越來越平滑戏罢。因此我們需要找到最能畫出數(shù)據(jù)中規(guī)律的k屋谭,避免過平滑或者欠平滑脚囊。這里并沒有什么特別的科學(xué)理論來指導(dǎo)k的選取,我們只是需要先嘗試多個不同的k桐磁,再決定一個最好的k
除此之外悔耘,還可以使用加權(quán)移動平均來進(jìn)行平滑化
加權(quán)移動平均法的一大優(yōu)勢是它可以讓趨勢周期項(xiàng)的估計更平滑。觀測值不是直接完全進(jìn)入或離開計算所意,它們的權(quán)重緩步增加淮逊,然后緩步下降,讓曲線更加平滑
15.2.2 季節(jié)分解
季節(jié)指數(shù)的計算
- 季節(jié)因子(Seasonal factor)
- Sk代表第k個季節(jié)的季節(jié)因子扶踊,分子代表第k個季度的平均數(shù),分母代表總平均數(shù)
- 季節(jié)因子表示第k個季節(jié)的數(shù)相對于總平均數(shù)的占比秧耗,反應(yīng)當(dāng)前季節(jié)相對于平均值的變化
- Sk越接近1备籽,季節(jié)性越弱,Sk大于1說明該季度的值高于平均值分井,Sk小于1說明該季度的值低于平均值
-
季節(jié)性差分
有時候我們需要消除季節(jié)性,需要將季節(jié)性從數(shù)據(jù)中剔除,這個過程叫季節(jié)調(diào)整
s代表周期伏嗜,即使用t期的數(shù)據(jù)減t-s期的數(shù)據(jù)
將時序分解為趨勢項(xiàng)承绸、季節(jié)項(xiàng)和隨機(jī)項(xiàng)的常用方法是用LOESS光滑做季節(jié)性分解挣轨。這可以通 過R中的stl()
函數(shù)
stl(ts, s.window=, t.window=)
- ts:要分解的時間序列
- s.window:控制季節(jié)效應(yīng)變化的速度
- t.window:控制趨勢項(xiàng)變化的速度
stl函數(shù)只能處理相加模型卷扮,如果要處理相乘模型晤锹,可以使用log進(jìn)行轉(zhuǎn)換
AirPassengers # 國際航班乘客數(shù)據(jù)集
plot(AirPassengers)
lAirPassengers <- log(AirPassengers)
plot(lAirPassengers, ylab="log(AirPassengers)")
fit <- stl(lAirPassengers, s.window="period") # 將季節(jié)效應(yīng)限定為每年都一樣
plot(fit)
fit$time.series
相關(guān)參考:
[1] https://www.youtube.com/watch?v=2mM8BUqWAZ4
[2] https://zhuanlan.zhihu.com/p/21877990
[3] http://www.reibang.com/p/e6d286132690
[4] https://nwfsc-timeseries.github.io/atsa-labs/sec-boxjenkins-stationarity.html
[6] Kabacoff, Robert. R 語言實(shí)戰(zhàn). Ren min you dian chu ban she, 2016.