typestar

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

  1. RLM con pérdida de Huber resiste unos cuantos puntos malos.
  2. WLS pondera cada observación, usualmente por la varianza inversa.
  3. Compara las pendientes para ver cuánto movieron los atípicos a OLS.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 2 en Diagnósticos y robustez; paso 8 de 19 en Estadística con statsmodels.

← Anterior Siguiente →