Как выполнить тест дурбина-ватсона в 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())
Мы можем выполнить Watson Durbin, используя функцию 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. Для сезонной корреляции рассмотрите возможность добавления в модель сезонных переменных.