Тест ADF в статистических моделях на Python

Я пытаюсь запустить расширенный тест Дики-Фуллера в statsmodels на Python, но, кажется, что-то упускаю.

Это код, который я пытаюсь:

import numpy as np
import statsmodels.tsa.stattools as ts

x = np.array([1,2,3,4,3,4,2,3])
result = ts.adfuller(x)

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "C:\Users\Akavall\Desktop\Python\Stats_models\stats_models_test.py", line 12, in <module>
    result = ts.adfuller(x)
  File "C:\Python27\lib\site-packages\statsmodels-0.4.1-py2.7-win32.egg\statsmodels\tsa\stattools.py", line 201, in adfuller
    xdall = lagmat(xdiff[:,None], maxlag, trim='both', original='in')
  File "C:\Python27\lib\site-packages\statsmodels-0.4.1-py2.7-win32.egg\statsmodels\tsa\tsatools.py", line 305, in lagmat
    raise ValueError("maxlag should be < nobs")
ValueError: maxlag should be < nobs

Моя версия Numpy: 1.6.1 Моя версия statsmodels: 0.4.1 Я использую окна.

Я просматриваю документацию здесь но не могу понять, что я делаю не так. Что мне не хватает?

Заранее спасибо.


person Akavall    schedule 29.06.2012    source источник


Ответы (1)


Я понял. По умолчанию maxlag установлено на None, а должно быть установлено на целое число. Что-то вроде этого работает:

import numpy as np
import statsmodels.tsa.stattools as ts

x = np.array([1,2,3,4,3,4,2,3])
result = ts.adfuller(x, 1) # maxlag is now set to 1

Выход:

>>> result
(-2.6825663173365015, 0.077103947319183241, 0, 7, {'5%': -3.4775828571428571, '1%': -4.9386902332361515, '10%': -2.8438679591836733}, 15.971188911270618)
person Akavall    schedule 29.06.2012
comment
Проблема в том, что если maxlag равен None, то adfuller использует maxlag по умолчанию, рекомендованный в литературе, int(np.ceil(12. * np.power(nobs/100., 1/4.))), который не работает для небольших чисел. Аналогичная проблема с минимальным количеством наблюдений в тестах grangercausalitytests github.com/statsmodels/statsmodels/issues/347 . - person Josef; 30.06.2012
comment
@ user333700, понятно. Большое спасибо. - person Akavall; 30.06.2012