我正在對幾個(〜500)時間序列進行ADF測試以測試平穩性。所以我需要一種定量的方式來爲每一種選擇正確的滯後數。一種可能的方法是使用我的樣本的80%進行測試,並獲取其中的迴歸參數並計算ssr(平方和回歸)並搜索最小值。然而,這可能會導致過度擬合,爲了避免這種情況,可以將這種迴歸應用於剩下的20%並計算該子樣本的ssr。導致第二個ssr的最小值的滯後數量應該是正確的。使用statsmodels在Python中增強Dickey Fuller測試
問題是statsmodels文檔不夠不完整(至少對於像我這樣的新手來說!)。例如,給定的線
res = ts.adfuller(dUs, maxlag=max_lag_, autolag=None, regression='ct', store=True, regresults=True)
迴歸係數被存儲在res [3] .resols.params但順序是未知的。我不得不要求某人在我的時間序列R中的一個上運行測試(它給出了所使用的公式和相應的係數,如下所示:
R-output)。
參數的Python順序似乎是(對於'ct'迴歸)lag 1,lag diff 1,lag diff 2,... lag diff N,截距,時間趨勢。我,然後,用下面的代碼重新構造裝系列:
xFit[0:max_lag_ + 1] = dUs[0:max_lag_ + 1]
for i in range (max_lag_ + 1,xFit.size):
xFit[i] = xFit[i-1] + res[3].resols.params[0] * xFit[i-1] + res[3].resols.params[res[3].resols.params.size - 2] + res[3].resols.params[res[3].resols.params.size - 1] * t[i]
for j in range(1,max_lag_ +1):
xFit[i] = xFit[i] + res[3].resols.params[j] * lag[i-1-j]
注意,滯後變量是從我的DUS變量構建這樣
lag = dUs[1:]-dUs[:-1]
的事情是XFIT系列res [3] .resols.fittedvalues是不同的!我認爲這可能與我初始化第一個max_lag_數據點有關(事實上,請注意res [3] .resols.fittedvalues是比原始序列更短的max_lag_ + 1):我選擇它們相等到原來的系列。但我無法弄清楚到底發生了什麼。 xFit和res [3] .resols.params之間的區別是巨大的: time-series-comparison。還要注意的是,增加滯後數使得我的擬合更好一些,然後系列爆炸。這與fitvalues不會發生!
作爲最終測試,我在xFit上運行了ADF測試;我知道這應該導致res [3] .resols.params我已經得到。
鑑於線
res2 = ts.adfuller(xFit, maxlag=max_lag_, autolag=None, regression='ct', store=True, regresults=True)
RES2的輸出[3] .resols.params是
[-1.60231256e + 00 4.23814175e-02 -4.15837300e-02 4.99642618e-02 -6.92483339e + 02 3.89141878e + 00]
而RES [3] .resols.params是
[-1.29269094e + 00 2.11857016e-02 -5.82679110e-02 -2.09614163e-02 -5.44413351e + 02 + 2.69502722e 00]
我知道你們很多人會建議移動到右,但一)我從來沒有使用過(雖然我能學會)和b)安裝在工作中獲得軟件不那麼容易,這可能需要我很多寶貴的時間。
任何想法?我錯過了什麼錯誤?
由於提前,
Ç