Как выполнить тест бреуша-годфри в 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 . diagnosis 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
Как выполнить тест Люнга-Бокса в Python

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

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