Тест Льюнга-Бокса — это статистический тест, который проверяет наличие автокорреляции во временном ряду.
Он использует следующие гипотезы:
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. Таким образом, мы еще раз отвергаем нулевую гипотезу теста и заключаем, что остатки не являются независимыми.
В зависимости от конкретной ситуации вы можете выбрать более низкое или более высокое значение задержки.