Как выполнить тест люнга-бокса в python
Тест Люнга-Бокса — это статистический тест, который проверяет наличие автокорреляции во временном ряду.
Он использует следующие предположения:
H 0 : Остатки распределяются независимо.
H A : Остатки не распределяются независимо; они демонстрируют серийную корреляцию.
В идеале нам хотелось бы не отвергать нулевую гипотезу. То есть мы хотели бы, чтобы значение p теста было больше 0,05, потому что это означает, что остатки нашей модели временных рядов независимы, что часто является предположением, которое мы делаем при создании модели.
В этом руководстве объясняется, как выполнить тест Люнга-Бокса в Python.
Пример: тест Люнга-Бокса на Python
Чтобы выполнить тест Люнга-Бокса для ряда данных в Python, вы можете использовать функцию acorr_ljungbox() из библиотеки statsmodels , которая использует следующий синтаксис:
acorr_ljungbox (x, смещения = нет)
Золото:
- x: ряд данных
- lags: количество лагов для тестирования.
Эта функция возвращает тестовую статистику и соответствующее значение p. Если значение p ниже определенного порога (например, α = 0,05), вы можете отвергнуть нулевую гипотезу и сделать вывод, что остатки не распределяются независимо.
Следующий код показывает, как использовать эту функцию для выполнения теста Люнга-Бокса для встроенного набора данных statsmodels под названием «SUNACTIVITY»:
import statsmodels.api as sm #load data series data = sm.datasets.sunspots.load_pandas().data #view first ten rows of data series data[:5] YEAR SUNACTIVITY 0 1700.0 5.0 1 1701.0 11.0 2 1702.0 16.0 3 1703.0 23.0 4 1704.0 36.0 #fit ARMA model to dataset res = sm. tsa . ARMA (data[" SUNACTIVITY "],(1,1)). fit (disp=-1) #perform Ljung-Box test on residuals with lag=5 sm. stats . acorr_ljungbox (res. resid , lags=[5], return_df= True ) lb_stat lb_pvalue 5 107.86488 1.157710e-21
Статистика теста равна 107,86488 , а значение p теста составляет 1,157710e-21 , что намного меньше 0,05. Таким образом, мы отвергаем нулевую гипотезу теста и приходим к выводу, что остатки не являются независимыми.
Обратите внимание, что в этом примере мы решили использовать значение смещения 5, но вы можете выбрать любое значение, которое хотите использовать для смещения. Например, вместо этого мы могли бы использовать значение 20:
#perform Ljung-Box test on residuals with lag=20 sm. stats . acorr_ljungbox (res. resid , lags=[20], return_df= True ) lb_stat lb_pvalue 20 343.634016 9.117477e-61
Статистика теста составляет 343,634016 , а значение p теста составляет 9,117477e-61 , что намного меньше 0,05. Таким образом, мы еще раз отвергаем нулевую гипотезу теста и приходим к выводу, что остатки не являются независимыми.
В зависимости от вашей конкретной ситуации вы можете выбрать более низкое или большее значение для смещения.