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


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

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

В следующем пошаговом примере показано, как выполнить тест Уайта в Python, чтобы определить, является ли гетероскедастичность проблемой в данной регрессионной модели.

Шаг 1. Загрузите данные

В этом примере мы подберем модель множественной линейной регрессии , используя набор данных mtcars .

Следующий код показывает, как загрузить этот набор данных в DataFrame 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/Statorials/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. Подберите регрессионную модель

Далее мы подберем регрессионную модель, используя миль на галлон в качестве переменной отклика и 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}

Вот как интерпретировать результат:

  • Статистика теста: X2 = 7,0766 .
  • Соответствующее значение p составляет 0,215 .

Тест Уайта использует следующие нулевые и альтернативные гипотезы:

  • Нуль (H 0 ) : присутствует гомоскедастичность (остатки также разбросаны)
  • Альтернатива ( HA ): присутствует гетероскедастичность (остатки неравномерно распределены)

Поскольку значение p не меньше 0,05, мы не можем отвергнуть нулевую гипотезу.

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

Что делать дальше

Если вам не удастся отвергнуть нулевую гипотезу теста Уайта, то гетероскедастичности нет и вы можете приступить к интерпретации результата исходной регрессии.

Однако если вы отвергнете нулевую гипотезу, это означает, что существует гетероскедастичность. В этом случае стандартные ошибки, отображаемые в выходной таблице регрессии, могут быть недостоверными.

Есть два распространенных способа решения этой проблемы:

1. Преобразуйте переменную ответа.

Вы можете попробовать выполнить преобразование переменной ответа, например, взяв логарифмический, квадратный или кубический корень из переменной ответа. Зачастую это приводит к исчезновению гетероскедастичности.

2. Используйте взвешенную регрессию.

Взвешенная регрессия присваивает вес каждой точке данных на основе дисперсии ее подобранного значения. По сути, это придает низкий вес точкам данных с более высокими дисперсиями, уменьшая их остаточные квадраты. Использование соответствующих весов может устранить проблему гетероскедастичности.

Дополнительные ресурсы

Следующие руководства предоставляют дополнительную информацию о линейной регрессии в Python:

Полное руководство по линейной регрессии в Python
Как создать остаточный график в Python
Как рассчитать VIF в Python

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *