Saltar al contenido

# metodos-de-econometria-aplicada-con-python

Métodos de Econometría Aplicada con Python

Volver a la portada del curso
Lectura (Markdown)

Introducción a la Regresión Lineal

Sección 3 · Modelos de Regresión Lineal

Introducción a la regresión lineal

La dirección de Café Altura quiere un número: cuánto caen las ventas si sube el precio. La regresión lineal es la herramienta básica para obtenerlo, pero también la más fácil de usar mal. En esta lección ves qué estima, cómo se interpretan sus coeficientes según la forma funcional y por qué, con estos datos simulados, la primera regresión que se te ocurre da la respuesta con el signo equivocado.

1. El modelo y lo que estima MCO

La regresión simple supone que la variable de interés $y$ depende linealmente de $x$ más un término de error $u$ que agrupa todo lo demás:

$$y_i = \beta_0 + \beta_1 x_i + u_i$$

Mínimos cuadrados ordinarios (MCO, u OLS en inglés) elige $\hat\beta_0$ y $\hat\beta_1$ para minimizar la suma de residuos al cuadrado, $\sum_i (y_i - \hat\beta_0 - \hat\beta_1 x_i)^2$. Con varias variables explicativas la idea es la misma: cada coeficiente mide el cambio en $y$ por unidad de su variable manteniendo fijas las demás incluidas en el modelo.

2. Los supuestos que importan

  • Exogeneidad: $E[u \mid x] = 0$. Lo que quedó en el error no está relacionado con $x$. Si se viola, $\hat\beta_1$ está sesgado y ninguna cantidad de datos lo corrige.
  • Homocedasticidad: la varianza de $u$ no depende de $x$. Si falla, los coeficientes siguen siendo válidos, pero los errores estándar clásicos no.
  • Independencia: los errores de observaciones distintas no están correlacionados. En un panel, las semanas de una misma tienda casi nunca lo cumplen.

El primer supuesto afecta a la estimación; los otros dos, a la inferencia (errores estándar, intervalos, valores p). Los diagnósticos los verás en el notebook de la lección 616.

3. Interpretar según la forma funcional

El mismo dato se puede modelar en niveles o en logaritmos, y cada forma cambia la lectura del coeficiente:

  • Nivel-nivel: ventas ~ precio. El coeficiente es tazas por peso. En Café Altura da +18.25 tazas por cada peso más de precio.
  • Log-log: log_ventas ~ log_precio. El coeficiente es una elasticidad: el cambio porcentual de $y$ por cada 1 % de cambio en $x$.
  • Log-nivel: log_ventas ~ promo. El coeficiente es una semielasticidad; para una variable 0/1 el efecto exacto es $100\,(e^{\beta}-1)$ %. Con $\beta = 0.1277$, la promoción aumenta las ventas 13.6 %.

4. Tres regresiones, tres respuestas

Con statsmodels y fórmulas, los tres modelos del curso caben en pocas líneas:

import numpy as np
import statsmodels.formula.api as smf

df = generar_panel()
semanal = "promo + temperatura + np.log1p(publicidad_miles)"
tienda = "ingreso_zona + competidores + C(ciudad)"
m1 = smf.ols("log_ventas ~ log_precio", data=df).fit()
m2 = smf.ols(f"log_ventas ~ log_precio + {semanal}", data=df).fit()
m3 = smf.ols(f"log_ventas ~ log_precio + {semanal} + {tienda}",
             data=df).fit()
for m in (m1, m2, m3):
    print(round(m.params["log_precio"], 3), round(m.rsquared, 3))
ModeloElasticidad$R^2$
M1: solo precio+0.2360.011
M2: + promo, temperatura, publicidad+0.2860.128
M3: + ingreso de la zona, competidores, ciudad−0.4460.459

M1 dice que subir el precio 1 % aumenta las ventas 0.236 %. M2 agrega variables que cambian semana a semana y el signo sigue positivo. Solo M3, que controla por características de la tienda, invierte el signo: −0.446, con intervalo de confianza al 95 % de [−0.509, −0.384]. Según M3, subir el precio 10 % reduce las tazas alrededor de 4.2 %.

5. Sesgo por variable omitida

¿Qué pasó entre M1 y M3? Supón que el modelo verdadero incluye la calidad de la ubicación $z$:

$$\log v = \beta_0 + \beta_1 \log p + \beta_2 z + u$$

Si omites $z$, el coeficiente estimado del precio converge a $\beta_1 + \beta_2 \delta$, donde $\delta$ es la pendiente de regresar $z$ sobre $\log p$. Las buenas ubicaciones venden más ($\beta_2 > 0$) y cobran más ($\delta > 0$), así que el sesgo es positivo y puede voltear el signo. En el EDA ya lo viste: entre tiendas, precio y ventas se correlacionan +0.621, y log_precio se correlaciona 0.395 con ingreso_zona y 0.522 con competidores.

M3 agrega controles que capturan parte de la calidad de la ubicación, por eso el coeficiente baja a −0.446. Un detalle revelador: competidores sale con signo positivo (+0.030). No significa que la competencia ayude, sino que esa variable también funciona como indicador de buena zona. La calidad de la ubicación no se observa directamente, así que ningún conjunto de controles la captura por completo. ¿Es −0.446 la respuesta? Todavía no. En la sección de datos panel verás cómo los efectos fijos por tienda eliminan toda característica constante de cada sucursal, observada o no.

Trampas comunes

  • Leer un coeficiente como causal sin pensar en lo omitido. Pregunta siempre qué variable afecta a la vez a $x$ y a $y$.
  • Juzgar el modelo por el $R^2$. M1 tiene $R^2$ de 0.011 y M3 de 0.459, pero un $R^2$ alto no garantiza un coeficiente insesgado.
  • Interpretar log-nivel como porcentaje directo cuando el coeficiente es grande. Usa $e^{\beta}-1$: con 0.1277 la diferencia es pequeña (12.8 % contra 13.6 %), con 0.5 ya no lo es.
  • Confiar en los errores estándar clásicos con datos de panel. Las semanas de una tienda no son independientes; lo corregirás con errores por cluster.

Antes de cada regresión, escribe qué variable podría estar detrás del precio y de las ventas a la vez. Esa lista decide los controles y, a veces, el signo de la respuesta.

Recursos