3 · Regresión lineal múltiple
Múltiples variables convierten una pendiente en un vector — y cada coeficiente significa 'efecto de esta variable, manteniendo todas las demás constantes'.
Múltiples variables convierten ŷ = wx + b en ŷ = w₁x₁ + w₂x₂ + ... + wₙxₙ + b — producto punto vectorial.
Sin esto:
Los datasets reales siempre tienen muchas variables; no puedes modelar el precio de una casa solo con los metros cuadrados.
El salto de regresión lineal simple (una variable) a regresión lineal múltiple (muchas variables) es principalmente notacional — el modelo sigue siendo lineal, solo en un espacio de mayor dimensión.
En forma matricial: ŷ = Xw + b (o ŷ = Xw si absorbes el sesgo b como una columna extra de unos en X).
La solución de forma cerrada se extiende a la Ecuación Normal:
w = (XᵀX)⁻¹ Xᵀy
Esto resuelve el vector de pesos w ∈ ℝᵖ que minimiza la suma de residuos al cuadrado en todas las p variables simultáneamente. Dos notas prácticas:
- Usa
np.linalg.solve(X.T @ X, X.T @ y)en lugar denp.linalg.inv(X.T @ X) @ X.T @ y—solvees numéricamente más estable (evita la inversión explícita). - Si dos variables están casi perfectamente correlacionadas (multicolinealidad), XᵀX es casi singular — no existe solución única. La regresión Ridge (Lección 5) es la solución estándar.
Interpretar coeficientes es el verdadero poder de los modelos lineales: wᵢ es el cambio esperado en ŷ cuando la variable xᵢ aumenta en una unidad, manteniendo todas las demás variables constantes. Esta interpretación de "derivada parcial" es por qué los economistas dicen "controlando por X" y por qué debes escalar las variables antes de comparar magnitudes de coeficientes.
Python (in browser)
Cada coeficiente estima 'efecto por incremento unitario en esa variable, todo lo demás igual'. Los valores recuperados deberían ser cercanos a los parámetros generadores reales.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`np.linalg.solve(A, b)` encuentra w tal que Aw = b sin invertir explícitamente A — más rápido y numéricamente más estable que `np.linalg.inv(A) @ b`.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Sin escalar: el coeficiente de sqft es pequeño (0.15) porque sqft va de 500 a 3000. Escalado: el coeficiente es grande porque 1 std de sqft son ~700 pies. StandardScaler hace comparables las magnitudes.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
La interpretación 'manteniendo todo lo demás constante' es lo que hace interpretables a los modelos lineales — y lo que la regresión logística / GLMs heredan de OLS.
Si dos variables tienen correlación ρ = 0.99, ¿cuál es el riesgo para los coeficientes de una regresión lineal?
- La regresión múltiple es ŷ = Xw + b — el mismo principio OLS, ahora w es un vector. Forma cerrada: w = (XᵀX)⁻¹Xᵀy, resuelta con `np.linalg.solve`.
- Cada coeficiente wᵢ = ∂ŷ/∂xᵢ — el efecto de la variable i, manteniendo todas las demás constantes. Esto es el 'controlando por X' del análisis de regresión.
- Aplica `StandardScaler` antes de comparar magnitudes de coeficientes — los coeficientes crudos reflejan unidades, no importancia.
- Variables altamente correlacionadas (ρ > 0.9) causan multicolinealidad — los coeficientes se disparan. Diagnostica con VIF; corrige con regresión ridge o eliminación de variables.
Todo problema de regresión tabular comienza con regresión lineal múltiple. Las series de tiempo frecuentemente usan modelos ARX como línea base, que son regresión lineal múltiple con variables rezagadas.
Si lo quitas: Sin ella modelarías solo relaciones de una sola variable — demasiado limitado para cualquier problema real.