Как выполнить тест Бреуша-Годфри в Python


Одно из ключевых допущений линейной регрессии состоит в том, что между остатками нет корреляции, т. е. остатки независимы.

Чтобы проверить автокорреляцию первого порядка, мы можем выполнить тест Дарбина-Ватсона.Однако, если мы хотим проверить автокорреляцию в более высоких порядках, нам нужно выполнить тест Бреуша-Годфри .

В этом тесте используются следующие гипотезы :

H 0 (нулевая гипотеза): нет автокорреляции в любом порядке, меньшем или равном p .

H A (альтернативная гипотеза): существует автокорреляция в некотором порядке меньшем или равном p .

Статистика теста соответствует распределению хи-квадрат с p степенями свободы.

Если значение p , соответствующее этой тестовой статистике, меньше определенного уровня значимости (например, 0,05), то мы можем отклонить нулевую гипотезу и сделать вывод, что существует автокорреляция между остатками в некотором порядке, меньшем или равном p .

Чтобы выполнить тест Бреуша-Годфри в Python, мы можем использовать функцию acorr_breusch_godfrey() из библиотеки statsmodels .

В следующем пошаговом примере объясняется, как выполнить тест Бреуша-Годфри в Python.

Шаг 1: Создайте данные

Во-первых, давайте создадим набор данных, содержащий две переменные-предикторы (x1 и x2) и одну переменную ответа (y).

import pandas as pd 

#create dataset
df = pd.DataFrame({'x1': [3, 4, 4, 5, 8, 9, 11, 13, 14, 16, 17, 20],
 'x2': [7, 7, 8, 8, 12, 4, 5, 15, 9, 17, 19, 19],
 'y': [24, 25, 25, 27, 29, 31, 34, 34, 39, 30, 40, 49]})

#view first five rows of dataset
df.head ()

 x1 x2 y
0 3 7 24
1 4 7 25
2 4 8 25
3 5 8 27
4 8 12 29

Шаг 2: Подгонка регрессионной модели

Затем мы можем подобрать модель множественной линейной регрессии, используя x1 и x2 в качестве переменных-предикторов и y в качестве переменной отклика .

import statsmodels.api as sm

#define response variable
y = df['y']

#define predictor variables
x = df[['x1', 'x2']]

#add constant to predictor variables
x = sm.add_constant (x)

#fit linear regression model
model = sm. OLS (y, x). fit ()

Шаг 3. Проведите тест Бреуша-Годфри.

Затем мы выполним тест Бреуша-Годфри, чтобы проверить автокорреляцию между остатками в порядке p.Для этого примера мы выберем p = 3.

import statsmodels. stats.diagnostic as dg

#perform Breusch-Godfrey test at order *p* = 3
print(dg. acorr_breusch_godfrey (model, nlags= 3 ))

(8.70314827, 0.0335094873, 5.27967224, 0.0403980576)

Первое значение в выходных данных представляет статистику теста, а второе значение представляет соответствующее p-значение.

Из вывода мы видим следующее:

  • Статистика теста X 2 = 8,7031
  • P-значение = 0,0335

Поскольку это p-значение меньше 0,05, мы можем отклонить нулевую гипотезу и сделать вывод, что существует автокорреляция между остатками в некотором порядке, меньшем или равном 3.

Как справиться с автокорреляцией

Если вы отвергаете нулевую гипотезу и заключаете, что в остатках присутствует автокорреляция, то у вас есть несколько различных вариантов исправления этой проблемы, если вы считаете ее достаточно серьезной:

  • Для положительной последовательной корреляции рассмотрите возможность добавления в модель лагов зависимой и/или независимой переменной.
  • Для отрицательной последовательной корреляции убедитесь, что ни одна из ваших переменных не является сверхдифференциальной .
  • Для сезонной корреляции рассмотрите возможность добавления в модель сезонных фиктивных переменных.

Дополнительные ресурсы

Полное руководство по линейной регрессии в Python
Как выполнить тест Дарбина-Ватсона в Python
Как выполнить тест Ljung-Box в Python

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