Python'da durbin-watson testi nasıl yapılır?
Doğrusal regresyonun varsayımlarından biri artıklar arasında herhangi bir korelasyonun olmamasıdır. Başka bir deyişle artıkların bağımsız olduğu varsayılmaktadır.
Bu varsayımın karşılanıp karşılanmadığını belirlemenin bir yolu, bir regresyonun artıklarında otokorelasyonun varlığını tespit etmek için kullanılan Durbin-Watson testinin yapılmasıdır. Bu test aşağıdaki varsayımları kullanır:
H 0 (sıfır hipotezi): Artıklar arasında korelasyon yoktur.
H A (alternatif hipotez): Artıklar otokorelasyonludur.
Test istatistiği yaklaşık olarak 2*(1-r)’ye eşittir; burada r, artıkların örnek otokorelasyonudur. Dolayısıyla test istatistiği aşağıdaki yorumla her zaman 0 ile 4 arasında olacaktır:
- Test istatistiğinin 2 olması seri korelasyon olmadığını gösterir.
- Test istatistikleri 0’a ne kadar yakınsa, pozitif seri korelasyonun kanıtı o kadar fazladır.
- Test istatistikleri 4’e ne kadar yakınsa, negatif seri korelasyonun kanıtı o kadar fazladır.
Tipik olarak 1,5 ile 2,5 arasındaki test istatistiği değerleri normal kabul edilir. Ancak bu aralığın dışındaki değerler otokorelasyonun sorun olduğunu gösterebilir.
Bu eğitimde Python’da Durbin-Watson testinin nasıl gerçekleştirileceği açıklanmaktadır.
Örnek: Python’da Durbin-Watson testi
10 basketbolcunun özelliklerini açıklayan aşağıdaki veri setine sahip olduğumuzu varsayalım:
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
Yanıt değişkeni olarak derecelendirmeyi ve yordayıcı değişkenler olarak diğer üç değişkeni kullanarak çoklu doğrusal regresyon modeline uyduğumuzu varsayalım:
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())
Regresyon modeli artıklarının otomatik olarak ilişkilendirilip ilişkilendirilmediğini belirlemek için statsmodels kitaplığından durbin_watson() işlevini kullanarak bir Watson Durbin gerçekleştirebiliriz:
from statsmodels.stats.stattools import durbin_watson #perform Durbin-Watson test durbin_watson(model.resid) 2,392
Test istatistiği 2,392’dir . Bu değer 1,5 ile 2,5 arasında olduğundan bu regresyon modelinde otokorelasyonun sorun olmadığını düşünüyoruz.
Otokorelasyonla nasıl başa çıkılır?
Sıfır hipotezini reddederseniz ve artıklarda otokorelasyonun mevcut olduğu sonucuna varırsanız, yeterince ciddi olduğunu düşünüyorsanız bu sorunu düzeltmek için birkaç seçeneğiniz vardır:
1. Pozitif seri korelasyon için bağımlı ve/veya bağımsız değişkenin gecikmelerini modele eklemeyi düşünün.
2. Negatif seri korelasyon için değişkenlerinizden hiçbirinin aşırı gecikmediğinden emin olun.
3. Mevsimsel korelasyon için modele mevsimsel kukla değişkenler eklemeyi düşünün.