Как выполнить тест Уайта в Python (шаг за шагом)


Тест Уайта используется для определения наличия гетероскедастичности в регрессионной модели.

Гетероскедастичность относится к неравному разбросу остатков на разных уровнях переменной отклика , что нарушает предположение о том, что остатки одинаково разбросаны на каждом уровне переменной отклика.

В следующем пошаговом примере показано, как выполнить тест Уайта в 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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.