2017-02-13 1 views
0

저는 안정도를 테스트하기 위해 여러 (~ 500) 시계열에 대해 ADF 테스트를 수행하고 있습니다. 그래서 나는 그들 각각에 대해 정확한 수의 래그를 선택하는 양적 방법이 필요합니다. 가능한 한 접근법은 테스트를 위해 샘플의 80 %를 사용하고 회귀의 매개 변수를 가져 와서 ssr (제곱 회귀의 합)을 계산하고 최소값을 검색하는 것입니다. 그러나 이것이 과도한 피팅으로 이어질 수 있으며 피하기 위해이 회귀를 나머지 20 %에 적용하고이 하위 샘플의 ssr을 계산할 수 있습니다. 이 두 번째 ssr의 최소값으로 이어지는 지연의 수는 올바른 값이어야합니다.통계 모델을 사용하여 Python으로 Dickey Fuller를 테스트했습니다.

문제는 statsmodels 문서가 불완전하지 않다는 것입니다 (최소한 저 같은 초보자에게는!). 예를 들어, 주어진 라인은

res = ts.adfuller(dUs, maxlag=max_lag_, autolag=None, regression='ct', store=True, regresults=True) 

이고 회귀 계수는 res [3] .resols.params에 저장되지만 순서는 알 수 없습니다. 나는 누군가에게이 시계를 사용해 시계를 시험해보아야했다.이 시계는 사용 된 수식과 이에 상응하는 계수를 제공한다.

R-output).

매개 변수의 파이썬 순서는 ('ct'회귀) 지연 1, 지연 1, 지연 2, 지연 ... 지연, 절편, 시간 추세 인 것으로 보입니다. 나는, 다음, 다음 코드로 장착 시리즈를 재 - 구성 :

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] 

지연 변수가이

lag = dUs[1:]-dUs[:-1] 

처럼 내 DUS 변수로 구성되는 주 있다는 것입니다 그 xFit 시리즈와 res [3] .resols.fittedvalues는 다릅니다! 나는 이것이 최초의 max_lag_ 데이터 포인트의 초기화와 관련이 있다고 생각한다. (실제로 res [3] .resols.fittedvalues는 원래 시리즈보다 max_lag_ + 1 짧다.) : 나는 그것들이 동일하도록 선택했다. 원래 시리즈로. 그러나 정확히 무슨 일이 일어나는지 파악할 수는 없습니다. xFit과 res [3] .resols.params의 차이는 커집니다. time-series-comparison입니다. 또한 지연 횟수를 늘리면 내 피팅이 어느 정도 가치가 올라간다는 것을 알 수 있습니다. 그런 다음 시리즈가 폭발합니다. 이것은 장착 된 값으로는 발생하지 않습니다!

마지막 테스트에서는 xFit에서 ADF 테스트를 실행했습니다. 이것이 내가 이미 가지고있는 res [3] .resols.params로 이어져야한다는 것을 이해합니다.

는 라인

res2 = ts.adfuller(xFit, maxlag=max_lag_, autolag=None, regression='ct', store=True, regresults=True) 

에게 RES2의 출력을 주어 3

[-1.60231256e + 00 4.23814175e -4.15837300e - 02 - 02 - 02 4.99642618e 된다 .resols.params -6.92483339e 3.89141878e + 02 + 00]

입술 [3] .resols.params하면서

[-1.29269094e 2.11857016e + 00 - 02 - 02 -5.82679110e -2.09614163e-02이다,174,-5.44413351e + 02 2.69502722e + 00]

많은 사람들이 R로 이동하겠다고 제안했지만, a) 사용하지는 않았지만 (배울 수도 있음) b) 직장에 설치된 소프트웨어를 얻는 것이 그리 쉬운 일이 아니며 귀중한 시간을 많이 뺏을 수 있습니다.

아이디어가 있으십니까? 어떤 실수라도 제가 빠졌습니까?(내가 전에 그것을 게시 할 시간이 없었 않았더라도!) 사전에

감사합니다,

C

답변

0

나는이 문제를 해결했다. 문제는 파이썬이 시계열 자체에 적합한 반면 R은 차이 시리즈에 맞는다는 것입니다. 그것은 오류 (xFit은 시계열 재구성에서 하위 사용자로 대체되어야 함!)와 결합하여 위에서 설명한대로 이상한 모든 것을 만들었습니다. 오른쪽 코드는

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] 
입니다.
관련 문제