R語言arima,向量自迴歸(VAR),週期自迴歸(PAR)模型分析溫度時間序列

原文連接: http://tecdat.cn/?p=22071

至少有兩種非平穩時間序列:具備趨勢的時間序列和具備單位根的時間序列(稱爲單整時間序列)。單位根檢驗不能用來評估時間序列是否平穩。它們只能檢測單整時間序列。季節性單位根也是如此。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季度溫度模型

VAR模型描述在同同樣本期間內的n個變量(內生變量)能夠做爲它們過去值的線性函數。

一個VAR(p)模型能夠寫成爲:

y_{t}=c + A_{1}y_{t-1} + A_{2}y_{t-2} + cdots + A_{p}y_{t-p} + e_{t},

其中:_c_是_n_ × _1_常數向量,_Ai_是_n_ × _n_矩陣。e_t_是_n_ × _1_偏差向量,知足:

  1. mathrm{E}(e_{t}) = 0,​ —偏差項的均值爲0
  2. mathrm{E}(e_{t}e_{t}') = Omega,​ —偏差項的協方差矩陣爲Ω(一個_n_ × 'n_正定矩陣)_
  3. mathrm{E}(e_{t}e_{t-k}') = 0,​ (對於全部不爲0的_k_都知足)—偏差項不存在自相關

其中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

週期自迴歸(PAR)模型

看起來這裏不存在平穩性問題。有限制的模型稱爲週期自迴歸模型,被稱爲 ​ 模型

其中

而且

這是一個_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進行時間序列預測分析

3.使用r語言進行時間序列(arima,指數平滑)分析

4.r語言多元copula-garch-模型時間序列預測

5.r語言copulas和金融時間序列案例

6.使用r語言隨機波動模型sv處理時間序列中的隨機波動

7.r語言時間序列tar閾值自迴歸模型

8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類

9.python3用arima模型進行時間序列預測

相關文章
相關標籤/搜索