Unidad 4 - Regresiones básicas y flujo de trabajo empírico
Curso Nivelatorio de R · CIENFI · Universidad Icesi
1 Objetivo de la unidad
Esta unidad cierra el ciclo del curso: de la pregunta económica a la tabla de regresión, pasando por un proyecto ordenado que cualquiera puede reproducir. El foco NO es la teoría econométrica —para eso están Econometría I y II—: es la mecánica en R (estimar, leer, tabular, exportar) y la disciplina de interpretación (qué dice y qué NO dice un coeficiente).
¿Qué vamos a poder hacer al final?
Con el extracto de la GEIH que conocimos en la Unidad 3, vamos a responder la pregunta más clásica de la economía laboral: ¿cuánto más ingreso está asociado a un año adicional de educación? (la ecuación de Mincer). Al final de la unidad usted podrá:
- Estimar una regresión lineal con
lm()y leer completa la salida desummary() - Interpretar coeficientes en niveles y en logaritmos, con sus unidades
- Incluir variables categóricas (dummies) y controles
- Estimar con errores estándar robustos y efectos fijos usando
fixest - Producir una tabla de regresión profesional con
modelsummaryy exportarla - Organizar todo lo anterior en un pipeline reproducible de scripts numerados
1.1 Lo que aprenderemos en esta unidad
1. Estimar e interpretar — lm(), fórmulas, summary(), coeficientes, R², significancia
2. Especificaciones típicas — logaritmos, dummies, controles, efectos fijos básicos
3. Comunicar resultados — tablas con modelsummary, exportar a Word/LaTeX
4. El flujo de trabajo empírico — del dato crudo a la tabla final en scripts numerados
2 De la descriptiva a la regresión
En la Unidad 3 vimos que el ingreso laboral crece con la educación. Un diagrama de dispersión con una recta ajustada ya sugiere la relación:
## en RStudio, con la base completa
geih <- import("datos/originales/geih_nivelacion.csv")
ggplot(geih, aes(x = anios_educacion, y = log(ingreso_laboral))) +
geom_point(alpha = 0.1) +
geom_smooth(method = "lm", se = TRUE) +
labs(x = "Años de educación", y = "Log del ingreso laboral") +
theme_minimal()La correlación entre años de educación y el log del ingreso en nuestra base es 0.45: positiva y fuerte. Pero la correlación no tiene unidades interpretables en pesos ni permite “controlar” por otras variables. Para eso está la regresión.
¿Qué hace una regresión lineal?
La regresión y ~ x encuentra la recta que mejor resume la relación promedio entre x y y (mínimos cuadrados ordinarios, MCO/OLS). El coeficiente de x responde: “en promedio, ¿cuánto cambia y cuando x aumenta en una unidad?”. Toda la econometría que verán en la Maestría se construye sobre esta idea.
2.1 Probemos con una mini base
En el navegador podemos estimar nuestra primera regresión. La mini base mini ya viene cargada en esta página: 10 personas ocupadas con su ingreso mensual (miles de COP), años de educación, edad y sexo.
Lectura: el intercepto y el coeficiente de educacion definen la recta. Cada año adicional de educación está asociado, en promedio, a ese coeficiente adicional en miles de pesos.
3 La función lm() y la salida de summary()
3.1 Sintaxis de fórmulas
lm() usa la sintaxis de fórmula de R, que leeremos así durante toda la Maestría:
lm(y ~ x1 + x2 + x3, data = base)
# | |__ variables explicativas (separadas por +)
# |__ variable dependiente3.2 El modelo es un objeto
Como todo en R, el modelo estimado es un objeto: podemos guardarlo, inspeccionarlo y extraerle piezas.
3.3 Cómo leer summary() — la tabla que verá mil veces
La tabla Coefficients de summary() tiene cuatro columnas que hay que saber leer:
| Columna | Qué es | Cómo leerla |
|---|---|---|
Estimate |
El coeficiente estimado | El cambio promedio en y por unidad de x |
Std. Error |
Error estándar | La incertidumbre del estimado |
t value |
Estimate / Std. Error | Qué tan lejos de cero está el coeficiente, en errores estándar |
Pr(>|t|) |
Valor p | Probabilidad de ver un coeficiente así de grande si el verdadero fuera cero |
Debajo de la tabla, dos cifras que siempre miramos:
Multiple R-squared: proporción de la variación deyque “explica” el modelo (entre 0 y 1)- La nota de observaciones eliminadas por
NA(si aparece): ¿con cuántos datos se estimó realmente?
Significancia estadística ≠ importancia económica
Un coeficiente puede ser “significativo” (***) y a la vez económicamente irrelevante, sobre todo con muestras grandes como la GEIH (21.821 observaciones): con suficientes datos, casi todo es “significativo”. La pregunta que importa es la magnitud: ¿cuántos pesos? ¿qué porcentaje? Siempre interprete el Estimate con sus unidades antes de mirar las estrellas.
4 Interpretación de coeficientes
Esta es la habilidad central de la unidad. La interpretación depende de las unidades de y y de x.
4.1 Nivel-nivel: y ~ x
lm(ingreso_laboral ~ anios_educacion, data = geih)Interpretación: un año adicional de educación está asociado a un cambio de Estimate pesos en el ingreso mensual, en promedio.
4.2 Log-nivel: log(y) ~ x — la forma estándar para ingresos
En la Unidad 3 vimos que el ingreso es muy asimétrico (outliers reales). Por eso, en economía laboral la variable dependiente estándar es el logaritmo del ingreso:
## en RStudio, con la base completa
modelo_mincer <- lm(log(ingreso_laboral) ~ anios_educacion, data = geih)
summary(modelo_mincer)Con nuestra base, el resultado es:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 12.5760 0.0145 869.2 <2e-16 ***
anios_educacion 0.0931 0.0012 75.1 <2e-16 ***
Multiple R-squared: 0.205, N = 21,821
Interpretación: un año adicional de educación está asociado a un ingreso laboral 9,3% mayor, en promedio. (Regla: en log(y) ~ x, el coeficiente × 100 se lee como cambio porcentual de y por unidad de x; la aproximación es buena para coeficientes pequeños, digamos |β| < 0,2.)
La ecuación de Mincer
Acabamos de estimar la versión más simple de la ecuación de Mincer, uno de los resultados empíricos más replicados de la economía: el retorno a la educación ronda el 8–12% por año en la mayoría de países. Nuestro 9,3% con la GEIH cae exactamente en ese rango — buena señal de que el flujo de datos que construimos en las Unidades 2 y 3 está bien hecho.
4.3 Mini-ejercicio: interprete usted
Asociación NO es causalidad
Nada en lm() convierte una correlación en un efecto causal. Las personas con más educación difieren en muchas cosas que no observamos (habilidad, contexto familiar, redes). Por eso en este curso decimos siempre “está asociado a”, nunca “la educación causa” o “el efecto de la educación”. Identificar efectos causales es, precisamente, el contenido de sus cursos de econometría e inferencia causal — aquí solo preparamos la mecánica.
5 Regresión múltiple: controles y dummies
5.1 Agregar controles
Agregar variables a la fórmula “controla” por ellas: el coeficiente de educación pasa a compararse entre personas de la misma edad:
modelo_2 <- lm(log(ingreso_laboral) ~ anios_educacion + edad, data = geih)5.2 Variables categóricas: dummies
¿Qué pasa si incluimos sexo, que es texto ("hombre"/"mujer")? R la convierte automáticamente en una variable dummy (0/1), dejando una categoría como referencia (la primera en orden alfabético):
modelo_3 <- lm(log(ingreso_laboral) ~ anios_educacion + edad + sexo, data = geih)
summary(modelo_3)Resultado con nuestra base:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 12.2820 0.0244 504.2 <2e-16 ***
anios_educacion 0.1043 0.0012 84.8 <2e-16 ***
edad 0.0092 0.0004 21.6 <2e-16 ***
sexomujer -0.4109 0.0104 -39.7 <2e-16 ***
Multiple R-squared: 0.271
Lectura de sexomujer: manteniendo educación y edad constantes, las mujeres tienen un ingreso laboral 41 puntos log (≈ 34%) menor que los hombres (la categoría de referencia). Para dummies con coeficientes grandes, la conversión exacta a porcentaje es exp(β) − 1: exp(-0.411) - 1 = -0.337.
¿Quién es la categoría de referencia?
El coeficiente de una dummy siempre se lee contra la referencia. Si quiere cambiarla:
geih <- mutate(geih, sexo = relevel(factor(sexo), ref = "mujer"))Y verifique siempre en la salida qué categoría aparece (aquí sexomujer → la referencia es hombre).
5.3 Mini-ejercicio: dummies en acción
Hacia la brecha “no explicada”
En la Unidad 3 vimos la brecha bruta de ingresos por sexo (en medias y medianas). La regresión nos da la brecha condicional: la que queda después de controlar por educación y edad. Que la brecha condicional siga siendo grande (−34%) es el punto de partida de una literatura enorme en economía laboral — y un buen ejemplo de cómo descriptivas y regresiones cuentan juntas una historia.
6 Errores estándar robustos y fixest
6.1 El estándar moderno en economía aplicada
En los cursos de la Maestría (y en los papers que leerán) las regresiones casi nunca se estiman con lm() a secas, por dos razones prácticas:
- Los errores estándar clásicos asumen varianza constante (homocedasticidad); con datos de ingresos eso casi nunca se cumple → se usan errores robustos
- Es rutinario incluir efectos fijos (de región, de año, de firma) para comparar “dentro de” grupos
El paquete fixest resuelve ambas cosas con una sintaxis compacta y es hoy el estándar en economía aplicada:
## en RStudio
library(fixest)
## efectos fijos de departamento van despues de |
modelo_fe <- feols(log(ingreso_laboral) ~ anios_educacion + edad + sexo | departamento,
data = geih, vcov = "hetero")
modelo_feResultado con nuestra base:
OLS estimation, Dep. Var.: log(ingreso_laboral)
Observations: 21,821
Fixed-effects: departamento: 24
Standard-errors: Heteroskedasticity-robust
Estimate Std. Error t value Pr(>|t|)
anios_educacion 0.102590 0.001326 77.35 < 2.2e-16 ***
edad 0.009322 0.000450 20.73 < 2.2e-16 ***
sexomujer -0.413327 0.010544 -39.20 < 2.2e-16 ***
Lectura nueva: con efectos fijos de departamento, el coeficiente de educación compara personas del mismo departamento. Que el retorno apenas cambie (10,3%) nos dice que la relación educación-ingreso no está explicada por diferencias entre departamentos.
¿lm() o feols()?
lm(): para entender la mecánica y para modelos simples — es base R, siempre disponiblefeols(): para el trabajo aplicado real — errores robustos (vcov = "hetero") o agrupados (vcov = ~grupo) y efectos fijos con|
En este curso presentamos ambos; en Econometría I profundizarán en el porqué de cada corrección.
7 Tablas de regresión para informes
Copiar y pegar la consola en Word está prohibido en este curso (y en la vida). La tabla profesional —varios modelos lado a lado, estrellas, número de observaciones— se produce con modelsummary:
## en RStudio
library(modelsummary)
modelos <- list("(1) Simple" = modelo_mincer,
"(2) + Controles" = modelo_3,
"(3) + EF depto" = modelo_fe)
msummary(modelos,
coef_rename = c(anios_educacion = "Años de educación",
edad = "Edad", sexomujer = "Mujer"),
gof_map = c("nobs", "r.squared"),
stars = TRUE,
output = "output/tablas/tabla_mincer.docx")Con output = "...docx" la tabla queda lista para Word; con .tex para LaTeX; sin output se previsualiza en el Viewer.
La regla de la tabla final
Toda tabla de regresión de un informe debe:
- Nacer de un script (reproducible de datos crudos a tabla)
- Mostrar N (¿cambia entre columnas? ¿por qué? — casi siempre son
NAque entran y salen de la muestra) - Decir qué errores estándar usa (nota al pie)
- Tener nombres de variables legibles (no
anios_educacion, sino “Años de educación”)
8 El flujo de trabajo empírico completo
Cerramos el curso conectando todo: la estructura de proyecto de la Unidad 1, la limpieza de la Unidad 2, las descriptivas de la Unidad 3 y las regresiones de esta unidad, en un pipeline de scripts numerados:
mi_proyecto/
├── mi_proyecto.Rproj
├── datos/
│ ├── originales/geih_nivelacion.csv # intocable
│ └── procesados/geih_limpia.rds # lo produce 01
├── scripts/
│ ├── 01_limpieza.R # crudo -> procesado (decisiones documentadas)
│ ├── 02_descriptivas.R # procesado -> figuras y tabla descriptiva
│ └── 03_regresiones.R # procesado -> tabla de regresion
├── output/
│ ├── figuras/ # .png de 02
│ └── tablas/ # .docx de 02 y 03
└── README.md # que hace el proyecto y en que orden se corre
La prueba de fuego de la reproducibilidad
Antes de entregar cualquier trabajo empírico (el proyecto final de este curso, una tarea de la Maestría, un paper), haga esta prueba:
- Cierre RStudio por completo
- Abra el proyecto de nuevo (
.Rproj) - Corra los scripts en orden (
01_,02_,03_) sin tocar nada más
Si todo corre y las tablas/figuras del output/ se regeneran idénticas, su análisis es reproducible. Si algo falla —una ruta absoluta, un objeto que “estaba en memoria”, un paquete sin cargar—, encontró exactamente lo que hay que arreglar.
Cada script del pipeline sigue la plantilla de la Unidad 1 (encabezado, p_load(), rutas, secciones numeradas) y termina exportando: el 01 exporta la base limpia a datos/procesados/, el 02 y el 03 exportan a output/. Ningún script depende de objetos que otro dejó “en memoria”: cada uno lee de disco lo que necesita.
El proyecto final ejercita exactamente esto
El proyecto final del curso le pide este pipeline completo sobre la base de innovación empresarial: limpiar (U2), describir y graficar (U3), estimar e interpretar una regresión sencilla (U4), todo dentro de un proyecto ordenado (U1) que se sustenta oralmente.
9 Errores comunes
1. Regresar el ingreso en niveles con outliers. Un solo ingreso de 68 millones arrastra la recta. La convención: log(ingreso). Si duda, mire el histograma en niveles y en logs (Unidad 3).
2. Leer las estrellas como importancia. Con N = 21.821 casi todo es ***. La pregunta es la magnitud: ¿9% es mucho o poco? Compárelo con algo (otros países, otros grupos, el costo de estudiar).
3. Lenguaje causal sin diseño causal. “El efecto de la educación sobre el ingreso es 10%” — NO con estos datos. Escriba “asociado a”. Su futuro profesor de econometría (y cualquier evaluador) lo notará de inmediato.
4. No mirar cuántas observaciones usó el modelo. Si y o algún control tiene NA, lm() elimina esas filas en silencio. Si el N cambia entre columnas de su tabla, sus modelos no son comparables sin una nota que lo explique.
5. Interpretar una dummy sin saber la referencia. sexomujer = -0.41 no significa nada hasta decir “respecto a los hombres”. Verifique la categoría de referencia antes de escribir una sola frase.
10 Checklist de salida
Antes del proyecto final, verifique que puede:
11 Preguntas de comprensión
- En
log(ingreso) ~ anios_educacion, el coeficiente es 0.093. Escriba la interpretación completa en una frase (con unidades y “asociado a”). - ¿Por qué preferimos
log(ingreso_laboral)aingreso_laboralcomo variable dependiente en esta base? - El coeficiente de
sexomujerpasa de −0.41 a −0.41 al agregar efectos fijos de departamento. ¿Qué nos dice eso sobre la brecha de género entre departamentos? - Su compañero reporta: “la educación aumenta el ingreso en 10%; el efecto es altamente significativo”. Señale los dos problemas de esa frase.
- En su tabla final, el modelo (1) tiene N = 21.821 y el modelo (2) tiene N = 19.407. ¿Qué pasó y por qué importa?
12 Recursos de aprendizaje de la unidad
- Lectura principal: Wooldridge, Introducción a la econometría — caps. 2 a 4 (regresión simple y múltiple, la referencia de Econometría I)
- Libro en línea (gratuito): The Effect de Nick Huntington-Klein — caps. 4 y 13 para regresión aplicada con R y una excelente discusión de causalidad
- Documentación: fixest — vignette oficial · modelsummary
- Referencia rápida:
?lm,?feolsy la cheatsheet de modelado de Posit - Material del profesor: Workshop de R para investigación aplicada (talleres EAFIT/Magdalena)
- Guías del curso: Guía de estilo de scripts · Guía de organización de proyectos · Guía de uso de IA