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