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