Тест Уайта используется для определения наличия гетероскедастичности в регрессионной модели.
Гетероскедастичность относится к неравному разбросу остатков на разных уровнях переменной отклика , что нарушает предположение о том, что остатки одинаково разбросаны на каждом уровне переменной отклика.
В следующем пошаговом примере показано, как выполнить тест Уайта в Python, чтобы определить, является ли гетероскедастичность проблемой в данной регрессионной модели.
Шаг 1: Загрузите данные
В этом примере мы подберем модель множественной линейной регрессии, используя набор данных mtcars .
В следующем коде показано, как загрузить этот набор данных в кадр данных pandas:
from sklearn. linear_model import LinearRegression
from statsmodels. stats.diagnostic import het_white
import statsmodels.api as sm
import pandas as pd
#define URL where dataset is located
url = "https://raw.githubusercontent.com/Statology/Python-Guides/main/mtcars.csv"
#read in data
data = pd.read_csv (url)
#view summary of data
data. info ()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32 entries, 0 to 31
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 model 32 non-null object
1 mpg 32 non-null float64
2 cyl 32 non-null int64
3 disp 32 non-null float64
4 hp 32 non-null int64
5 drat 32 non-null float64
6 wt 32 non-null float64
7 qsec 32 non-null float64
8 vs 32 non-null int64
9 am 32 non-null int64
10 gear 32 non-null int64
11 carb 32 non-null int64
dtypes: float64(5), int64(6), object(1)
Шаг 2: подгонка регрессионной модели
Далее мы подгоним регрессионную модель, используя mpg в качестве переменной отклика и disp и hp в качестве двух переменных-предикторов:
#define response variable
y = data['mpg']
#define predictor variables
x = data[['disp', 'hp']]
#add constant to predictor variables
x = sm.add_constant (x)
#fit regression model
model = sm. OLS (y, x). fit ()
Шаг 3: Проведите тест Уайта
Далее мы будем использовать функцию het_white() из пакета statsmodels для выполнения теста Уайта, чтобы определить, присутствует ли гетероскедастичность в регрессионной модели:
#perform White's test
white_test = het_white(model. resid , model. model.exog )
#define labels to use for output of White's test
labels = ['Test Statistic', 'Test Statistic p-value', 'F-Statistic', 'F-Test p-value']
#print results of White's test
print(dict(zip(labels, white_test)))
{'Test Statistic': 7.076620330416624, 'Test Statistic p-value': 0.21500404394263936,
'F-Statistic': 1.4764621093131864, 'F-Test p-value': 0.23147065943879694}
Вот как интерпретировать вывод:
- Тестовая статистика X 2 = 7,0766 .
- Соответствующее значение p равно 0,215 .
В тесте Уайта используются следующие нулевая и альтернативная гипотезы:
- Null (H 0 ) : присутствует гомоскедастичность (остатки равномерно разбросаны)
- Альтернатива ( HA ): присутствует гетероскедастичность (остатки разбросаны неравномерно)
Поскольку p-значение не меньше 0,05, мы не можем отвергнуть нулевую гипотезу.
Это означает, что у нас нет достаточных доказательств того, что в регрессионной модели присутствует гетероскедастичность.
Что делать дальше
Если вы не можете отвергнуть нулевую гипотезу теста Уайта, то гетероскедастичность отсутствует, и вы можете приступить к интерпретации результатов исходной регрессии.
Однако если вы отвергаете нулевую гипотезу, это означает, что гетероскедастичность присутствует. В этом случае стандартные ошибки, показанные в выходной таблице регрессии, могут быть ненадежными.
Есть два распространенных способа решить эту проблему:
1. Преобразуйте переменную ответа.
Вы можете попробовать выполнить преобразование переменной ответа, например, взять логарифм, квадратный корень или кубический корень из переменной ответа. Это часто приводит к исчезновению гетероскедастичности.
2. Используйте взвешенную регрессию.
Взвешенная регрессия присваивает вес каждой точке данных на основе дисперсии ее подобранного значения. По сути, это дает небольшие веса точкам данных с более высокой дисперсией, что уменьшает их квадраты невязок. Когда используются правильные веса, это может устранить проблему гетероскедастичности.
Дополнительные ресурсы
Следующие руководства предоставляют дополнительную информацию о линейной регрессии в Python:
Полное руководство по линейной регрессии в Python
Как создать остаточный график в Python
Как рассчитать VIF в Python