# metodos-de-econometria-aplicada-con-python
Métodos de Econometría Aplicada con Python
Volver a la portada del cursoAnálisis de Resultados de la Regresión
Sección 3 · Modelos de Regresión Lineal
Análisis de resultados de la regresión
Estimar una regresión toma una línea; decidir si sus resultados son creíbles toma el resto del trabajo. En este notebook lees el summary() del mejor modelo de MCO de Café Altura (datos simulados), contrastas hipótesis, corriges los errores estándar y diagnosticas los residuos. Esta guía acompaña al notebook regresion-elasticidad y te dice qué hace cada sección y qué cifra debes ver.
1. Los tres modelos, otra vez
El notebook reestima M1, M2 y M3 con las fórmulas del curso y arma una tabla comparativa. La elasticidad pasa de +0.236 a +0.286 y luego a −0.446; el $R^2$, de 0.011 a 0.128 y a 0.459. El resto del notebook trabaja con M3, el único con signo creíble.
2. Leer el summary() línea por línea
En la fila de log_precio de M3 debes ver:
- coef −0.4462: la elasticidad estimada.
- std err 0.032: la precisión de esa estimación (con el supuesto clásico).
- t −13.954 y P>|t| 0.000: contraste de que el coeficiente vale cero.
- [0.025 0.975] = [−0.509, −0.384]: el intervalo de confianza al 95 %.
En el encabezado: $R^2$ 0.459, $R^2$ ajustado 0.457, estadístico F 270.1 con n = 4160. Las otras filas también se leen: promo 0.1277 (+13.6 % de ventas), temperatura −0.0182 por grado (+5 °C equivale a −8.7 %), np.log1p(publicidad_miles) 0.0827 e ingreso_zona 0.0380. Las dummies de ciudad se miden contra CDMX, la categoría base: Monterrey +0.1671, Guadalajara −0.1248.
3. Contrastar una hipótesis económica
Que la elasticidad sea distinta de cero es poco interesante. La pregunta útil es si la demanda es elástica ($|e| > 1$) o inelástica. El notebook contrasta $H_0: e = -1$:
print(m3.t_test("log_precio = -1"))
El estadístico es t = 17.3: se rechaza con holgura. Según M3, la demanda sería inelástica (−0.446), y una empresa con demanda inelástica siempre gana subiendo precios. Guarda esa conclusión con sospecha: depende de que M3 no tenga sesgo, y en la sección de datos panel verás que sí lo tiene.
4. Errores estándar robustos y por cluster
Los errores estándar clásicos suponen homocedasticidad e independencia. El notebook reestima M3 con dos alternativas:
f3 = m3.model.formula
rob = smf.ols(f3, data=df).fit(cov_type="HC1")
grupos = df["tienda"].astype("category").cat.codes
clu = smf.ols(f3, data=df).fit(cov_type="cluster",
cov_kwds={"groups": grupos})
for m in (m3, rob, clu):
print(round(m.bse["log_precio"], 3))
Resultado: clásico 0.032, robusto HC1 0.030, por cluster de tienda 0.159. El coeficiente no cambia; cambia su incertidumbre. Con cluster el error es cinco veces mayor porque las 104 semanas de una tienda no son 104 datos independientes: comparten todo lo que la tienda tiene de particular. Con 40 tiendas, la información real se parece más a 40 unidades que a 4160 filas.
5. Heterocedasticidad: Breusch-Pagan
het_breuschpagan regresa los residuos al cuadrado sobre las variables explicativas. La hipótesis nula es homocedasticidad. Debes obtener LM 166.0 con p ≈ 1e-28: se rechaza. En los datos, la dispersión es mayor en semanas con promoción y en Mérida y Tijuana. Por eso conviene reportar como mínimo errores HC1, y en un panel, errores por cluster.
6. Autocorrelación: Durbin-Watson
El estadístico de Durbin-Watson va de 0 a 4 y vale cerca de 2 si los residuos consecutivos no están correlacionados. M3 da 0.508: fuerte autocorrelación positiva. Como las filas están ordenadas por tienda y semana, eso significa que una tienda que vende más de lo que predice el modelo una semana tiende a hacerlo también la siguiente. Es la huella de lo que M3 no captura de cada tienda.
7. Multicolinealidad: VIF
El factor de inflación de varianza (VIF) mide cuánto se infla la varianza de un coeficiente por su correlación con las demás variables. La regla práctica de la documentación de statsmodels es preocuparse por encima de 5. Aquí todos son menores a 1.6: log_precio 1.442, competidores 1.557, ingreso_zona 1.351. El problema de M3 no es la multicolinealidad.
8. Normalidad de los residuos y comparación por AIC
Jarque-Bera da 12.21 con p 0.002 (asimetría 0.074, curtosis 2.78). Con 4160 filas, cualquier desviación mínima rechaza la normalidad; el histograma y el gráfico Q-Q del notebook muestran que la forma es casi normal. Con muestras grandes, la inferencia no depende de este supuesto.
Para comparar modelos sobre la misma $y$, el AIC (menor es mejor) da M1 364.0, M2 −152.4 y M3 −2118.4. M3 ajusta mucho mejor, pero un mejor ajuste no garantiza un coeficiente insesgado.
Qué debes obtener
Tu tabla final de M3: elasticidad −0.446 [−0.509, −0.384]; errores 0.032 / 0.030 / 0.159; t contra −1 de 17.3; Breusch-Pagan 166.0; Durbin-Watson 0.508; VIF menores a 1.6; AIC −2118.4. Los diagnósticos apuntan en la misma dirección: residuos correlacionados dentro de cada tienda y un componente de tienda sin modelar. Ese es el punto de partida de los efectos fijos. Como práctica, agrega metros2 a M3 y comprueba cuánto cambia la elasticidad.