Як виконати тест брейша-годфрі в 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
- Р-значення = 0,0335
Оскільки це p-значення менше 0,05, ми можемо відхилити нульову гіпотезу та зробити висновок, що існує автокореляція між залишками порядку, меншого або рівного 3.
Як боротися з автокореляцією
Якщо ви відкидаєте нульову гіпотезу та робите висновок, що в залишках присутня автокореляція, у вас є кілька варіантів виправлення цієї проблеми, якщо ви вважаєте її досить серйозною:
- Для позитивної послідовної кореляції розгляньте можливість додавання лагів залежної та/або незалежної змінної до моделі.
- Для негативної послідовної кореляції переконайтеся, що жодна з ваших змінних не має надмірної затримки .
- Для сезонної кореляції розгляньте можливість додавання сезонних фіктивних елементів до моделі.
Додаткові ресурси
Повний посібник із лінійної регресії в Python
Як виконати тест Дарбіна-Ватсона в Python
Як виконати тест Ljung-Box на Python