Как выполнить тест уайта на 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