Como realizar um teste breusch-pagan em python
Na análise de regressão, a heterocedasticidade refere-se à dispersão desigual dos resíduos. Mais precisamente, este é o caso quando existe uma mudança sistemática na distribuição dos resíduos ao longo do intervalo de valores medidos.
A heterocedasticidade é um problema porque a regressão de mínimos quadrados ordinários (OLS) assume que os resíduos vêm de uma população que possui homocedasticidade , ou seja, variância constante.
Quando a heterocedasticidade está presente em uma análise de regressão, os resultados da análise tornam-se difíceis de acreditar.
Uma maneira de determinar se a heterocedasticidade está presente em uma análise de regressão é usar um teste de Breusch-Pagan .
Este tutorial explica como realizar um teste Breusch-Pagan em Python.
Exemplo: teste Breusch-Pagan em Python
Para este exemplo, usaremos 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
Ajustaremos um modelo de regressão linear múltipla usando pontuação como variável de resposta e pontos, assistências e rebotes como variáveis explicativas. A seguir, realizaremos um teste de Breusch-Pagan para determinar se a heterocedasticidade está presente na regressão.
Etapa 1: ajuste um modelo de regressão linear múltipla.
Primeiro, ajustaremos um modelo de regressão linear múltipla:
import statsmodels.formula.api as smf #fit regression model fit = smf.ols('rating ~ points+assists+rebounds', data=df). fit () #view model summary print (fit.summary())
Etapa 2: execute um teste de Breusch-Pagan.
A seguir, realizaremos um teste de Breusch-Pagan para determinar se a heterocedasticidade está presente.
from statsmodels.compat import lzip import statsmodels.stats.api as sms #perform Bresuch-Pagan test names = ['Lagrange multiplier statistic', 'p-value', 'f-value', 'f p-value'] test = sms.het_breuschpagan(fit.resid, fit.model.exog) lzip(names, test) [('Lagrange multiply statistic', 6.003951995818433), ('p-value', 0.11141811013399583), ('f-value', 3.004944880309618), ('f p-value', 0.11663863538255281)]
Um teste de Breusch-Pagan usa as seguintes hipóteses nulas e alternativas:
A hipótese nula (H 0 ): A homocedasticidade está presente.
A hipótese alternativa: (Ha): a homocedasticidade não está presente (ou seja, existe heterocedasticidade)
Neste exemplo, a estatística do multiplicador de Lagrange para o teste é 6,004 e o valor p correspondente é 0,1114 . Como este valor p não é inferior a 0,05, não rejeitamos a hipótese nula. Não temos evidências suficientes para afirmar que a heterocedasticidade está presente no modelo de regressão.
Como corrigir a heterocedasticidade
No exemplo anterior, vimos que a heterocedasticidade não estava presente no modelo de regressão.
No entanto, quando a heterocedasticidade está de facto presente, existem três formas comuns de remediar a situação:
1. Transforme a variável dependente. Uma maneira de corrigir a heterocedasticidade é transformar a variável dependente de alguma forma. Uma transformação comum é simplesmente obter o logaritmo da variável dependente.
2. Redefina a variável dependente. Outra forma de corrigir a heterocedasticidade é redefinir a variável dependente. Uma forma comum de fazer isso é usar uma taxa para a variável dependente, em vez do valor bruto.
3. Use regressão ponderada. Outra forma de corrigir a heterocedasticidade é usar regressão ponderada. Este tipo de regressão atribui um peso a cada ponto de dados com base na variância do seu valor ajustado. Quando os pesos apropriados são usados, isso pode eliminar o problema da heterocedasticidade.
Leia mais detalhes sobre cada um desses três métodos neste artigo .