В регрессионном анализе гетероскедастичность относится к неравномерному разбросу остатков. В частности, это относится к случаю, когда имеет место систематическое изменение разброса невязок по диапазону измеренных значений.
Гетероскедастичность является проблемой, потому что обычная регрессия методом наименьших квадратов (OLS) предполагает, что остатки поступают из совокупности с гомоскедастичностью , что означает постоянную дисперсию. Когда в регрессионном анализе присутствует гетероскедастичность, его результатам становится трудно доверять.
Один из способов определить, присутствует ли гетероскедастичность в регрессионном анализе , — это использовать тест Бреуша-Пагана .
В этом руководстве объясняется, как выполнить тест Бреуша-Пагана в Python.
Пример: тест Бреуша-Пагана в Python
В этом примере мы будем использовать следующий набор данных, описывающий атрибуты 10 баскетболистов:
import numpy as np
import pandas as pd
#create dataset
df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86],
'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19],
'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5],
'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]})
#view dataset
df
rating points assists rebounds
0 90 25 5 11
1 85 20 7 8
2 82 14 7 10
3 88 16 8 6
4 94 27 5 6
5 90 20 7 9
6 76 12 6 6
7 75 15 9 10
8 87 14 9 10
9 86 19 5 7
Мы подгоним модель множественной линейной регрессии, используя рейтинг в качестве переменной отклика и очки, передачи и подборы в качестве объясняющих переменных. Затем мы проведем тест Бреуша-Пагана, чтобы определить, присутствует ли в регрессии гетероскедастичность.
Шаг 1: Подберите модель множественной линейной регрессии.
Во-первых, мы подгоним модель множественной линейной регрессии:
import statsmodels.formula.api as smf
#fit regression model
fit = smf.ols('rating ~ points+assists+rebounds', data=df). fit ()
#view model summary
print(fit.summary())
Шаг 2: Проведите тест Бреуша-Пагана.
Далее мы проведем тест Бреуша-Пагана, чтобы определить, присутствует ли гетероскедастичность.
from statsmodels.compat import lzip
import statsmodels.stats.api as sms
#perform Bresuch-Pagan test
names = ['Lagrange multiplier statistic', 'p-value',
'f-value', 'f p-value']
test = sms.het_breuschpagan(fit.resid, fit.model.exog)
lzip(names, test)
[('Lagrange multiplier statistic', 6.003951995818433),
('p-value', 0.11141811013399583),
('f-value', 3.004944880309618),
('f p-value', 0.11663863538255281)]
Тест Бреуша-Пагана использует следующие нулевые и альтернативные гипотезы:
Нулевая гипотеза (H 0 ): присутствует гомоскедастичность.
Альтернативная гипотеза: (Ha): гомоскедастичность отсутствует (т.е. гетероскедастичность существует)
В этом примере статистика множителя Лагранжа для теста равна 6,004 , а соответствующее значение p равно 0,1114.Поскольку это p-значение не меньше 0,05, мы не можем отвергнуть нулевую гипотезу. У нас нет достаточных доказательств того, что в регрессионной модели присутствует гетероскедастичность.
Как исправить гетероскедастичность
В предыдущем примере мы видели, что в регрессионной модели отсутствует гетероскедастичность. Однако, когда гетероскедастичность действительно присутствует, есть три распространенных способа исправить ситуацию:
1. Преобразуйте зависимую переменную. Один из способов исправить гетероскедастичность — каким-то образом преобразовать зависимую переменную. Одним из распространенных преобразований является просто получение журнала зависимой переменной.
2. Переопределите зависимую переменную. Другой способ исправить гетероскедастичность — переопределить зависимую переменную. Один из распространенных способов сделать это — использовать скорость для зависимой переменной, а не необработанное значение.
3. Используйте взвешенную регрессию. Другой способ исправить гетероскедастичность — использовать взвешенную регрессию. Этот тип регрессии присваивает вес каждой точке данных на основе дисперсии ее подобранного значения. Когда используются правильные веса, это может устранить проблему гетероскедастичности.
Подробнее о каждом из этих трех способов читайте в этом посте .