Como realizar um teste durbin-watson em python
Uma das premissas da regressão linear é que não há correlação entre os resíduos. Em outras palavras, os resíduos são considerados independentes.
Uma forma de determinar se esta suposição é atendida é realizar um teste de Durbin-Watson , que é usado para detectar a presença de autocorrelação nos resíduos de uma regressão . Este teste usa as seguintes suposições:
H 0 (hipótese nula): Não há correlação entre os resíduos.
H A (hipótese alternativa): Os resíduos são autocorrelacionados.
A estatística de teste é aproximadamente igual a 2*(1-r) onde r é a autocorrelação amostral dos resíduos. Assim, a estatística do teste estará sempre entre 0 e 4 com a seguinte interpretação:
- Uma estatística de teste de 2 indica que não há correlação serial.
- Quanto mais próximas as estatísticas do teste estiverem de 0 , mais evidências haverá de uma correlação serial positiva.
- Quanto mais próximas as estatísticas do teste estiverem de 4 , mais evidências haverá de uma correlação serial negativa.
Normalmente, valores estatísticos de teste entre 1,5 e 2,5 são considerados normais. Entretanto, valores fora dessa faixa podem indicar que a autocorrelação é um problema.
Este tutorial explica como realizar um teste Durbin-Watson em Python.
Exemplo: teste Durbin-Watson em Python
Suponha que temos o seguinte conjunto de dados que descreve os atributos de 10 jogadores de basquete:
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
Suponha que ajustemos um modelo de regressão linear múltipla usando classificação como variável de resposta e as outras três variáveis como variáveis preditoras:
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())
Podemos realizar um Watson Durbin usando a função durbin_watson() da biblioteca statsmodels para determinar se os resíduos do modelo de regressão são autocorrelacionados:
from statsmodels.stats.stattools import durbin_watson #perform Durbin-Watson test durbin_watson(model.resid) 2,392
A estatística de teste é 2.392 . Como este valor está entre 1,5 e 2,5, consideramos que a autocorrelação não é um problema neste modelo de regressão.
Como lidar com a autocorrelação
Se você rejeitar a hipótese nula e concluir que a autocorrelação está presente nos resíduos, você terá várias opções para corrigir esse problema se considerá-lo suficientemente sério:
1. Para correlação serial positiva, considere adicionar defasagens da variável dependente e/ou independente ao modelo.
2. Para correlação serial negativa, certifique-se de que nenhuma de suas variáveis esteja atrasada demais .
3. Para correlação sazonal, considere adicionar dummies sazonais ao modelo.