#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')