Как выполнить тест Дарбина-Ватсона в Python


Одним из допущений линейной регрессии является отсутствие корреляции между остатками. Другими словами, остатки предполагаются независимыми.

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

H 0 (нулевая гипотеза): между остатками нет корреляции.

H A (альтернативная гипотеза): остатки автокоррелированы.

Статистика теста приблизительно равна 2*(1-r), где r — выборочная автокорреляция остатков. Таким образом, тестовая статистика всегда будет между 0 и 4 со следующей интерпретацией:

  • Тестовая статистика 2 указывает на отсутствие последовательной корреляции.
  • Чем ближе статистика теста к 0 , тем больше доказательств положительной серийной корреляции.
  • Чем ближе тестовая статистика к 4 , тем больше доказательств отрицательной серийной корреляции.

Как правило, значения тестовой статистики в диапазоне от 1,5 до 2,5 считаются нормальными. Однако значения за пределами этого диапазона могут указывать на проблему с автокорреляцией.

В этом руководстве объясняется, как выполнить тест Дарбина-Ватсона в Python.

Пример: тест Дарбина-Ватсона в Python

Предположим, у нас есть следующий набор данных, описывающий атрибуты 10 баскетболистов:

import numpy as np
import pandas as pd

#create dataset
df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86],
 'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19],
 'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5],
 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]})

#view dataset
df

 rating points assists rebounds
0 90 25 5 11
1 85 20 7 8
2 82 14 7 10
3 88 16 8 6
4 94 27 5 6
5 90 20 7 9
6 76 12 6 6
7 75 15 9 10
8 87 14 9 10
9 86 19 5 7

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

from statsmodels.formula.api import ols

#fit multiple linear regression model
model = ols('rating ~ points + assists + rebounds', data=df). fit ()

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

Мы можем выполнить Durbin Watson, используя функцию durbin_watson() из библиотеки statsmodels, чтобы определить, являются ли остатки регрессионной модели автокоррелированными:

from statsmodels.stats.stattools import durbin_watson

#perform Durbin-Watson test
durbin_watson(model.resid)

2.392

Статистика теста — 2,392.Поскольку это находится в диапазоне от 1,5 до 2,5, мы считаем, что автокорреляция не вызывает проблем в этой регрессионной модели.

Как справиться с автокорреляцией

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

1. Для положительной последовательной корреляции рассмотрите возможность добавления в модель лагов зависимой и/или независимой переменной.

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

3. Для сезонной корреляции рассмотрите возможность добавления в модель сезонных фиктивных переменных.

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