首頁 > 軟體

解讀時間序列分析之ADF檢驗

2022-12-15 14:02:28

一、ADF檢驗

在使用很多時間序列模型的時候,如 ARMA、ARIMA,都會要求時間序列是平穩的,所以一般在研究一段時間序列的時候,第一步都需要進行平穩性檢驗,除了用肉眼檢測的方法,另外比較常用的嚴格的統計檢驗方法就是ADF檢驗,也叫做單位根檢驗。

ADF檢驗全稱是 Augmented Dickey-Fuller test,顧名思義,ADF是 Dickey-Fuller檢驗的增廣形式。DF檢驗只能應用於一階情況,當序列存在高階的滯後相關時,可以使用ADF檢驗,所以說ADF是對DF檢驗的擴充套件。

二、單位根

一階AR模型,即AR(1)的情況,其模型如下:

如果α1 = 1 ,成為單位根。該模型就是隨機遊走,我們知道它是不平穩的。

換個思路想象一下,當α1 = 1 ,那麼前一時刻的收益率對當下時刻的影響是100%的,不會減弱;那麼就算是很遠的某個時刻,當下對它的影響還是不會消除,所以方差(表現在波動)是受前面所有時刻的影響,是和 t 相關的,因此不平穩;

如果α1 > 1,那麼當前時刻的波動不僅受前面時刻的影響,還被放大了,所以肯定不平穩;

只有當α1 < 1 的時候,前面時刻的波動對當前時刻的影響會逐漸減小。可以計算此時的自協方差以及自相關係數是一個固定值。所以這種情況下,序列是平穩的。

三、ADF檢驗的原理

ADF檢驗就是判斷序列是否存在單位根:如果序列平穩,就不存在單位根;否則,就會存在單位根。

所以,ADF檢驗的 H0 假設就是存在單位根,如果得到的顯著性檢驗統計量小於三個置信度(10%,5%,1%),則對應有(90%,95%,99%)的把握來拒絕原假設。

四、ADF檢驗的python實現

ADF檢驗可以通過python中的 statsmodels 模組,這個模組提供了很多統計模型。

1.引入庫

程式碼如下:

from statsmodels.tsa.stattools import adfuller

2.函數說明

adfuller函數的引數意義分別是:

  • x:一維的資料序列。
  • maxlag:最大滯後數目。
  • regression:迴歸中的包含項(c:只有常數項,預設;ct:常數項和趨勢項;ctt:常數項,線性二次項;nc:沒有常數項和趨勢項)。
  • autolag:自動選擇滯後數目(AIC:赤池資訊準則,預設;BIC:貝葉斯資訊準則;t-stat:基於maxlag,從maxlag開始並刪除一個滯後直到最後一個滯後長度基於 t-statistic 顯著性小於5%為止;None:使用maxlag指定的滯後)。
  • store:True False,預設。
  • regresults:True 完整的迴歸結果將返回。False,預設。

返回值意義為:

  • adf:Test statistic,T檢驗,假設檢驗值。
  • pvalue:假設檢驗結果。
  • usedlag:使用的滯後階數。
  • nobs:用於ADF迴歸和計算臨界值用到的觀測值數目。
  • icbest:如果autolag不是None的話,返回最大的資訊準則值。
  • resstore:將結果合併為一個dummy。

五、時間序列分析

1.使用IH2112股指期貨資料為例

2.使用IH2112股指期貨資料為例

    result = adfuller(ih_df["IH2112"].values)
    print(result)

3. 將資料進行一階差分滯後

    ih_df_diff = np.diff(ih_df["IH2112"].values)
    result = adfuller(ih_df_diff)
    print(result)

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com