Как выполнить тест Ljung-Box в Python


Тест Льюнга-Бокса — это статистический тест, который проверяет наличие автокорреляции во временном ряду.

Он использует следующие гипотезы:

H 0 : Остатки распределяются независимо.

H A : остатки не распределяются независимо; они демонстрируют серийную корреляцию.

В идеале мы хотели бы не отвергнуть нулевую гипотезу. То есть мы хотели бы, чтобы p-значение теста было больше 0,05, потому что это означает, что остатки для нашей модели временных рядов независимы, что часто является предположением, которое мы делаем при создании модели.

В этом руководстве объясняется, как выполнить тест Ljung-Box в Python.

Пример: тест Льюнга-Бокса в Python

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

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