時間序列的ADF校驗(單位根校驗)

eefang發表於2020-10-12

時間序列的ADF校驗(單位根校驗)

使用模組statsmodels裡的

匯入模組


from statsmodels.tsa.stattools import adfuller

import pandas as pd
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

匯入資料

df = pd.read_csv('testdata.csv')
df['d_time'] = df['d_time'].apply(pd.to_datetime)
df.set_index('d_time', inplace=True)
df1= df.resample('5s').mean()
df1.reset_index(inplace=True)
df2 = pd.DataFrame(df1['value'])
adfuller(df2)

輸出結果

(-1.172934882196818,
 0.6851287621408015,
 52,
 86348,
 {'1%': -3.430425734173461,
  '5%': -2.861573473259827,
  '10%': -2.56678781665506},
 -712254.0157072636)

進行一階差分,再進行校驗

df2_diff = df2.diff()
df2_diff.dropna(inplace=True)
adfuller(df2_diff)

結果

(-36.186333373649646,
 0.0,
 51,
 86348,
 {'1%': -3.430425734173461,
  '5%': -2.861573473259827,
  '10%': -2.56678781665506},
 -712245.3883643872)
引數說明
x (array_like,1d)資料系列
maxlag (int測試中包含的最大延遲,預設為12 *(nobs / 100)^ {1/4}
regression({‘c’,’ct’,’ctt’,’nc’})包含在迴歸中的常量和趨勢順序‘(c’:僅限常量(預設)‘ct’:恆定和趨勢 ‘ctt’:常數,線性和二次趨勢 ‘nc’:沒有恆定,沒有趨勢)
autolag {‘AIC’,’BIC’,’t-stat’,無}如果為None,則使用maxlag滯後 如果是’AIC’(預設值)或’BIC’,則選擇滯後數以最小化相應的資訊標準 基於’t-stat’的maxlag選擇。從maxlag開始並使用5%大小的測試來降低滯後,直到最後一個滯後長度的t統計量顯著為止
store(bool)如果為True,則另外返回adf統計資訊的結果例項。預設值為False
regolults (bool,可選)如果為True,則返回完整的迴歸結果。預設值為False

返回

說明
adf (float)測試統計
pvalue (float)MacKinnon基於MacKinnon的近似p值(1994年,2010年)
usedlag (int)使用的滯後數量
nobs( int)用於ADF迴歸的觀察數和臨界值的計算
critical values(dict)測試統計資料的臨界值為1%,5%和10%。基於MacKinnon2010)
icbest(float)如果autolag不是None,則最大化資訊標準。
resstore (ResultStore,可選)一個虛擬類,其結果作為屬性附加

第一次

(-1.172934882196818,
 0.6851287621408015,
 52,
 86348,
 {'1%': -3.430425734173461,
  '5%': -2.861573473259827,
  '10%': -2.56678781665506},
 -712254.0157072636)

adf>1%’ >5%’ >10%’ 且 p值很大,結論:不平穩

第二次,一階差分後

(-36.186333373649646,
 0.0,
 51,
 86348,
 {'1%': -3.430425734173461,
  '5%': -2.861573473259827,
  '10%': -2.56678781665506},
 -712245.3883643872)

adf<1%’ <5%’ <10%’ 且 p值<0.05,結論:平穩序列

所以判斷為一階單整

參考:
https://www.itbook5.com/2019/08/11560/

相關文章