Diagnóstico de residuos en Python
Las pruebas que dicen si los supuestos de OLS de verdad se cumplieron.
import numpy as np
import statsmodels.api as sm
from statsmodels.stats.diagnostic import het_breuschpagan
from statsmodels.stats.stattools import durbin_watson, jarque_bera
rng = np.random.default_rng(6)
x = np.linspace(1, 50, 200)
y = 3 + 0.5 * x + rng.normal(0, x / 10) # la varianza crece con x
X = sm.add_constant(x)
modelo = sm.OLS(y, X).fit()
estadistico, p, _, _ = het_breuschpagan(modelo.resid, X)
print(round(estadistico, 3), f"{p:.2e}", "heterocedástico" if p < 0.05
else "varianza constante")
print(round(durbin_watson(modelo.resid), 3))
print(round(jarque_bera(modelo.resid)[1], 4))
print(round(modelo.get_robustcov_results("HC3").bse[1], 5))
Cómo funciona
het_breuschpaganprueba si la varianza cambia.durbin_watsoncerca de 2 significa sin autocorrelación.jarque_beraprueba la normalidad de los residuos.
Palabras clave y builtins usados aquí
aselseifprintround
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 658
- Tokens
- 189
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 103 segundos.
Paso 1 de 2 en Diagnósticos y robustez; paso 7 de 19 en Estadística con statsmodels.