Hoe u een durbin-watson-test uitvoert in python
Een van de aannames van lineaire regressie is dat er geen correlatie bestaat tussen de residuen. Met andere woorden, er wordt aangenomen dat de residuen onafhankelijk zijn.
Eén manier om te bepalen of aan deze veronderstelling wordt voldaan, is door een Durbin-Watson-test uit te voeren, die wordt gebruikt om de aanwezigheid van autocorrelatie in de residuen van een regressie te detecteren. Deze test maakt gebruik van de volgende aannames:
H 0 (nulhypothese): Er is geen correlatie tussen de residuen.
HA (alternatieve hypothese): De residuen zijn autogecorreleerd.
De teststatistiek is ongeveer gelijk aan 2*(1-r), waarbij r de autocorrelatie van de residuen in het monster is. De teststatistiek zal dus altijd tussen 0 en 4 liggen, met de volgende interpretatie:
- Een teststatistiek van 2 geeft aan dat er geen seriële correlatie is.
- Hoe dichter de teststatistieken bij 0 liggen, hoe meer bewijs er is voor een positieve seriële correlatie.
- Hoe dichter de teststatistieken bij 4 liggen, hoe meer bewijs er is voor een negatieve seriële correlatie.
Doorgaans worden teststatistiekwaarden tussen 1,5 en 2,5 als normaal beschouwd. Waarden buiten dit bereik kunnen er echter op wijzen dat autocorrelatie een probleem is.
In deze tutorial wordt uitgelegd hoe u een Durbin-Watson-test in Python uitvoert.
Voorbeeld: Durbin-Watson-test in Python
Stel dat we de volgende dataset hebben die de kenmerken van 10 basketbalspelers beschrijft:
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
Stel dat we een meervoudig lineair regressiemodel passen met beoordeling als responsvariabele en de andere drie variabelen als voorspellende variabelen:
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())
We kunnen een Watson Durbin uitvoeren met behulp van de functie durbin_watson() uit de statsmodels-bibliotheek om te bepalen of de residuen van het regressiemodel autocorreleerd zijn:
from statsmodels.stats.stattools import durbin_watson #perform Durbin-Watson test durbin_watson(model.resid) 2,392
De teststatistiek is 2,392 . Omdat deze waarde tussen 1,5 en 2,5 ligt, zijn we van mening dat autocorrelatie geen probleem is in dit regressiemodel.
Hoe om te gaan met autocorrelatie
Als je de nulhypothese verwerpt en concludeert dat er autocorrelatie aanwezig is in de residuen, dan heb je verschillende opties om dit probleem te corrigeren als je het ernstig genoeg acht:
1. Overweeg voor positieve seriële correlatie het toevoegen van vertragingen van de afhankelijke en/of onafhankelijke variabele aan het model.
2. Zorg er bij negatieve seriële correlatie voor dat geen van uw variabelen te veel vertraging heeft .
3. Voor seizoenscorrelaties kunt u overwegen seizoensdummies aan het model toe te voegen.