拓端tecdat|R語言arima,向量自回歸(VAR),周期自回歸(PAR)模型分析溫度時間序列
原文鏈接:?http://tecdat.cn/?p=22071
原文出處:拓端數(shù)據(jù)部落公眾號
至少有兩種非平穩(wěn)時間序列:具有趨勢的時間序列和具有單位根的時間序列(稱為單整時間序列)。單位根檢驗不能用來評估時間序列是否平穩(wěn)。它們只能檢測單整時間序列。季節(jié)性單位根也是如此。
這里考慮月平均溫度數(shù)據(jù)。
> mon=read.table("temp.txt")
> plot(mon)
現(xiàn)在,我們可以計算所有年份的三個不同平穩(wěn)性檢驗的p值
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)
從圖像上看,如果紅色表示非平穩(wěn),藍色表示平穩(wěn),我們得到
polygon(y,col=CL[1+(D[y-1954,i]==1)*5],border=NA)}}
可以看到大部分序列在5%顯著性水平下無法拒絕原檢驗說明序列非平穩(wěn)。
冬天和夏天的溫度是完全不同的。我們可以來可視化:
> plot(month,(tsm))
> lines(1:12,apply(M,2,mean
或者
? plot(tsm)
> 3D(tsm)
看起來我們的時間序列是周期性的,因為每年都是季節(jié)性的。自相關(guān)函數(shù):
現(xiàn)在的問題是有季節(jié)性單位根嗎?這說明我們的模型應(yīng)該是
如果我們忘記了自回歸和移動平均分量,我們可以估計
如果有季節(jié)性單位根,那么應(yīng)該接近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季度溫度模型
VAR模型描述在同一樣本期間內(nèi)的n個變量(內(nèi)生變量)可以作為它們過去值的線性函數(shù)。
一個VAR(p)模型可以寫成為:
其中:c是n?×?1常數(shù)向量,Ai是n?×?n矩陣。et是n?×?1誤差向量,滿足:
?—誤差項的均值為0
?—誤差項的協(xié)方差矩陣為Ω(一個n?× 'n正定矩陣)
?(對于所有不為0的k都滿足)—誤差項不存在自相關(guān)
其中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])
由于這個多時間序列的平穩(wěn)性與這個矩陣的特征值密切相關(guān),我們來看一下,
> eigen(A)
[1] ?0.35834830 -0.32824657 -0.14042175 ?0.09105836
> Mod(eigen(A)
[1] 0.35834830 0.32824657 0.14042175 0.09105836
周期自回歸(PAR)模型
看起來這里不存在平穩(wěn)性問題。有限制的模型稱為周期自回歸模型,被稱為?
?模型
其中
并且
這是一個VAR(1)?模型,因此
可以來估計這個模型
par(wts=tsq, ?type="PAR", p=1)
> PAR(model)
特征方程為
所以有一個(季節(jié)性的)單位根,如果
但在這里顯然不是這樣??梢赃M行?Canova?Hansen(CH)檢驗。Canova?Hansen(CH)檢驗主要用于檢驗季節(jié)差異并驗證零假設(shè),即季節(jié)性模式在采樣期內(nèi)是穩(wěn)定的或隨時間而變化。?
檢驗的輸出在這里
> CH.test(tsm)
看起來我們拒絕了季節(jié)性單位根的假設(shè)。我提到以下檢驗程序
> nsdiffs(tsm, test="ch")
[1] 0
其中輸出:“1”表示有一個季節(jié)單位根,“0”表示沒有季節(jié)單位根。讀起來很簡單,不是嗎?如果我們考慮每月數(shù)據(jù)的周期自回歸模型,輸出是
> model
所以,不管是什么檢驗,我們總是拒絕有季節(jié)性單位根的假設(shè)。這并不意味著我們的序列不能是周期性的!實際上,這個序列幾乎是周期性的。但是沒有單位根!所以所有這些都是有意義的。
為了確保我們得到的是正確的,考慮兩個時間序列。第一個是周期序列(有非常小的噪聲),第二個是單整序列。
> 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)
如果我們快速地看一下這些序列,我會說第一個沒有單位根-即使它不是平穩(wěn)的,但這是因為這個序列是周期性的-而第二個有單位根。如果我們看一下?Canova?Hansen(CH)檢驗,我們會得到
> CH.test(tsp1)
考慮一下
> nsdiffs(tsp1, 12,test="ch")
[1] 0
> nsdiffs(tsp2, 12,test="ch")
[1] 1
這里我們有相同的結(jié)論。第一個沒有單位根,但是第二個有單位根。用Osborn-Chui-Smith-Birchenhall檢驗
> nsdiffs(tsp1, 12,test="ocsb")
[1] 1
> nsdiffs(tsp2, 12,test="ocsb")
[1] 1
在我們的周期序列中也有一個單位根。
所以在這里,在低頻上,我們拒絕在我們的溫度序列中有單位根的假設(shè),甚至是季節(jié)性的單位根。
最受歡迎的見解
1.在python中使用lstm和pytorch進行時間序列預(yù)測
2.python中利用長短期記憶模型lstm進行時間序列預(yù)測分析
3.使用r語言進行時間序列(arima,指數(shù)平滑)分析
4.r語言多元copula-garch-模型時間序列預(yù)測
5.r語言copulas和金融時間序列案例
6.使用r語言隨機波動模型sv處理時間序列中的隨機波動
7.r語言時間序列tar閾值自回歸模型
8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類
9.python3用arima模型進行時間序列預(yù)測