Как выполнить тест гольдфельда-квандта в python


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

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

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

В этом руководстве представлен пошаговый пример выполнения теста Гольдфельда-Квандта в Python.

Шаг 1. Создайте набор данных

В этом примере давайте создадим следующий DataFrame pandas, который будет содержать информацию об учебных часах, сданных подготовительных экзаменах и результатах выпускных экзаменов, полученных 13 учениками в классе:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' hours ': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6],
                   ' exams ': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2],
                   ' score ': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96]})

#view DataFrame
print (df)

    hours exam score
0 1 1 76
1 2 3 78
2 2 3 85
3 4 5 88
4 2 2 72
5 1 2 69
6 5 1 94
7 4 1 94
8 2 0 88
9 4 3 92
10 4 4 90
11 3 3 75
12 6 2 96

Шаг 2. Подберите модель линейной регрессии

Далее мы подберем модель множественной линейной регрессии, используя часы и экзамены в качестве предикторных переменных, а балл — в качестве переменной ответа:

 import statsmodels. api as sm

#define predictor and response variables
y = df[' score ']
x = df[[' hours ', ' exams ']]

#add constant to predictor variables
x = sm. add_constant (x)

#fit linear regression model
model = sm. OLS (y,x). fit ()

#view model summary
print ( model.summary ())

                            OLS Regression Results                            
==================================================== ============================
Dept. Variable: R-squared score: 0.718
Model: OLS Adj. R-squared: 0.661
Method: Least Squares F-statistic: 12.70
Date: Mon, 31 Oct 2022 Prob (F-statistic): 0.00180
Time: 09:22:56 Log-Likelihood: -38.618
No. Observations: 13 AIC: 83.24
Df Residuals: 10 BIC: 84.93
Model: 2                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 71.4048 4.001 17.847 0.000 62.490 80.319
hours 5.1275 1.018 5.038 0.001 2.860 7.395
exams -1.2121 1.147 -1.057 0.315 -3.768 1.344
==================================================== ============================
Omnibus: 1,103 Durbin-Watson: 1,248
Prob(Omnibus): 0.576 Jarque-Bera (JB): 0.803
Skew: -0.289 Prob(JB): 0.669
Kurtosis: 1.928 Cond. No. 11.7
==================================================== ============================

Шаг 3. Выполните тест Гольдфельда-Квандта.

Далее мы воспользуемся функцией statsmodels het_goldfeldquandt() для выполнения теста Гольдфельда-Квандта.

Примечание . Тест Гольдфельда-Квандта работает путем удаления ряда наблюдений, расположенных в центре набора данных, а затем проверки, отличается ли распределение остатков от двух результирующих наборов данных, которые связаны по обе стороны от центральных наблюдений.

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

 #perform Goldfeld-Quandt test
sm. stats . diagnosis . het_goldfeldquandt (y, x, drop= 0.2 )

(1.7574505407790355, 0.38270288684680076, 'increasing')

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

  • Статистика теста равна 1,757 .
  • Соответствующее значение p составляет 0,383 .

Тест Гольдфельда-Квандта использует следующие нулевые и альтернативные гипотезы:

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

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

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

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

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

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

Существует несколько распространенных способов решения этой проблемы, в том числе:

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

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

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

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

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

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

В следующих руководствах объясняется, как выполнять другие распространенные операции в Python:

Как выполнить регрессию OLS в Python
Как создать остаточный график в Python
Как выполнить тест Уайта на Python
Как выполнить тест Бреуша-Пэгана в Python

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

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