2017-02-13 26 views
0

我正在對幾個(〜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)安裝在工作中獲得軟件不那麼容易,這可能需要我很多寶貴的時間。

任何想法?我錯過了什麼錯誤?

由於提前,

Ç

回答

0

我解決了這個問題(雖然我沒來得及之前發佈它!)。 事情是R適合差異系列,而Python適合時間序列本身。與錯誤相結合(xFit應該在時間序列的重構中替換爲dU!)使得上面所述的一切都變得怪異。 正確的編碼是

for i in range (max_lag_ + 1,xFit.size): 
    xFit[i] = res[3].resols.params[0] * dUs[i-1] + res[3].resols.params[res[3].resols.params.size - 1] 
for j in range(1,max_lag_ +1): 
    xFit[i] = xFit[i] + res[3].resols.params[j] * lag[i-1-j] 
相關問題