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

*

***

Одним из [допущений линейной регрессии](https://bemind.gitbook.io/neural/instrumenty-ocenki/lineinaya-logisticheskaya-i-regressiya-puassona./polnoe-rukovodstvo-po-lineinoi-regressii-v-python/chetyre-dopusheniya-lineinoi-regressii) является отсутствие корреляции между остатками. Другими словами, остатки предполагаются независимыми.

Один из способов определить, выполняется ли это предположение, — выполнить [тест Дарбина-Ватсона](https://www.codecamp.ru/blog/durbin-watson-test/) , который используется для обнаружения наличия автокорреляции в остатках [регрессии](https://www.codecamp.ru/blog/linear-regression-python/).В этом тесте используются следующие гипотезы:

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

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

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

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

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

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

#### **Пример: тест Дарбина-Ватсона в Python** <a href="#python" id="python"></a>

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

```python
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
```

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

```python
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()](https://www.statsmodels.org/stable/generated/statsmodels.stats.stattools.durbin_watson.html?ref=codecamp.ru) из библиотеки statsmodels, чтобы определить, являются ли остатки регрессионной модели автокоррелированными:

```python
from statsmodels.stats.stattools import durbin_watson

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

2.392
```

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

#### **Как справиться с автокорреляцией** <a href="#undefined" id="undefined"></a>

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

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

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

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