Jak wykonać test durbina-watsona w pythonie


Jednym z założeń regresji liniowej jest brak korelacji pomiędzy resztami. Inaczej mówiąc, zakłada się, że reszty są niezależne.

Jednym ze sposobów sprawdzenia, czy założenie to jest spełnione, jest wykonanie testu Durbina-Watsona , który służy do wykrycia obecności autokorelacji w resztach regresji . W tym teście przyjęto następujące założenia:

H 0 (hipoteza zerowa): Nie ma korelacji pomiędzy resztami.

H A (hipoteza alternatywna): Reszty są autokorelowane.

Statystyka testowa jest w przybliżeniu równa 2*(1-r), gdzie r jest autokorelacją reszt próbki. Zatem statystyka testowa będzie zawsze wynosić od 0 do 4 z następującą interpretacją:

  • Statystyka testowa wynosząca 2 wskazuje na brak korelacji szeregowej.
  • Im statystyki testu są bliższe 0 , tym więcej jest dowodów na dodatnią korelację szeregową.
  • Im statystyki testu są bliższe 4 , tym więcej jest dowodów na ujemną korelację szeregową.

Zazwyczaj wartości statystyk testowych pomiędzy 1,5 a 2,5 są uważane za normalne. Jednak wartości spoza tego zakresu mogą wskazywać, że problemem jest autokorelacja.

W tym samouczku wyjaśniono, jak wykonać test Durbina-Watsona w języku Python.

Przykład: test Durbina-Watsona w Pythonie

Załóżmy, że mamy następujący zbiór danych opisujący atrybuty 10 koszykarzy:

 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

Załóżmy, że dopasowujemy model regresji liniowej, wykorzystując ocenę jako zmienną odpowiedzi i pozostałe trzy zmienne jako zmienne predykcyjne:

 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())

Możemy wykonać Watson Durbin za pomocą funkcji durbin_watson() z biblioteki statsmodels, aby określić, czy reszty modelu regresji są autokorelowane:

 from statsmodels.stats.stattools import durbin_watson

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

2,392

Statystyka testowa wynosi 2,392 . Ponieważ wartość ta mieści się w przedziale od 1,5 do 2,5, uważamy, że autokorelacja nie stanowi problemu w tym modelu regresji.

Jak sobie radzić z autokorelacją

Jeśli odrzucisz hipotezę zerową i dojdziesz do wniosku, że w resztach występuje autokorelacja, masz kilka możliwości rozwiązania tego problemu, jeśli uznasz go za wystarczająco poważny:

1. Aby uzyskać dodatnią korelację szeregową, należy rozważyć dodanie do modelu opóźnień zmiennej zależnej i/lub niezależnej.

2. W przypadku ujemnej korelacji szeregowej upewnij się, że żadna ze zmiennych nie jest nadmiernie opóźniona .

3. Aby uzyskać korelację sezonową, rozważ dodanie do modelu manekinów sezonowych.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *