Ajustes robustos y ponderados en Python
RLM les baja el peso a los atípicos; WLS usa pesos que tú provees.
import numpy as np
import statsmodels.api as sm
rng = np.random.default_rng(7)
x = np.linspace(0, 20, 60)
y = 5 + 2 * x + rng.normal(0, 1, size=60)
y[:3] += 60 # tres valores atípicos extremos
X = sm.add_constant(x)
mco = sm.OLS(y, X).fit()
robusto = sm.RLM(y, X, M=sm.robust.norms.HuberT()).fit()
weights = np.where(np.arange(60) < 3, 0.05, 1.0)
ponderado = sm.WLS(y, X, weights=weights).fit()
print("mco ", mco.params.round(3))
print("robusto ", robusto.params.round(3))
print("ponderado", ponderado.params.round(3))
Cómo funciona
RLMcon pérdida de Huber resiste unos cuantos puntos malos.WLSpondera cada observación, usualmente por la varianza inversa.- Compara las pendientes para ver cuánto movieron los atípicos a OLS.
Palabras clave y builtins usados aquí
asprint
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 528
- Tokens
- 191
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 104 segundos.
Paso 2 de 2 en Diagnósticos y robustez; paso 8 de 19 en Estadística con statsmodels.