Как интерпретировать функции ACF и PACF из statsmodels?

#python-3.x #statsmodels #arima

#python-3.x #statsmodels #arima

Вопрос:

Я пытаюсь определить p и q значения для модели ARMA. Временные ряды уже неподвижны, и я искал ACF PACF графики и, но мне нужно получить их p и q значения «на ходу» (например, выполнить симуляцию).

Я заметил, что на statsmodels самом деле есть две функции для acf и pacf , но я не понимаю, как их правильно использовать.

Вот как выглядит код

 from statsmodels.tsa.stattools import acf, pacf

>>>acf(data,qstat=True)
(array([1.        , 0.98707179, 0.9809318 , 0.9774078 , 0.97436479,
        0.97102392, 0.96852746, 0.96620799, 0.9642253 , 0.96288455,
        0.96128443, 0.96026672, 0.95912503, 0.95806287, 0.95739194,
        0.95622575, 0.9545498 , 0.95381055, 0.95318588, 0.95203675,
        0.95096276, 0.94996035, 0.94892427, 0.94740811, 0.94582933,
        0.94420572, 0.9420396 , 0.9408416 , 0.93969163, 0.93789606,
        0.93608273, 0.93413445, 0.93343312, 0.93233588, 0.93093149,
        0.93033546, 0.92983324, 0.92910616, 0.92830326, 0.92799811,
        0.92642784]),
 array([  2916.11296684,   5797.02377904,   8658.22999328,  11502.6002944 ,
         14328.44503612,  17140.72034976,  19940.48013538,  22729.69637912,
         25512.09429552,  28286.18290207,  31055.33003897,  33818.82409725,
         36577.1270353 ,  39332.49361223,  42082.0755955 ,  44822.94911057,
         47560.49941212,  50295.38504714,  53024.59880222,  55748.57526173,
         58467.72758802,  61181.8659989 ,  63888.25003765,  66586.53110019,
         69276.46332225,  71954.97102175,  74627.57217707,  77294.54406888,
         79952.23080669,  82600.54514273,  85238.73829645,  87873.86209917,
         90503.68343426,  93126.47509834,  95746.79574474,  98365.17422285,
        100980.34471949, 103591.88164688, 106202.58634768, 108805.3453693 ]),
 array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0.]))


>>>pacf(data)
array([ 1.        ,  0.98740203,  0.26463067,  0.18709112,  0.11351714,
        0.0540612 ,  0.06996315,  0.05159168,  0.05358487,  0.06867607,
        0.03915513,  0.06099868,  0.04020074,  0.0390229 ,  0.05198753,
        0.01873783, -0.00169158,  0.04387457,  0.03770717,  0.01360295,
        0.01740693,  0.01566421,  0.01409722, -0.00988412, -0.00860644,
       -0.00905181, -0.0344616 ,  0.0199406 ,  0.01123293, -0.02002155,
       -0.01415968, -0.0266674 ,  0.03583483,  0.0065682 , -0.00483241,
        0.0342638 ,  0.02353691,  0.01704061,  0.01292073,  0.03163407,
       -0.02838961])
  

Как я могу получить p and q с помощью этих функций? acf Функция возвращает только 1 массив, если для qstat установлено значение False

Ответ №1:

Выбор порядка модели ARMA (p, q) с использованием оцененных ACFS / PACFs обычно не является лучшим подходом. Это просто потому, что в случае процесса ARMA как ACF, так и PACF медленно распадаются (в абсолютном выражении) из-за увеличения задержек. Таким образом, вы не можете действительно вывести порядок задержки из него. Вместо этого они в основном используются для чистых моделей AR / MA, в которых вы наблюдаете четкое ограничение в любой из двух серий (но даже тогда это скорее графический подход).

Если вы хотите определить p и q «на лету» для модели ARMA, представляется более разумным использовать информационные критерии (например, AIC, BIC и т.д.). statsmodels Предоставляет функцию arma_order_select_ic() именно для этой цели. Итак, что вы хотите, это что-то вроде этого:

 from statsmodels.tsa.stattools import arma_order_select_ic
arma_order_select_ic(data, max_ar=4, max_ma=4, ic='bic')