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

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.