至少有兩種非平穩時間序列:具備趨勢的時間序列和具備單位根的時間序列(稱爲單整時間序列)。單位根檢驗不能用來評估時間序列是否平穩。它們只能檢測單整時間序列。季節性單位根也是如此。html
這裏考慮月平均溫度數據。python
> mon=read.table("temp.txt") > plot(mon)
如今,咱們能夠計算全部年份的三個不一樣平穩性檢驗的p值app
for(y in 1955:2013){ Temp[which(Year==y)] as.numeric(pp.test(Zc)$p.value) as.numeric(kpss.test(Zc)$p.value) as.numeric(adf.test(Zc)$p.value)
從圖像上看,若是紅色表示非平穩,藍色表示平穩,咱們獲得函數
polygon(y,col=CL[1+(D[y-1954,i]==1)*5],border=NA)}}
能夠看到大部分序列在5%顯著性水平下沒法拒絕原檢驗說明序列非平穩。ui
冬天和夏天的溫度是徹底不一樣的。咱們能夠來可視化:spa
> plot(month,(tsm)) > lines(1:12,apply(M,2,mean
或者code
plot(tsm)
> 3D(tsm)
看起來咱們的時間序列是週期性的,由於每一年都是季節性的。自相關函數:orm
如今的問題是有季節性單位根嗎?這說明咱們的模型應該是htm
若是咱們忘記了自迴歸和移動平均份量,咱們能夠估計ci
若是有季節性單位根,那麼應該接近1。
arima(x = tsm, order = c(0, 0, 0), seasonal = list(order = c(1, 0, 0), period = 12)) Coefficients: sar1 intercept 0.9702 6.4566 s.e. 0.0071 2.1515
和1差很少。實際上,它不能太接近1。若是是的話,咱們會收到一條錯誤信息…
爲了說明模型,讓咱們考慮季度溫度,
sp(1:4,N,theta=-50,col="yellow",shade=TRUE,
VAR模型描述在同同樣本期間內的n個變量(內生變量)能夠做爲它們過去值的線性函數。
一個VAR(p)模型能夠寫成爲:
其中:_c_是_n_ × _1_常數向量,_Ai_是_n_ × _n_矩陣。e_t_是_n_ × _1_偏差向量,知足:
其中A是4X4矩陣。這個模型很容易估計
model=VAR(df)
矩陣A在這裏
> A=rbind( + coefficients(varresult$y1)[1:4], + coefficients(varresult$y2)[1:4], + coefficients(varresult$y3)[1:4], + coefficients(varresult$y4)[1:4])
因爲這個多時間序列的平穩性與這個矩陣的特徵值密切相關,咱們來看一下,
> eigen(A) [1] 0.35834830 -0.32824657 -0.14042175 0.09105836 > Mod(eigen(A) [1] 0.35834830 0.32824657 0.14042175 0.09105836
看起來這裏不存在平穩性問題。有限制的模型稱爲週期自迴歸模型,被稱爲 模型
其中
而且
這是一個_VAR(1)_ 模型,所以
能夠來估計這個模型
par(wts=tsq, type="PAR", p=1) > PAR(model)
特徵方程爲
因此有一個(季節性的)單位根,若是
但在這裏顯然不是這樣。能夠進行 _Canova_ _Hansen_(CH)檢驗。_Canova_ _Hansen_(CH)檢驗主要用於檢驗季節差別並驗證零假設,即季節性模式在採樣期內是穩定的或隨時間而變化。
檢驗的輸出在這裏
> CH.test(tsm)
看起來咱們拒絕了季節性單位根的假設。我提到如下檢驗程序
> nsdiffs(tsm, test="ch") [1] 0
其中輸出:「1」表示有一個季節單位根,「0」表示沒有季節單位根。讀起來很簡單,不是嗎?若是咱們考慮每個月數據的週期自迴歸模型,輸出是
> model
因此,無論是什麼檢驗,咱們老是拒絕有季節性單位根的假設。這並不意味着咱們的序列不能是週期性的!實際上,這個序列幾乎是週期性的。可是沒有單位根!因此全部這些都是有意義的。
爲了確保咱們獲得的是正確的,考慮兩個時間序列。第一個是週期序列(有很是小的噪聲),第二個是單整序列。
> p1=Xp2=as.numeric(t(M)) > for(t in 13:length(M)){ + p2[t]=Xp2[t-12]+rnorm(1,0,2)
查看
3D(tsp1) 3D(tsp2)
若是咱們快速地看一下這些序列,我會說第一個沒有單位根-即便它不是平穩的,但這是由於這個序列是週期性的-而第二個有單位根。若是咱們看一下 _Canova_ _Hansen_(CH)檢驗,咱們會獲得
> CH.test(tsp1)
考慮一下
> nsdiffs(tsp1, 12,test="ch") [1] 0 > nsdiffs(tsp2, 12,test="ch") [1] 1
這裏咱們有相同的結論。第一個沒有單位根,可是第二個有單位根。用_Osborn-Chui-Smith-Birchenhall_檢驗
> nsdiffs(tsp1, 12,test="ocsb") [1] 1 > nsdiffs(tsp2, 12,test="ocsb") [1] 1
在咱們的週期序列中也有一個單位根。
因此在這裏,在低頻上,咱們拒絕在咱們的溫度序列中有單位根的假設,甚至是季節性的單位根。
最受歡迎的看法
1.在python中使用lstm和pytorch進行時間序列預測
2.python中利用長短時間記憶模型lstm進行時間序列預測分析