Как выполнить тест люнга-бокса в 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. Таким образом, мы еще раз отвергаем нулевую гипотезу теста и приходим к выводу, что остатки не являются независимыми.

В зависимости от вашей конкретной ситуации вы можете выбрать более низкое или большее значение для смещения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *