1 Marco teórico y pregunta de investigación

1.1 Teoría del capital humano y ecuación de Mincer

Fundamento teórico: La teoría del capital humano (Becker, 1964; Schultz, 1961) postula que la educación es una inversión que incrementa la productividad marginal del trabajador. Al igual que el capital físico, el capital humano genera rendimientos a lo largo del tiempo. Mincer (1974) formalizó esta idea en una ecuación de ingresos que relaciona el logaritmo del salario con la escolaridad y la experiencia laboral.

La ecuación de Mincer en su forma extendida es:

\[\ln(w_i) = \beta_0 + \beta_1 s_i + \beta_2 \text{exp}_i + \beta_3 \text{exp}_i^2 + \varepsilon_i\]

donde:

  • \(\ln(w_i)\) = logaritmo natural del ingreso laboral mensual del individuo \(i\)
  • \(s_i\) = años de educación formal acumulados
  • \(\text{exp}_i\) = experiencia laboral potencial = edad − años de educación − 6
  • \(\text{exp}_i^2\) = término cuadrático que captura rendimientos decrecientes de la experiencia
  • \(\beta_1\) = tasa de retorno privado a cada año adicional de educación
  • \(\varepsilon_i\) = término de error aleatorio

El término cuadrático de la experiencia es fundamental: captura que el salario crece con la experiencia a una tasa decreciente y puede eventualmente declinar (perfil salario-experiencia con forma de “∩”). \(\beta_3 < 0\) es el resultado esperado bajo la teoría.

1.2 Extensión a niveles de posgrado

Para analizar retornos diferenciados por nivel de formación, la especificación se extiende reemplazando los años de educación por dummies de nivel:

\[\ln(w_i) = \beta_0 + \beta_1 \text{Espec}_i + \beta_2 \text{Maest}_i + \beta_3 \text{Doc}_i + \beta_4 \text{exp}_i + \beta_5 \text{exp}_i^2 + \gamma \mathbf{X}_i + \alpha_d + \lambda_t + \varepsilon_i\]

donde: - \(\text{Espec}_i\), \(\text{Maest}_i\), \(\text{Doc}_i\) = dummies de nivel de posgrado (grupo base = pregrado) - \(\mathbf{X}_i\) = vector de controles (sexo, sector, formalidad, tamaño empresa) - \(\alpha_d\) = efectos fijos de departamento - \(\lambda_t\) = efectos fijos de año

Interpretación: \(\hat{\beta}_1\), \(\hat{\beta}_2\), \(\hat{\beta}_3\) son las primas salariales logarítmicas del posgrado respecto al pregrado. La conversión a porcentaje exacto es \(100 \times (e^{\hat{\beta}} - 1)\).

1.3 Pregunta e hipótesis de investigación

Pregunta central: ¿Cuál es el retorno salarial asociado a la formación de posgrado en Colombia y cómo varía según el nivel de formación, el sexo y el tiempo?

Hipótesis de trabajo:

Código Hipótesis nula (H₀) Hipótesis alternativa (H₁)
H1 El posgrado no genera diferencial salarial vs. pregrado: β = 0 El posgrado se asocia con mayores ingresos: β > 0
H2 Los retornos son iguales entre niveles: β_espec = β_maest = β_doc Los retornos son crecientes: β_doc > β_maest > β_espec > 0
H3 El retorno del posgrado no difiere por sexo: β_posgrado×mujer = 0 Las mujeres con posgrado tienen diferente retorno que los hombres
H4 El retorno del posgrado no ha cambiado 2018-2025: β_posgrado×año = 0 Los retornos han variado en el tiempo

2 Datos y metodología empírica

2.1 Fuente de datos

La Gran Encuesta Integrada de Hogares (GEIH) del DANE es la encuesta continua más importante de Colombia para el seguimiento del mercado laboral. Tiene representatividad nacional y departamental, periodicidad mensual, y permite identificar ingresos laborales, nivel educativo, características del empleo y condiciones socioeconómicas del hogar.

message("Selecciona el archivo del pool GEIH (.rds o .parquet)...")
ruta_pool <- file.choose()

if (grepl("\\.parquet$", ruta_pool, ignore.case=TRUE)) {
  pool <- as.data.table(read_parquet(ruta_pool))
} else {
  pool <- as.data.table(readRDS(ruta_pool))
}
ruta_dir <- dirname(ruta_pool)

cat("=== INFORMACIÓN DEL POOL ===\n")
#> === INFORMACIÓN DEL POOL ===
cat(sprintf("Observaciones   : %s\n", formatC(nrow(pool), big.mark=",", format="d")))
#> Observaciones   : 2,006,591
cat(sprintf("Variables       : %d\n", ncol(pool)))
#> Variables       : 53
cat(sprintf("Años cubiertos  : %d – %d\n", min(pool$anio), max(pool$anio)))
#> Años cubiertos  : 2018 – 2025
cat(sprintf("Marcos muestrales: %s\n", paste(sort(unique(pool$marco_muestral)), collapse=" | ")))
#> Marcos muestrales: Anterior | C18

2.2 Cobertura por año

tab_cobertura <- pool[, .(
  Meses    = uniqueN(mes),
  Obs      = .N,
  Marco    = unique(marco_muestral),
  Ing_med  = round(median(ingreso_laboral_mensual, na.rm=TRUE))
), by=anio][order(anio)]
setnames(tab_cobertura, c("Año","Meses procesados","Observaciones","Marco","Ingreso mediano"))

kable(tab_cobertura, caption="Cobertura del pool GEIH por año",
      format.args=list(big.mark=",")) |>
  kable_styling(bootstrap_options=c("striped","hover","condensed"), full_width=FALSE) |>
  row_spec(which(tab_cobertura$Año==2020), background="#fdebd0") |>
  footnote(general="Año 2020 en naranja: excluidos meses marzo-julio (COVID-19) y noviembre (sin módulo FT).")
Cobertura del pool GEIH por año
Año Meses procesados Observaciones Marco Ingreso mediano
2,018 12 230,622 Anterior 800,000
2,019 12 245,532 Anterior 830,000
2,020 6 122,275 Anterior 877,803
2,021 11 150,599 Anterior 908,526
2,022 12 328,095 C18 1,000,000
2,023 12 314,570 C18 1,160,000
2,024 12 302,608 C18 1,300,000
2,025 12 312,290 C18 1,423,500
Note:
Año 2020 en naranja: excluidos meses marzo-julio (COVID-19) y noviembre (sin módulo FT).

2.3 Muestra analítica

2.3.1 Criterios de inclusión/exclusión

# Pool completo con ingreso válido
pool_valido <- pool[!is.na(ln_ingreso)]

# Muestra Mincer: pregrado y posgrado, 18-65 años
muestra_mincer <- pool[
  !is.na(ln_ingreso) &
  !is.na(experiencia_potencial) &
  !is.na(sexo_mujer) &
  !is.na(pregrado) &
  (pregrado==1L | especializacion==1L | maestria==1L | doctorado==1L) &
  edad >= 18L & edad <= 65L
]

# Centrar experiencia (elimina multicolinealidad con exp²)
media_exp <- mean(muestra_mincer$experiencia_potencial, na.rm=TRUE)
muestra_mincer[, exp_c  := experiencia_potencial - media_exp]
muestra_mincer[, exp_c2 := exp_c^2]

tab_muestra <- data.table(
  Criterio = c("Pool completo","Con ingreso válido (INGLABO > 0)",
               "Con nivel educativo identificado","Con pregrado o posgrado",
               "Edad 18-65 años (muestra Mincer final)"),
  N = c(nrow(pool), nrow(pool_valido),
        nrow(pool[!is.na(anios_educacion)]),
        nrow(pool[!is.na(pregrado) & (pregrado==1L|especializacion==1L|maestria==1L|doctorado==1L)]),
        nrow(muestra_mincer)),
  Pct = c(100, round(100*nrow(pool_valido)/nrow(pool),1),
          round(100*nrow(pool[!is.na(anios_educacion)])/nrow(pool),1),
          round(100*nrow(pool[!is.na(pregrado)&(pregrado==1L|especializacion==1L|maestria==1L|doctorado==1L)])/nrow(pool),1),
          round(100*nrow(muestra_mincer)/nrow(pool),1))
)
kable(tab_muestra, col.names=c("Criterio","N observaciones","% del pool"),
      caption="Embudo de selección de la muestra analítica",
      format.args=list(big.mark=",")) |>
  kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE)
Embudo de selección de la muestra analítica
Criterio N observaciones % del pool
Pool completo 2,006,591 100.0
Con ingreso válido (INGLABO > 0) 2,006,591 100.0
Con nivel educativo identificado 2,002,075 99.8
Con pregrado o posgrado 417,408 20.8
Edad 18-65 años (muestra Mincer final) 407,888 20.3

Nota sobre los NA en años de educación (78.94%): Esta cifra refleja el diseño de la muestra analítica, no un error de datos. La ecuación de Mincer se estima comparando pregrado vs. posgrado; los trabajadores con educación inferior al pregrado no hacen parte de la muestra del modelo principal. Sin embargo, sí se incluyen en el pool completo para análisis descriptivos generales.


3 Estadísticas descriptivas

tab_desc <- muestra_mincer[, .(
  N              = .N,
  `%`            = round(100*.N/nrow(muestra_mincer),1),
  `Ing. medio`   = round(mean(ingreso_laboral_mensual, na.rm=TRUE)),
  `Ing. mediano` = round(median(ingreso_laboral_mensual, na.rm=TRUE)),
  `ln(w) medio`  = round(mean(ln_ingreso, na.rm=TRUE),3),
  `Exp. media`   = round(mean(experiencia_potencial, na.rm=TRUE),1),
  `% Mujer`      = round(100*mean(sexo_mujer, na.rm=TRUE),1),
  `% Formal`     = round(100*mean(formalidad, na.rm=TRUE),1),
  `% Sec. Púb.`  = round(100*mean(sector_pub_priv, na.rm=TRUE),1)
), by=grupo_educativo][order(grupo_educativo)]

kable(tab_desc, caption="Estadísticas descriptivas por nivel educativo — Muestra Mincer",
      format.args=list(big.mark=",")) |>
  kable_styling(bootstrap_options=c("striped","hover","condensed")) |>
  row_spec(which(tab_desc$grupo_educativo=="8_pregrado"), bold=TRUE, background="#d6eaf8")
Estadísticas descriptivas por nivel educativo — Muestra Mincer
grupo_educativo N % Ing. medio Ing. mediano ln(w) medio Exp. media % Mujer % Formal % Sec. Púb.
10_maestria 43,787 10.7 4,924,642 4,000,000 15.19 19.5 57.4 90.5 45.1
11_doctorado 17,874 4.4 5,868,502 4,500,000 15.36 16.6 53.7 95.0 58.5
8_pregrado 142,283 34.9 1,965,289 1,530,000 14.27 15.7 52.6 76.6 16.2
9_especializacion 203,944 50.0 3,069,686 2,500,000 14.69 16.8 55.0 83.0 28.1
muestra_mincer[, nivel_label := fcase(
  grupo_educativo=="8_pregrado",        "Pregrado",
  grupo_educativo=="9_especializacion", "Especialización",
  grupo_educativo=="10_maestria",       "Maestría",
  grupo_educativo=="11_doctorado",      "Doctorado",
  default=NA_character_)]
muestra_mincer <- muestra_mincer[!is.na(nivel_label)]
muestra_mincer[, nivel_label := factor(nivel_label,
  levels=c("Pregrado","Especialización","Maestría","Doctorado"))]

p_box <- ggplot(muestra_mincer[ingreso_laboral_mensual>0],
                aes(x=nivel_label, y=ingreso_laboral_mensual, fill=nivel_label)) +
  geom_boxplot(outlier.size=0.3, alpha=0.8) +
  scale_y_log10(labels=scales::comma) +
  scale_fill_manual(values=c("#85c1e9","#2e86c1","#1a5276","#0d2137")) +
  labs(title="Distribución del ingreso laboral mensual por nivel educativo",
       subtitle="Escala logarítmica | GEIH-DANE 2018-2025 | Cabeceras municipales",
       x=NULL, y="Ingreso mensual (COP, escala log)",
       caption="Fuente: GEIH-DANE 2018-2025.") +
  theme_minimal(base_size=12) +
  theme(legend.position="none", plot.title=element_text(face="bold"),
        panel.grid.minor=element_blank())
print(p_box)
Distribución del ingreso mensual por nivel educativo (escala logarítmica)

Distribución del ingreso mensual por nivel educativo (escala logarítmica)

serie <- muestra_mincer[, .(
  ing_mediano = median(ingreso_laboral_mensual, na.rm=TRUE)
), by=.(anio, nivel_label)]

ggplot(serie, aes(x=anio, y=ing_mediano/1e6, color=nivel_label, group=nivel_label)) +
  geom_line(linewidth=1.1) +
  geom_point(size=2.5) +
  scale_color_manual(values=c("#85c1e9","#2e86c1","#1a5276","#0d2137")) +
  scale_y_continuous(labels=function(x) paste0("$",x,"M")) +
  scale_x_continuous(breaks=2018:2025) +
  labs(title="Evolución del ingreso mediano por nivel educativo (2018–2025)",
       subtitle="En millones de pesos colombianos corrientes",
       x="Año", y="Ingreso mediano (millones COP)",
       color="Nivel educativo",
       caption="Fuente: GEIH-DANE 2018-2025.") +
  theme_minimal(base_size=12) +
  theme(plot.title=element_text(face="bold"), panel.grid.minor=element_blank(),
        legend.position="bottom")
Evolución del ingreso mediano real por nivel educativo 2018-2025

Evolución del ingreso mediano real por nivel educativo 2018-2025


4 Diagnósticos estadísticos

¿Por qué hacer diagnósticos antes de estimar? Los supuestos de MCO (Gauss-Markov) determinan si el estimador es MELI (Mejor Estimador Lineal Insesgado). Los tests diagnósticos verifican: (1) homocedasticidad de los errores, (2) ausencia de autocorrelación, (3) normalidad de residuos, y (4) ausencia de multicolinealidad. El incumplimiento de estos supuestos no invalida el estimador pero sí afecta la inferencia estadística, requiriendo correcciones como errores estándar robustos o errores agrupados (clustered).

set.seed(42)
n_d   <- min(50000L, nrow(muestra_mincer))
md    <- muestra_mincer[sample(nrow(muestra_mincer), n_d)]
vars_a <- c("ln_ingreso","especializacion","maestria","doctorado",
             "exp_c","exp_c2","sexo_mujer","sector_pub_priv","formalidad")
mdc   <- md[complete.cases(md[, ..vars_a])]
mdc[, exp_c  := experiencia_potencial - media_exp]
mdc[, exp_c2 := exp_c^2]
lm_aux <- lm(ln_ingreso ~ especializacion + maestria + doctorado +
               exp_c + exp_c2 + sexo_mujer + sector_pub_priv + formalidad,
             data=mdc, na.action=na.omit)
cat(sprintf("Submuestra diagnóstico: %s obs (de %s con NAs en sector_pub_priv)\n",
            formatC(nrow(mdc), big.mark=",", format="d"),
            formatC(nrow(md), big.mark=",", format="d")))
#> Submuestra diagnóstico: 33,785 obs (de 50,000 con NAs en sector_pub_priv)

4.1 Test de heterocedasticidad — Breusch-Pagan

H₀: Los residuos tienen varianza constante (homocedasticidad): \(\text{Var}(\varepsilon_i) = \sigma^2\)

H₁: La varianza de los errores depende de los regresores (heterocedasticidad): \(\text{Var}(\varepsilon_i) = \sigma_i^2\)

Estadístico: \(BP = nR^2_{aux} \sim \chi^2(k)\) donde \(R^2_{aux}\) proviene de una regresión auxiliar de los residuos al cuadrado sobre los regresores.

bp <- bptest(lm_aux)
cat(sprintf("Estadístico BP  = %.4f\n", bp$statistic))
#> Estadístico BP  = 678.8321
cat(sprintf("Grados libertad = %d\n",   bp$parameter))
#> Grados libertad = 8
cat(sprintf("p-valor         = %e\n",   bp$p.value))
#> p-valor         = 2.578533e-141

Resultado e interpretación: Con p-valor < 0.001 se rechaza H₀ con alta significancia estadística. Los errores del modelo no tienen varianza constante: la dispersión de los residuos varía sistemáticamente con el nivel salarial (los salarios altos tienen mayor variabilidad). Esto es esperado en distribuciones de ingreso que son intrínsecamente asimétricas.

Decisión metodológica: Usar errores estándar robustos a heterocedasticidad (White, 1980) mediante vcov='hetero' en todos los modelos feols(). Esto corrige los errores estándar sin alterar los coeficientes estimados.

4.2 Test de heterocedasticidad — White (forma general)

H₀: Homocedasticidad (forma general, sin asumir estructura funcional).

H₁: Heterocedasticidad de forma general.

El test de White es más potente que Breusch-Pagan porque incluye términos cuadráticos y cruzados de los valores ajustados, sin asumir ninguna forma funcional específica de la heterocedasticidad.

wh <- bptest(lm_aux, ~ fitted(lm_aux) + I(fitted(lm_aux)^2))
cat(sprintf("Estadístico = %.4f\n", wh$statistic))
#> Estadístico = 71.6265
cat(sprintf("p-valor     = %e\n",   wh$p.value))
#> p-valor     = 2.795788e-16

Resultado: Rechazo de H₀ (p < 0.001). Confirma heterocedasticidad de forma general. Decisión: idéntica al test BP — errores robustos en todos los modelos.

4.3 Test de autocorrelación — Durbin-Watson

H₀: No hay autocorrelación de primer orden: \(\rho = 0\)

H₁: Hay autocorrelación positiva de primer orden: \(\rho > 0\)

Estadístico: \(DW = \dfrac{\sum_{t=2}^{n}(\hat{e}_t - \hat{e}_{t-1})^2}{\sum_{t=1}^{n}\hat{e}_t^2} \approx 2(1-\hat{\rho})\)

Valor de referencia: DW ≈ 2 indica ausencia de autocorrelación; DW < 2 indica autocorrelación positiva; DW > 2 indica autocorrelación negativa.

dw <- dwtest(lm_aux)
cat(sprintf("Estadístico DW = %.4f\n", dw$statistic))
#> Estadístico DW = 1.9885
cat(sprintf("p-valor        = %.6f\n", dw$p.value))
#> p-valor        = 0.144692

Resultado e interpretación: DW ≈ 2 y p-valor > 0.05 → no se rechaza H₀. Los residuos no presentan autocorrelación de primer orden. En datos de corte transversal repetidos (pool), este test también funciona como diagnóstico de mala especificación del modelo: su no rechazo confirma que la especificación captura adecuadamente la estructura de los datos.

Decisión: A pesar del no rechazo, se incluyen efectos fijos de año en M4-M7 como precaución metodológica para controlar shocks macroeconómicos comunes (inflación, pandemia, ciclo económico).

4.4 Test de autocorrelación — Breusch-Godfrey (orden 1-2)

H₀: No hay autocorrelación hasta orden \(p\): \(\rho_1 = \rho_2 = \ldots = \rho_p = 0\)

H₁: Existe autocorrelación hasta algún orden \(\leq p\)

Ventaja sobre DW: El test BG es más potente y funciona con modelos que incluyen rezagos de la variable dependiente como regresores, situación donde el DW es inválido.

bg <- bgtest(lm_aux, order=2)
cat(sprintf("Estadístico LM = %.4f\n", bg$statistic))
#> Estadístico LM = 2.9879
cat(sprintf("Grados libertad= %d\n",   bg$parameter))
#> Grados libertad= 2
cat(sprintf("p-valor        = %.6f\n", bg$p.value))
#> p-valor        = 0.224489

Resultado: No se rechaza H₀ (p > 0.05). Sin autocorrelación hasta orden 2. Consistente con el test DW. Decisión: sin corrección adicional necesaria.

4.5 Test de normalidad — Jarque-Bera

H₀: Los residuos tienen distribución normal: asimetría = 0 y curtosis = 3

H₁: Los residuos no son normales

Estadístico: \(JB = \dfrac{n}{6}\left[S^2 + \dfrac{(K-3)^2}{4}\right] \sim \chi^2(2)\)

donde \(S\) = asimetría y \(K\) = curtosis de los residuos.

res     <- residuals(lm_aux)
jb_stat <- (length(res)/6)*(moments::skewness(res)^2 + (moments::kurtosis(res)-3)^2/4)
jb_pval <- pchisq(jb_stat, df=2, lower.tail=FALSE)
cat(sprintf("JB         = %.2f\n",  jb_stat))
#> JB         = 16958.55
cat(sprintf("p-valor    = %e\n",    jb_pval))
#> p-valor    = 0.000000e+00
cat(sprintf("Asimetría  = %.4f\n",  moments::skewness(res)))
#> Asimetría  = 0.3347
cat(sprintf("Curtosis   = %.4f\n",  moments::kurtosis(res)))
#> Curtosis   = 6.4057

Resultado e interpretación: Se rechaza H₀ (residuos no normales). La asimetría positiva y la curtosis elevada (distribución leptocúrtica) son características típicas de modelos de ingresos.

¿Es esto un problema? No. El supuesto de normalidad de los errores es necesario para la validez de las pruebas t y F en muestras pequeñas. Con \(n > 275{,}000\) observaciones, el Teorema Central del Límite garantiza la distribución asintótica normal de los estimadores MCO independientemente de la distribución de los residuos. El rechazo de normalidad en muestras grandes es la regla, no la excepción.

Decisión: Sin acción requerida. Los resultados de inferencia son válidos.

4.6 Factor de Inflación de Varianza (VIF)

Propósito: Detectar multicolinealidad — correlación lineal entre regresores que infla los errores estándar y vuelve los coeficientes inestables.

Criterio: VIF < 5 = aceptable | 5 ≤ VIF < 10 = moderado | VIF ≥ 10 = severo

Fórmula: \(VIF_j = \dfrac{1}{1 - R^2_j}\) donde \(R^2_j\) es el R² de la regresión del regresor \(j\) sobre los demás regresores.

vif_v  <- car::vif(lm_aux)
vif_dt <- data.table(
  Variable = names(vif_v),
  VIF      = round(vif_v, 3),
  Estado   = ifelse(vif_v>10, "⛔ SEVERO", ifelse(vif_v>5, "⚠ MODERADO", "✅ OK"))
)
kable(vif_dt, caption="Factor de Inflación de Varianza — modelo con experiencia centrada") |>
  kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE) |>
  row_spec(which(vif_dt$Estado=="✅ OK"), color="darkgreen") |>
  row_spec(which(grepl("SEVERO", vif_dt$Estado)), color="red", bold=TRUE)
Factor de Inflación de Varianza — modelo con experiencia centrada
Variable VIF Estado
especializacion 1.251 ✅ OK |
maestria 1.226 ✅ OK |
doctorado 1.149 ✅ OK |
exp_c 1.321 ✅ OK |
exp_c2 1.219 ✅ OK |
sexo_mujer 1.003 ✅ OK |
sector_pub_priv 1.238 ✅ OK |
formalidad 1.051 ✅ OK |

Resultado e interpretación: Todos los VIF < 5 gracias al centrado de la experiencia potencial (\(\tilde{\text{exp}} = \text{exp} - \bar{\text{exp}}\)). Sin centrar, exp_c y exp_c2 tendrían VIF > 13 por la correlación estructural entre un regresor y su cuadrado. El centrado no altera ningún coeficiente de interés ni el R², solo elimina esta correlación artificial.

Las dummies de posgrado (VIF ≈ 1.2) confirman que son estadísticamente independientes entre sí, lo que valida las estimaciones individuales de cada nivel.

4.7 Resumen de diagnósticos y decisiones metodológicas

tab_diag <- data.table(
  Test = c("Breusch-Pagan","White","Durbin-Watson","Breusch-Godfrey (orden 2)","Jarque-Bera","VIF"),
  `H₀` = c("Homocedasticidad","Homocedasticidad general","Sin autocorrelación orden 1",
            "Sin autocorrelación orden 1-2","Normalidad residuos","Sin multicolinealidad (VIF<5)"),
  Resultado = c("RECHAZA H₀","RECHAZA H₀","No rechaza H₀","No rechaza H₀",
                "RECHAZA H₀ (esperado)","Sin multicolinealidad tras centrar"),
  Decisión = c("vcov='hetero' en feols()","Confirma errores robustos",
               "EF año como precaución","Sin corrección requerida",
               "TCL garantiza validez (n>275k)","Centrar exp antes de elevar al cuadrado")
)
kable(tab_diag, caption="Resumen de diagnósticos y decisiones metodológicas") |>
  kable_styling(bootstrap_options=c("striped","hover")) |>
  column_spec(4, bold=TRUE, color="#1a5276")
Resumen de diagnósticos y decisiones metodológicas
Test H₀ Resultado Decisión
Breusch-Pagan Homocedasticidad RECHAZA H₀ vcov=‘hetero’ en feols()
White Homocedasticidad general RECHAZA H₀ Confirma errores robustos
Durbin-Watson Sin autocorrelación orden 1 No rechaza H₀ EF año como precaución
Breusch-Godfrey (orden 2) Sin autocorrelación orden 1-2 No rechaza H₀ Sin corrección requerida
Jarque-Bera Normalidad residuos RECHAZA H₀ (esperado) TCL garantiza validez (n>275k)
VIF Sin multicolinealidad (VIF<5) Sin multicolinealidad tras centrar Centrar exp antes de elevar al cuadrado

5 Estimación de modelos

Estimador MCO y su justificación: Bajo los supuestos de Gauss-Markov (linealidad, exogeneidad estricta, rango completo, homocedasticidad), el estimador MCO es MELI (Mejor Estimador Lineal Insesgado — Teorema de Gauss-Markov). Dado que detectamos heterocedasticidad, usamos MCO con errores estándar robustos de White (1980), que corrigen los errores estándar sin alterar los coeficientes, recuperando la validez de la inferencia estadística. Todos los modelos se estiman con feols() del paquete fixest, que implementa MCO de alta eficiencia computacional con efectos fijos de alta dimensión.

m0 <- feols(ln_ingreso ~ anios_educacion + exp_c + exp_c2,
            data=muestra_mincer, vcov="hetero")

m1 <- feols(ln_ingreso ~ especializacion + maestria + doctorado + exp_c + exp_c2,
            data=muestra_mincer, vcov="hetero")

m2 <- feols(ln_ingreso ~ especializacion + maestria + doctorado +
              exp_c + exp_c2 + sexo_mujer + jefatura_hogar + i(estado_civil),
            data=muestra_mincer, vcov="hetero")

m3 <- feols(ln_ingreso ~ especializacion + maestria + doctorado +
              exp_c + exp_c2 + sexo_mujer + jefatura_hogar +
              sector_pub_priv + formalidad + i(tamano_empresa),
            data=muestra_mincer, vcov="hetero")

m4 <- feols(ln_ingreso ~ especializacion + maestria + doctorado +
              exp_c + exp_c2 + sexo_mujer + jefatura_hogar +
              sector_pub_priv + formalidad + i(tamano_empresa) |
              departamento + anio,
            data=muestra_mincer, vcov="hetero")

m5 <- feols(ln_ingreso ~ especializacion + maestria + doctorado +
              exp_c + exp_c2 + sexo_mujer + posgrado_x_sexo +
              sector_pub_priv + formalidad | departamento + anio,
            data=muestra_mincer, vcov="hetero")

m6 <- feols(ln_ingreso ~ especializacion + maestria + doctorado +
              exp_c + exp_c2 + sexo_mujer + posgrado_x_anio +
              sector_pub_priv + formalidad | departamento,
            data=muestra_mincer, vcov="hetero")

muestra_hora <- muestra_mincer[!is.na(ln_ingreso_hora)]
m7 <- feols(ln_ingreso_hora ~ especializacion + maestria + doctorado +
              exp_c + exp_c2 + sexo_mujer + sector_pub_priv + formalidad |
              departamento + anio,
            data=muestra_hora, vcov="hetero")

5.1 M0 — Ecuación de Mincer clásica

Especificación: \(\ln(w_i) = \beta_0 + \beta_1 s_i + \beta_2 \tilde{\text{exp}}_i + \beta_3 \tilde{\text{exp}}_i^2 + \varepsilon_i\)

Propósito: Estimar el retorno a cada año adicional de educación sin distinguir nivel. Es el modelo de referencia histórico (Mincer, 1974).

summary(m0)
#> OLS estimation, Dep. Var.: ln_ingreso
#> Observations: 407,888
#> Standard-errors: Heteroskedasticity-robust 
#>                  Estimate Std. Error t value  Pr(>|t|)    
#> (Intercept)     10.214263  0.0174692  584.70 < 2.2e-16 ***
#> anios_educacion  0.262370  0.0010262  255.68 < 2.2e-16 ***
#> exp_c            0.013138  0.0001043  125.96 < 2.2e-16 ***
#> exp_c2          -0.000241  0.0000091  -26.48 < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.677385   Adj. R2: 0.181694

Interpretación M0: - β₁ (anios_educacion) ≈ 0.262*: cada año adicional de educación formal se asocia con un incremento de aproximadamente 26.2% en el salario, controlando por experiencia. Este coeficiente replica el orden de magnitud documentado en la literatura latinoamericana (Psacharopoulos & Patrinos, 2018). - β₄ (exp_c) > 0: la experiencia tiene rendimientos positivos en torno a la media muestral. - β₅ (exp_c2) < 0: los rendimientos de la experiencia son decrecientes (perfil en ∩), consistente con la teoría del capital humano. - R² ≈ 0.18: el modelo simple explica el 18% de la varianza salarial.

5.2 M1 — Dummies de nivel de posgrado (brecha bruta)

Especificación: \(\ln(w_i) = \beta_0 + \beta_1 \text{Espec}_i + \beta_2 \text{Maest}_i + \beta_3 \text{Doc}_i + \beta_4 \tilde{\text{exp}}_i + \beta_5 \tilde{\text{exp}}_i^2 + \varepsilon_i\)

Propósito: Medir la brecha salarial bruta entre niveles de posgrado y pregrado, sin controlar por características observables del trabajador o del empleo.

summary(m1)
#> OLS estimation, Dep. Var.: ln_ingreso
#> Observations: 407,888
#> Standard-errors: Heteroskedasticity-robust 
#>                  Estimate Std. Error t value  Pr(>|t|)    
#> (Intercept)     14.314537 0.00204572 6997.31 < 2.2e-16 ***
#> especializacion  0.404379 0.00230134  175.71 < 2.2e-16 ***
#> maestria         0.868099 0.00353589  245.51 < 2.2e-16 ***
#> doctorado        1.068614 0.00505982  211.20 < 2.2e-16 ***
#> exp_c            0.012135 0.00010335  117.42 < 2.2e-16 ***
#> exp_c2          -0.000237 0.00000897  -26.43 < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.665642   Adj. R2: 0.209814

Interpretación M1: Los tres coeficientes de posgrado son positivos y estadísticamente significativos al 0.1%. Sin controles, los coeficientes son máximos porque capturan tanto el efecto del título como las diferencias en composición demográfica y sectorial entre grupos. Estos valores representan la brecha total observada y constituyen un límite superior de los retornos netos.

5.3 M2 — Posgrado + controles sociodemográficos

Controles agregados: sexo, jefatura del hogar, estado civil.

Propósito: Separar el efecto del posgrado de las diferencias demográficas entre grupos educativos. Por ejemplo, si los posgraduados son principalmente hombres en ciertos sectores, el control por sexo evita atribuir la prima de género al título.

summary(m2)
#> OLS estimation, Dep. Var.: ln_ingreso
#> Observations: 407,888
#> Standard-errors: Heteroskedasticity-robust 
#>                  Estimate Std. Error  t value  Pr(>|t|)    
#> (Intercept)     14.349115 0.00719346 1994.745 < 2.2e-16 ***
#> especializacion  0.399894 0.00227559  175.732 < 2.2e-16 ***
#> maestria         0.851461 0.00350576  242.875 < 2.2e-16 ***
#> doctorado        1.035701 0.00500246  207.038 < 2.2e-16 ***
#> exp_c            0.008838 0.00012078   73.170 < 2.2e-16 ***
#> exp_c2          -0.000175 0.00000915  -19.102 < 2.2e-16 ***
#> sexo_mujer      -0.102084 0.00217396  -46.958 < 2.2e-16 ***
#> jefatura_hogar   0.123985 0.00223027   55.592 < 2.2e-16 ***
#> estado_civil::2 -0.090785 0.00703619  -12.903 < 2.2e-16 ***
#> estado_civil::3  0.059672 0.00706940    8.441 < 2.2e-16 ***
#> estado_civil::4 -0.128849 0.00744772  -17.300 < 2.2e-16 ***
#> estado_civil::5 -0.127510 0.01327138   -9.608 < 2.2e-16 ***
#> estado_civil::6 -0.075324 0.00684374  -11.006 < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.656407   Adj. R2: 0.231576

Interpretación M2: Los coeficientes de posgrado se reducen ligeramente respecto a M1, indicando que parte de la brecha observada se explica por composición demográfica. El coeficiente negativo de sexo_mujer confirma la brecha salarial de género documentada en Colombia: las mujeres ganan menos incluso con el mismo nivel educativo, experiencia y tipo de empleo.

5.4 M3 — Posgrado + controles sociodemográficos y laborales

Controles agregados: sector público/privado, formalidad laboral, tamaño de empresa.

Propósito: Aislar el efecto neto del título de las diferencias en el tipo de empleo. Los posgraduados tienden a trabajar en empleos de mayor calidad (sector formal, grandes empresas, sector público), que tienen primas salariales propias.

summary(m3)
#> OLS estimation, Dep. Var.: ln_ingreso
#> Observations: 275,719
#> Standard-errors: Heteroskedasticity-robust 
#>                      Estimate Std. Error   t value          Pr(>|t|)    
#> (Intercept)         13.869967 0.03019990 459.27201         < 2.2e-16 ***
#> especializacion      0.362741 0.00217027 167.14101         < 2.2e-16 ***
#> maestria             0.755866 0.00368442 205.15176         < 2.2e-16 ***
#> doctorado            0.903751 0.00528986 170.84607         < 2.2e-16 ***
#> exp_c                0.011219 0.00010979 102.18314         < 2.2e-16 ***
#> exp_c2              -0.000021 0.00000855  -2.48067 0.013114133420353 *  
#> sexo_mujer          -0.133587 0.00207358 -64.42328         < 2.2e-16 ***
#> jefatura_hogar       0.091229 0.00211902  43.05231         < 2.2e-16 ***
#> sector_pub_priv      0.207112 0.00264790  78.21737         < 2.2e-16 ***
#> formalidad           0.472231 0.00419254 112.63612         < 2.2e-16 ***
#> tamano_empresa::1   -0.236147 0.17103781  -1.38067 0.167380491020320    
#> tamano_empresa::2   -1.214187 0.63849057  -1.90165 0.057217724525756 .  
#> tamano_empresa::3   -1.771908 0.19401225  -9.13297         < 2.2e-16 ***
#> tamano_empresa::4   -0.641016 0.26127179  -2.45345 0.014150085893812 *  
#> tamano_empresa::5   -0.360090 0.26127440  -1.37821 0.168140936515695    
#> tamano_empresa::6   -0.413243 0.15223886  -2.71444 0.006639257042017 ** 
#> tamano_empresa::7   -0.104955 0.22340960  -0.46979 0.638507645426996    
#> tamano_empresa::8   -0.404232 0.08658669  -4.66853 0.000003035100013 ***
#> tamano_empresa::9   -0.397169 0.09764822  -4.06735 0.000047564863489 ***
#> tamano_empresa::10  -0.416955 0.06750505  -6.17664 0.000000000655698 ***
#> tamano_empresa::11  -0.309396 0.42925193  -0.72078 0.471045540383429    
#> tamano_empresa::12  -0.266955 0.06636781  -4.02236 0.000057633166965 ***
#> tamano_empresa::13  -0.479798 0.16270875  -2.94881 0.003190221942001 ** 
#> tamano_empresa::14  -0.334029 0.10375808  -3.21931 0.001285154094024 ** 
#> tamano_empresa::15  -0.250381 0.06619570  -3.78244 0.000155331415296 ***
#> tamano_empresa::16  -0.210044 0.04896260  -4.28988 0.000017882942882 ***
#> tamano_empresa::17  -0.048176 0.09980384  -0.48270 0.629306964709903    
#> tamano_empresa::18  -0.159519 0.05679893  -2.80848 0.004977976496601 ** 
#> tamano_empresa::19  -0.208218 0.14440934  -1.44186 0.149343400750835    
#> tamano_empresa::20  -0.233707 0.03438625  -6.79652 0.000000000010739 ***
#> tamano_empresa::21  -0.098381 0.07580448  -1.29783 0.194347611990279    
#> tamano_empresa::22  -0.037783 0.03746421  -1.00850 0.313217076695461    
#> tamano_empresa::23  -0.097460 0.07720444  -1.26236 0.206819958414083    
#> tamano_empresa::24  -0.117430 0.03170184  -3.70421 0.000212094214902 ***
#> tamano_empresa::25  -0.066732 0.03285993  -2.03081 0.042275020143053 *  
#> tamano_empresa::26  -0.030631 0.04623188  -0.66255 0.507622498934045    
#> tamano_empresa::27   0.019462 0.06360737   0.30597 0.759627822030398    
#> tamano_empresa::28  -0.032323 0.04122301  -0.78410 0.432981425461425    
#> tamano_empresa::29   0.124319 0.07847053   1.58427 0.113132946607665    
#> tamano_empresa::30  -0.003334 0.03009359  -0.11078 0.911790598338998    
#> tamano_empresa::31   0.095911 0.08339534   1.15007 0.250113977273557    
#> tamano_empresa::32   0.128863 0.03068455   4.19959 0.000026748020830 ***
#> tamano_empresa::33  -0.001889 0.05780900  -0.03267 0.973937516698706    
#> tamano_empresa::34   0.194501 0.04454782   4.36612 0.000012651893854 ***
#> tamano_empresa::35   0.005580 0.03196907   0.17454 0.861444109506096    
#> tamano_empresa::36   0.077424 0.03099766   2.49773 0.012499620261398 *  
#> tamano_empresa::37   0.183104 0.04636030   3.94958 0.000078309264058 ***
#> tamano_empresa::38   0.159303 0.03524678   4.51966 0.000006196527146 ***
#> tamano_empresa::39   0.071662 0.04392897   1.63132 0.102823546845829    
#> tamano_empresa::40   0.080925 0.02980329   2.71529 0.006622241425122 ** 
#> tamano_empresa::41   0.083016 0.05059779   1.64071 0.100858958301296    
#> tamano_empresa::42   0.170802 0.03109072   5.49366 0.000000039403075 ***
#> tamano_empresa::43   0.169856 0.03643509   4.66189 0.000003134686244 ***
#> tamano_empresa::44   0.107143 0.03018508   3.54955 0.000385959861571 ***
#> tamano_empresa::45   0.187058 0.03028409   6.17678 0.000000000655132 ***
#> tamano_empresa::46   0.136793 0.03012431   4.54094 0.000005602817872 ***
#> tamano_empresa::47   0.087301 0.03019621   2.89111 0.003839127732199 ** 
#> tamano_empresa::48   0.021599 0.02980105   0.72478 0.468587269906323    
#> tamano_empresa::49   0.031628 0.03819692   0.82803 0.407656799757427    
#> tamano_empresa::50   0.191215 0.03038050   6.29399 0.000000000309870 ***
#> tamano_empresa::51   0.011544 0.04396457   0.26258 0.792875193348802    
#> tamano_empresa::52   0.097015 0.03398130   2.85495 0.004304623233722 ** 
#> tamano_empresa::53   0.110480 0.04546847   2.42983 0.015106698994436 *  
#> tamano_empresa::54   0.035172 0.03184154   1.10461 0.269329756868596    
#> tamano_empresa::55   0.227522 0.03398003   6.69577 0.000000000021495 ***
#> tamano_empresa::56   0.066640 0.03199026   2.08314 0.037239231077839 *  
#> tamano_empresa::57   0.158432 0.06012935   2.63485 0.008417934970544 ** 
#> tamano_empresa::58   0.167259 0.03998075   4.18348 0.000028717217569 ***
#> tamano_empresa::59   0.188997 0.05863795   3.22312 0.001268182560188 ** 
#> tamano_empresa::60   0.194766 0.03049599   6.38659 0.000000000169888 ***
#> tamano_empresa::61   0.167530 0.08468699   1.97822 0.047904409456796 *  
#> tamano_empresa::62   0.122460 0.06234603   1.96420 0.049507732296438 *  
#> tamano_empresa::63   0.021921 0.04614853   0.47501 0.634779116828788    
#> tamano_empresa::64   0.167779 0.04902016   3.42265 0.000620220446996 ***
#> tamano_empresa::65   0.275790 0.04785023   5.76361 0.000000008242102 ***
#> tamano_empresa::66   0.091501 0.04256415   2.14971 0.031578787608454 *  
#> tamano_empresa::67   0.116737 0.11010406   1.06024 0.289035769310477    
#> tamano_empresa::68   0.200514 0.05263727   3.80935 0.000139363378363 ***
#> tamano_empresa::69   0.107716 0.11629928   0.92620 0.354342480842170    
#> tamano_empresa::70   0.135523 0.03373548   4.01723 0.000058901106695 ***
#> tamano_empresa::71   0.148517 0.13303083   1.11641 0.264246876262710    
#> tamano_empresa::72   0.134427 0.03308586   4.06296 0.000048466842937 ***
#> tamano_empresa::73   0.134363 0.12451224   1.07912 0.280536507277676    
#> tamano_empresa::74   0.212792 0.09209730   2.31051 0.020860463066250 *  
#> tamano_empresa::75   0.235332 0.07993285   2.94412 0.003239032778473 ** 
#> tamano_empresa::76   0.160179 0.10961708   1.46125 0.143946557225082    
#> tamano_empresa::77   0.048598 0.06272598   0.77477 0.438477687517450    
#> tamano_empresa::78   0.107419 0.06844197   1.56949 0.116534190897650    
#> tamano_empresa::79   0.449135 0.18361472   2.44607 0.014442821631824 *  
#> tamano_empresa::80   0.283835 0.04635808   6.12267 0.000000000921439 ***
#> tamano_empresa::81  -0.169458 0.09278242  -1.82640 0.067791351475289 .  
#> tamano_empresa::82   0.262131 0.10289786   2.54749 0.010850657413040 *  
#> tamano_empresa::83   0.318374 0.56121870   0.56729 0.570517530196451    
#> tamano_empresa::84   0.201783 0.03640988   5.54197 0.000000029935229 ***
#> tamano_empresa::85   0.227471 0.14378590   1.58201 0.113647633519675    
#> tamano_empresa::86  -0.013384 0.07674987  -0.17439 0.861562649916848    
#> tamano_empresa::87   1.955109 0.03010294  64.94745         < 2.2e-16 ***
#> tamano_empresa::88   0.352002 0.15534904   2.26588 0.023459561918621 *  
#> tamano_empresa::90   0.328505 0.06040760   5.43815 0.000000053883526 ***
#> tamano_empresa::91   0.078807 0.11145682   0.70706 0.479530525481127    
#> tamano_empresa::92   0.427574 0.17608967   2.42816 0.015176239175742 *  
#> tamano_empresa::93   1.440718 0.35453308   4.06371 0.000048312860582 ***
#> tamano_empresa::94   0.737482 0.24775379   2.97667 0.002914206401450 ** 
#> tamano_empresa::95   0.112777 0.18981044   0.59416 0.552408592904795    
#> tamano_empresa::96   0.261883 0.06037472   4.33762 0.000014408313277 ***
#> tamano_empresa::97  -0.220743 0.19458135  -1.13445 0.256606659000570    
#> tamano_empresa::98   0.195921 0.08394183   2.33401 0.019596142129813 *  
#> tamano_empresa::100  0.387690 0.11105211   3.49106 0.000481176794589 ***
#> tamano_empresa::102 -0.039050 0.27799043  -0.14047 0.888286415134821    
#> tamano_empresa::104 -0.026101 0.15218639  -0.17151 0.863823551302623    
#> tamano_empresa::105  0.313571 0.12023979   2.60788 0.009110930850338 ** 
#> tamano_empresa::107  1.108286 0.02983143  37.15162         < 2.2e-16 ***
#> tamano_empresa::108  0.124226 0.11877427   1.04590 0.295608698253947    
#> tamano_empresa::110  0.460779 0.29361404   1.56934 0.116570872388827    
#> tamano_empresa::112  0.268702 0.11488670   2.33884 0.019344427463979 *  
#> tamano_empresa::114  1.290473 0.03014752  42.80529         < 2.2e-16 ***
#> tamano_empresa::115  1.034975 0.12133032   8.53022         < 2.2e-16 ***
#> tamano_empresa::119  0.611120 0.56387748   1.08378 0.278462839647370    
#> tamano_empresa::120  0.178044 0.16930287   1.05163 0.292970374570496    
#> tamano_empresa::125 -0.225045 0.15464076  -1.45528 0.145594376379100    
#> tamano_empresa::126  0.589790 0.16227769   3.63445 0.000278627248889 ***
#> tamano_empresa::130  0.266596 0.07261987   3.67112 0.000241535083587 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.520666   Adj. R2: 0.379243
cat(sprintf("\nObservaciones eliminadas por NA en sector_pub_priv: %d\n",
            nrow(muestra_mincer) - m3$nobs))
#> 
#> Observaciones eliminadas por NA en sector_pub_priv: 132169

Interpretación M3: La reducción adicional de los coeficientes respecto a M2 revela que parte del diferencial salarial del posgrado se explica por el tipo de empleo al que acceden los posgraduados, no exclusivamente por el título. El efecto neto del posgrado —controlando por dónde y cómo trabajan— sigue siendo positivo y altamente significativo.

Nota sobre NA: Los 132,169 registros eliminados corresponden a trabajadores por cuenta propia, patrones y familiares sin remuneración para quienes sector_pub_priv es NA por diseño (no aplica la categoría público/privado).

5.5 M4 — Modelo completo con efectos fijos ⭐ MODELO PRINCIPAL

Especificación completa:

\[\ln(w_{idt}) = \beta_1 \text{Espec}_{idt} + \beta_2 \text{Maest}_{idt} + \beta_3 \text{Doc}_{idt} + \beta_4 \tilde{\text{exp}}_{idt} + \beta_5 \tilde{\text{exp}}_{idt}^2 + \gamma \mathbf{X}_{idt} + \alpha_d + \lambda_t + \varepsilon_{idt}\]

donde \(d\) = departamento, \(t\) = año.

¿Por qué efectos fijos? Los efectos fijos de departamento (\(\alpha_d\)) controlan todas las diferencias permanentes y no observadas entre departamentos: calidad de las instituciones, demanda local de profesionales, infraestructura, costo de vida, etc. Los efectos fijos de año (\(\lambda_t\)) controlan shocks macroeconómicos comunes: inflación, ciclo económico, pandemia COVID-19, reformas laborales. Sin estos controles, los coeficientes de posgrado capturarían también las diferencias regionales y temporales, sesgando la estimación.

summary(m4)
#> OLS estimation, Dep. Var.: ln_ingreso
#> Observations: 275,719
#> Fixed-effects: departamento: 33,  anio: 8
#> Standard-errors: Heteroskedasticity-robust 
#>                      Estimate Std. Error   t value              Pr(>|t|)    
#> especializacion      0.417943 0.00228275 183.08740             < 2.2e-16 ***
#> maestria             0.828849 0.00384571 215.52583             < 2.2e-16 ***
#> doctorado            0.959503 0.00531762 180.43841             < 2.2e-16 ***
#> exp_c                0.010970 0.00010591 103.57314             < 2.2e-16 ***
#> exp_c2              -0.000018 0.00000827  -2.17354 0.0297404158771178463 *  
#> sexo_mujer          -0.130594 0.00199281 -65.53257             < 2.2e-16 ***
#> jefatura_hogar       0.093980 0.00203805  46.11248             < 2.2e-16 ***
#> sector_pub_priv      0.244121 0.00260962  93.54646             < 2.2e-16 ***
#> formalidad           0.436846 0.00408182 107.02245             < 2.2e-16 ***
#> tamano_empresa::1   -0.105695 0.06869016  -1.53872 0.1238748517033659569    
#> tamano_empresa::2   -1.255756 0.63994966  -1.96227 0.0497317176602048092 *  
#> tamano_empresa::3   -1.752799 0.18514634  -9.46710             < 2.2e-16 ***
#> tamano_empresa::4   -0.685224 0.27225987  -2.51680 0.0118431504827927522 *  
#> tamano_empresa::5   -0.340711 0.25718767  -1.32476 0.1852532188804079105    
#> tamano_empresa::6   -0.458878 0.14496870  -3.16536 0.0015490880436801371 ** 
#> tamano_empresa::7   -0.121655 0.19767701  -0.61542 0.5382754315856401739    
#> tamano_empresa::8   -0.415195 0.08496785  -4.88649 0.0000010270510741545 ***
#> tamano_empresa::9   -0.454328 0.09742074  -4.66356 0.0000031092768539100 ***
#> tamano_empresa::10  -0.449191 0.06562093  -6.84524 0.0000000000076504646 ***
#> tamano_empresa::11  -0.289148 0.39665619  -0.72896 0.4660248154986867952    
#> tamano_empresa::12  -0.298559 0.06375237  -4.68311 0.0000028269408516307 ***
#> tamano_empresa::13  -0.468481 0.15752285  -2.97405 0.0029392078274375483 ** 
#> tamano_empresa::14  -0.379265 0.10005630  -3.79051 0.0001503679829231416 ***
#> tamano_empresa::15  -0.268073 0.06542037  -4.09770 0.0000417400794240479 ***
#> tamano_empresa::16  -0.235512 0.04795015  -4.91160 0.0000009038899476465 ***
#> tamano_empresa::17  -0.149551 0.09071209  -1.64863 0.0992248337320270485 .  
#> tamano_empresa::18  -0.213784 0.05405011  -3.95529 0.0000764614902046292 ***
#> tamano_empresa::19  -0.264648 0.15123984  -1.74986 0.0801439202914892568 .  
#> tamano_empresa::20  -0.261159 0.03291336  -7.93474 0.0000000000000021173 ***
#> tamano_empresa::21  -0.128292 0.07292786  -1.75916 0.0785514790557471504 .  
#> tamano_empresa::22  -0.091203 0.03608223  -2.52765 0.0114832981320188501 *  
#> tamano_empresa::23  -0.175528 0.07035655  -2.49484 0.0126020650673581563 *  
#> tamano_empresa::24  -0.160414 0.03025983  -5.30122 0.0000001151226725930 ***
#> tamano_empresa::25  -0.089358 0.03136092  -2.84934 0.0043813036016834362 ** 
#> tamano_empresa::26  -0.045736 0.04362348  -1.04843 0.2944398183656761203    
#> tamano_empresa::27  -0.069860 0.05882425  -1.18760 0.2349924035174783821    
#> tamano_empresa::28  -0.065342 0.03949036  -1.65462 0.0980021674231136564 .  
#> tamano_empresa::29   0.084749 0.07641815   1.10902 0.2674243551654600370    
#> tamano_empresa::30  -0.039018 0.02869262  -1.35986 0.1738759386222510084    
#> tamano_empresa::31   0.026194 0.07633214   0.34315 0.7314827759207840341    
#> tamano_empresa::32   0.065921 0.02922112   2.25595 0.0240748657250621778 *  
#> tamano_empresa::33  -0.094435 0.05734467  -1.64680 0.0996011174293988111 .  
#> tamano_empresa::34   0.075330 0.04290091   1.75591 0.0791045965636813508 .  
#> tamano_empresa::35  -0.042698 0.03049845  -1.39999 0.1615176736289217485    
#> tamano_empresa::36   0.052217 0.02955610   1.76670 0.0772789464063635828 .  
#> tamano_empresa::37   0.074838 0.04414501   1.69529 0.0900220850406130146 .  
#> tamano_empresa::38   0.028213 0.03346089   0.84316 0.3991418256331791259    
#> tamano_empresa::39   0.002940 0.04266200   0.06892 0.9450530173379183552    
#> tamano_empresa::40   0.053379 0.02837965   1.88088 0.0599891544111420816 .  
#> tamano_empresa::41   0.018571 0.04769623   0.38936 0.6970108641186379961    
#> tamano_empresa::42   0.090757 0.02963445   3.06255 0.0021947917263668063 ** 
#> tamano_empresa::43   0.093451 0.03506114   2.66538 0.0076906224376049976 ** 
#> tamano_empresa::44   0.021961 0.02875628   0.76368 0.4450559095680369781    
#> tamano_empresa::45   0.127761 0.02883835   4.43023 0.0000094169235792562 ***
#> tamano_empresa::46   0.012619 0.02873518   0.43915 0.6605547301732883625    
#> tamano_empresa::47   0.013340 0.02880844   0.46307 0.6433149006360059374    
#> tamano_empresa::48   0.016987 0.02837928   0.59859 0.5494482489907086542    
#> tamano_empresa::49   0.010517 0.03628319   0.28987 0.7719149567741807605    
#> tamano_empresa::50   0.142004 0.02893325   4.90800 0.0000009206147172992 ***
#> tamano_empresa::51  -0.043595 0.04252437  -1.02517 0.3052840203946922126    
#> tamano_empresa::52   0.065308 0.03237833   2.01704 0.0436927090270104318 *  
#> tamano_empresa::53   0.029933 0.04351164   0.68793 0.4914964567491031389    
#> tamano_empresa::54   0.008110 0.03041070   0.26668 0.7897180030395558603    
#> tamano_empresa::55   0.159330 0.03237711   4.92108 0.0000008611690151958 ***
#> tamano_empresa::56   0.044522 0.03044091   1.46257 0.1435851687581787550    
#> tamano_empresa::57   0.066449 0.05606744   1.18517 0.2359533587365581775    
#> tamano_empresa::58   0.101713 0.03830690   2.65522 0.0079262469624329836 ** 
#> tamano_empresa::59   0.097647 0.05433510   1.79712 0.0723178279763302817 .  
#> tamano_empresa::60   0.149597 0.02906280   5.14736 0.0000002643537762224 ***
#> tamano_empresa::61   0.086824 0.08086575   1.07368 0.2829673888359419132    
#> tamano_empresa::62   0.099711 0.05985654   1.66583 0.0957479538236743755 .  
#> tamano_empresa::63   0.007927 0.04505531   0.17593 0.8603496290824167447    
#> tamano_empresa::64   0.110297 0.04679954   2.35680 0.0184338264263799560 *  
#> tamano_empresa::65   0.224693 0.04558565   4.92904 0.0000008268315128987 ***
#> tamano_empresa::66   0.045239 0.04122550   1.09736 0.2724849779792098969    
#> tamano_empresa::67   0.047481 0.10872296   0.43671 0.6623193134699942863    
#> tamano_empresa::68   0.110868 0.05177425   2.14137 0.0322449125675720386 *  
#> tamano_empresa::69   0.097411 0.11412012   0.85358 0.3933385709723808965    
#> tamano_empresa::70   0.108769 0.03229825   3.36766 0.0007582004536717058 ***
#> tamano_empresa::71   0.069719 0.14093956   0.49467 0.6208296725649636860    
#> tamano_empresa::72   0.107335 0.03167209   3.38894 0.0007017403046348645 ***
#> tamano_empresa::73   0.029816 0.11304701   0.26375 0.7919719755572005582    
#> tamano_empresa::74   0.143283 0.08906299   1.60878 0.1076652492864342558    
#> tamano_empresa::75   0.205190 0.07728249   2.65507 0.0079296282721296376 ** 
#> tamano_empresa::76   0.049053 0.10554389   0.46476 0.6421034531903574427    
#> tamano_empresa::77  -0.005750 0.06096448  -0.09432 0.9248525750344905871    
#> tamano_empresa::78   0.051212 0.06484572   0.78975 0.4296730161523250047    
#> tamano_empresa::79   0.397248 0.18295195   2.17132 0.0299076169364355070 *  
#> tamano_empresa::80   0.255521 0.04461650   5.72704 0.0000000102301597161 ***
#> tamano_empresa::81  -0.180503 0.21454111  -0.84134 0.4001561634391761491    
#> tamano_empresa::82   0.253380 0.11626019   2.17942 0.0293011416638020473 *  
#> tamano_empresa::83   0.315220 0.52695290   0.59820 0.5497104883884376125    
#> tamano_empresa::84   0.177343 0.03540010   5.00968 0.0000005455305736188 ***
#> tamano_empresa::85   0.203511 0.15059681   1.35136 0.1765801227732081147    
#> tamano_empresa::86  -0.030485 0.08715433  -0.34978 0.7265017649610242545    
#> tamano_empresa::87   1.803377 0.02907545  62.02405             < 2.2e-16 ***
#> tamano_empresa::88   0.238800 0.16554531   1.44250 0.1491614959442925659    
#> tamano_empresa::90   0.297892 0.05831798   5.10807 0.0000003256816481605 ***
#> tamano_empresa::91   0.057123 0.10486846   0.54471 0.5859513525516901744    
#> tamano_empresa::92   0.388294 0.16471887   2.35731 0.0184083690035138428 *  
#> tamano_empresa::93   1.285549 0.31439502   4.08896 0.0000433434379070200 ***
#> tamano_empresa::94   0.716502 0.20263027   3.53601 0.0004062877340767903 ***
#> tamano_empresa::95   0.203013 0.14954702   1.35752 0.1746164151689970634    
#> tamano_empresa::96   0.240050 0.06088832   3.94247 0.0000806671443112238 ***
#> tamano_empresa::97  -0.167345 0.18217307  -0.91860 0.3583044133065651504    
#> tamano_empresa::98   0.201173 0.08238277   2.44193 0.0146097624088001449 *  
#> tamano_empresa::100  0.359676 0.10522037   3.41831 0.0006302079546535136 ***
#> tamano_empresa::102 -0.034257 0.27255199  -0.12569 0.8999781776803263966    
#> tamano_empresa::104  0.133774 0.13417400   0.99701 0.3187580211647042527    
#> tamano_empresa::105  0.291519 0.11344302   2.56974 0.0101779541413542732 *  
#> tamano_empresa::107  0.709930 0.02903915  24.44735             < 2.2e-16 ***
#> tamano_empresa::108  0.131178 0.11249593   1.16607 0.2435864639696230793    
#> tamano_empresa::110  0.434551 0.23979058   1.81221 0.0699544905427063185 .  
#> tamano_empresa::112  0.286588 0.11344171   2.52630 0.0115276073394261144 *  
#> tamano_empresa::114  1.146790 0.02930197  39.13698             < 2.2e-16 ***
#> tamano_empresa::115  0.844775 0.10593781   7.97425 0.0000000000000015389 ***
#> tamano_empresa::119  0.664547 0.52134748   1.27467 0.2024263628367219958    
#> tamano_empresa::120  0.189904 0.17736420   1.07070 0.2843047612437904492    
#> tamano_empresa::125 -0.232111 0.14827732  -1.56539 0.1174933117468762306    
#> tamano_empresa::126  0.540586 0.14442382   3.74305 0.0001818356563509034 ***
#> tamano_empresa::130  0.347512 0.07316969   4.74941 0.0000020411877093423 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.499351     Adj. R2: 0.428948
#>                  Within R2: 0.395234

¿Por qué M4 es el modelo principal?

  1. Mayor R² ajustado (0.429): explica el 42.9% de la varianza salarial, superando ampliamente a M1-M3.
  2. Efectos fijos justificados: la variación regional (Bogotá vs. Barranquilla) y temporal (2018 vs. 2022) es sustancial en Colombia y debe controlarse.
  3. Coeficientes más robustos: al controlar por más fuentes de variación, los coeficientes de posgrado reflejan más limpiamente el efecto neto del título.
  4. Errores estándar más pequeños que en M3 a pesar de la misma N: los EF absorben variación sistemática que de otra forma queda en el error.

Interpretación de coeficientes (conversión exacta 100×(e^β−1)):

cf4  <- coef(m4)
ci4  <- confint(m4, level=0.95)
se4  <- sqrt(diag(vcov(m4)))
vars <- intersect(c("especializacion","maestria","doctorado"), names(cf4))
tstat <- cf4[vars] / se4[vars]
pval  <- 2*pnorm(-abs(tstat))

ret <- data.table(
  `Nivel`              = c("Especialización","Maestría","Doctorado"),
  `β`                  = round(cf4[vars], 4),
  `Error estándar`     = round(se4[vars], 4),
  `t-estadístico`      = round(tstat, 2),
  `p-valor`            = ifelse(pval<0.001,"< 0.001", round(pval,4)),
  `IC 95% inf.`        = round(ci4[vars,1], 4),
  `IC 95% sup.`        = round(ci4[vars,2], 4),
  `Prima salarial (%)`  = round(100*(exp(cf4[vars])-1), 2),
  `IC inf. (%)`        = round(100*(exp(ci4[vars,1])-1), 2),
  `IC sup. (%)`        = round(100*(exp(ci4[vars,2])-1), 2)
)
kable(ret, caption="Retornos salariales estimados — Modelo M4 (grupo base: pregrado)") |>
  kable_styling(bootstrap_options=c("striped","hover")) |>
  column_spec(8, bold=TRUE, color="#1a5276") |>
  column_spec(4, color=ifelse(ret$`t-estadístico`>2,"darkgreen","red"))
Retornos salariales estimados — Modelo M4 (grupo base: pregrado)
Nivel β Error estándar t-estadístico p-valor IC 95% inf. IC 95% sup. Prima salarial (%) IC inf. (%) IC sup. (%)
Especialización 0.4179 0.0023 183.1 < 0.001 0.4135 0.4224 51.88 51.21 52.56
Maestría 0.8288 0.0038 215.5 < 0.001 0.8213 0.8364 129.07 127.35 130.80
Doctorado 0.9595 0.0053 180.4 < 0.001 0.9491 0.9699 161.04 158.33 163.77

5.6 M5 — Heterogeneidad por género (H3)

Propósito: Contrastar H3: ¿la prima salarial del posgrado es diferente para hombres y mujeres?

summary(m5)
#> OLS estimation, Dep. Var.: ln_ingreso
#> Observations: 275,719
#> Fixed-effects: departamento: 33,  anio: 8
#> Standard-errors: Heteroskedasticity-robust 
#>                  Estimate Std. Error t value            Pr(>|t|)    
#> especializacion  0.423171 0.00333331 126.952           < 2.2e-16 ***
#> maestria         0.841521 0.00455808 184.622           < 2.2e-16 ***
#> doctorado        0.971220 0.00585386 165.911           < 2.2e-16 ***
#> exp_c            0.012103 0.00010431 116.030           < 2.2e-16 ***
#> exp_c2          -0.000060 0.00000833  -7.166 0.00000000000077205 ***
#> sexo_mujer      -0.150148 0.00310285 -48.390           < 2.2e-16 ***
#> posgrado_x_sexo -0.009959 0.00401072  -2.483 0.01302300494208163 *  
#> sector_pub_priv  0.244862 0.00248061  98.710           < 2.2e-16 ***
#> formalidad       0.452916 0.00413129 109.630           < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.505118     Adj. R2: 0.415919
#>                  Within R2: 0.381184

Interpretación M5: El coeficiente de posgrado_x_sexo mide la diferencia en el retorno del posgrado para las mujeres respecto a los hombres. Un coeficiente negativo indica que las mujeres con posgrado capturan una prima menor que los hombres con el mismo nivel de formación. Este resultado, aunque estadísticamente pequeño, es evidencia de que la brecha salarial de género persiste incluso dentro del grupo de alta formación, un hallazgo con implicaciones importantes para políticas de equidad educativa.

5.7 M6 — Evolución temporal del retorno (H4)

Propósito: Contrastar H4: ¿el retorno del posgrado ha cambiado entre 2018 y 2025?

summary(m6)
#> OLS estimation, Dep. Var.: ln_ingreso
#> Observations: 275,719
#> Fixed-effects: departamento: 33
#> Standard-errors: Heteroskedasticity-robust 
#>                   Estimate Std. Error t value              Pr(>|t|)    
#> especializacion -11.677751 1.46023318  -7.997 0.0000000000000012779 ***
#> maestria        -11.289788 1.46087187  -7.728 0.0000000000000109515 ***
#> doctorado       -11.155953 1.46105669  -7.636 0.0000000000000225598 ***
#> exp_c             0.012660 0.00010602 119.416             < 2.2e-16 ***
#> exp_c2           -0.000079 0.00000846  -9.331             < 2.2e-16 ***
#> sexo_mujer       -0.153249 0.00200812 -76.315             < 2.2e-16 ***
#> posgrado_x_anio   0.005957 0.00072184   8.252             < 2.2e-16 ***
#> sector_pub_priv   0.262059 0.00250040 104.807             < 2.2e-16 ***
#> formalidad        0.454586 0.00419087 108.471             < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.513787     Adj. R2: 0.395715
#>                  Within R2: 0.380216

Interpretación M6: La interacción posgrado_x_anio captura la tendencia temporal del retorno al posgrado. Un coeficiente positivo indicaría que la prima salarial ha crecido con el tiempo (creciente valoración del capital humano avanzado); uno negativo, que se ha comprimido (posible saturación del mercado de posgraduados en Colombia).

5.8 M7 — Robustez: ingreso por hora

Propósito: Verificar que los retornos estimados no se expliquen simplemente por diferencias en jornada laboral (los posgraduados podrían trabajar más horas).

summary(m7)
#> OLS estimation, Dep. Var.: ln_ingreso_hora
#> Observations: 275,719
#> Fixed-effects: departamento: 33,  anio: 8
#> Standard-errors: Heteroskedasticity-robust 
#>                    Estimate Std. Error  t value  Pr(>|t|)    
#> especializacion  0.45036878 0.00236052 190.7918 < 2.2e-16 ***
#> maestria         0.87843227 0.00395829 221.9221 < 2.2e-16 ***
#> doctorado        1.04184953 0.00545108 191.1272 < 2.2e-16 ***
#> exp_c            0.01253030 0.00010701 117.0950 < 2.2e-16 ***
#> exp_c2           0.00000724 0.00000859   0.8429   0.39929    
#> sexo_mujer      -0.13185806 0.00203971 -64.6453 < 2.2e-16 ***
#> sector_pub_priv  0.32786812 0.00256336 127.9058 < 2.2e-16 ***
#> formalidad       0.37970588 0.00430384  88.2248 < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.520459     Adj. R2: 0.43195 
#>                  Within R2: 0.403294

Interpretación M7: La estabilidad de los coeficientes respecto a M4 —usando ln_ingreso_hora en lugar de ln_ingreso— confirma que los posgraduados no solo ganan más en total sino que ganan más por hora trabajada. Esto descarta la hipótesis de que la diferencia salarial se explica por mayor intensidad laboral y refuerza la interpretación de que refleja mayor productividad y valoración por hora de trabajo.


6 Tabla comparativa de modelos

etable(
  list("M0 Clásico"=m0, "M1 Bruto"=m1, "M2 +Demog."=m2,
       "M3 +Labor."=m3, "M4 Principal⭐"=m4),
  keep    = c("anios_educacion","especializacion","maestria","doctorado",
              "exp_c","sexo_mujer"),
  digits  = 3,
  se.below= TRUE,
  fitstat = c("n","r2","ar2"),
  title   = "Tabla 1. Ecuaciones de Mincer — Variable dependiente: ln(ingreso mensual)\nGrupo base: pregrado universitario | Errores estándar robustos entre paréntesis"
)
etable(
  list("M4 Principal"=m4, "M5 ×Género"=m5, "M6 ×Año"=m6, "M7 Ing/Hora"=m7),
  keep    = c("especializacion","maestria","doctorado","posgrado_x_sexo","posgrado_x_anio"),
  digits  = 3,
  se.below= TRUE,
  fitstat = c("n","r2"),
  title   = "Tabla 2. Heterogeneidad y robustez\nErrores estándar robustos entre paréntesis"
)

7 Criterios de selección del modelo

AIC y BIC: Los criterios de información de Akaike (AIC) y Bayesiano (BIC) permiten comparar modelos con distinto número de parámetros penalizando la complejidad. Menor AIC/BIC = mejor modelo. El BIC penaliza más fuertemente la complejidad en muestras grandes (penalización = \(k \ln(n)\) vs. \(2k\) en AIC), por lo que en \(n > 275{,}000\) favorece modelos más parsimoniosos. El R² ajustado penaliza la adición de variables que no mejoran el ajuste.

Importante: AIC/BIC y R² ajustado se calculan sobre los modelos M0-M3 porque la comparación de log-verosimilitudes con modelos que incluyen efectos fijos de alta dimensión (M4-M7) requiere tratamiento especial del número de parámetros efectivos.

aic_bic <- data.table(
  Modelo = c("M0 Clásico","M1 Dummies brutas","M2 +Demog.","M3 +Laborales"),
  N      = c(m0$nobs, m1$nobs, m2$nobs, m3$nobs),
  K      = c(length(coef(m0)), length(coef(m1)), length(coef(m2)), length(coef(m3))),
  R2     = round(c(r2(m0,"r2"), r2(m1,"r2"), r2(m2,"r2"), r2(m3,"r2")), 4),
  R2_adj = round(c(r2(m0,"ar2"), r2(m1,"ar2"), r2(m2,"ar2"), r2(m3,"ar2")), 4),
  AIC    = round(c(AIC(m0), AIC(m1), AIC(m2), AIC(m3)), 1),
  BIC    = round(c(BIC(m0), BIC(m1), BIC(m2), BIC(m3)), 1)
)
kable(aic_bic, caption="Criterios de información y bondad de ajuste (modelos sin EF)",
      format.args=list(big.mark=",")) |>
  kable_styling(bootstrap_options=c("striped","hover")) |>
  row_spec(which.min(aic_bic$AIC), background="#d5f5e3", bold=TRUE) |>
  footnote(general="Fila en verde = menor AIC (mejor balance ajuste-parsimonia).")
Criterios de información y bondad de ajuste (modelos sin EF)
Modelo N K R2 R2_adj AIC BIC
M0 Clásico 407,888 4 0.1817 0.1817 839,786 839,830
M1 Dummies brutas 407,888 6 0.2098 0.2098 825,525 825,590
M2 +Demog. 407,888 13 0.2316 0.2316 814,141 814,283
M3 +Laborales 275,719 122 0.3795 0.3792 422,807 424,091
Note:
Fila en verde = menor AIC (mejor balance ajuste-parsimonia).

Selección del modelo: Aunque AIC/BIC favorecen M3 entre los modelos sin EF (mayor ajuste con controles laborales), el modelo principal es M4 porque:

  1. Su R² ajustado (0.429) supera al de todos los demás modelos.
  2. La inclusión de efectos fijos de departamento y año está justificada teórica y estadísticamente por la variación regional y temporal sistemática en Colombia.
  3. Los coeficientes de posgrado son estables y robustos entre M3 y M4, lo que confirma que los EF no generan multicolinealidad sino que mejoran la especificación.

8 Resultados y gráfico de retornos

8.1 Retornos en porcentaje — Modelo principal (M4)

cf4  <- coef(m4)
ci4  <- confint(m4, level=0.95)
ci4_90 <- confint(m4, level=0.90)
vars <- intersect(c("especializacion","maestria","doctorado"), names(cf4))

ci_df <- data.table(
  variable   = vars,
  nivel      = factor(c("Especialización","Maestría","Doctorado"),
                      levels=c("Especialización","Maestría","Doctorado")),
  estimacion = cf4[vars],
  ic_inf_95  = ci4[vars,1],    ic_sup_95  = ci4[vars,2],
  ic_inf_90  = ci4_90[vars,1], ic_sup_90  = ci4_90[vars,2]
)
ci_df[, retorno   := 100*(exp(estimacion)-1)]
ci_df[, inf_95_p  := 100*(exp(ic_inf_95)-1)]
ci_df[, sup_95_p  := 100*(exp(ic_sup_95)-1)]
ci_df[, inf_90_p  := 100*(exp(ic_inf_90)-1)]
ci_df[, sup_90_p  := 100*(exp(ic_sup_90)-1)]

kable(ci_df[, .(
  Nivel = nivel,
  `β`   = round(estimacion,4),
  `Prima (%)` = round(retorno,2),
  `IC 90% inf (%)` = round(inf_90_p,2),
  `IC 90% sup (%)` = round(sup_90_p,2),
  `IC 95% inf (%)` = round(inf_95_p,2),
  `IC 95% sup (%)` = round(sup_95_p,2)
)], caption="Retornos salariales estimados con intervalos de confianza al 90% y 95%") |>
  kable_styling(bootstrap_options=c("striped","hover"))
Retornos salariales estimados con intervalos de confianza al 90% y 95%
Nivel β Prima (%) IC 90% inf (%) IC 90% sup (%) IC 95% inf (%) IC 95% sup (%)
Especialización 0.4179 51.88 51.31 52.45 51.21 52.56
Maestría 0.8288 129.07 127.62 130.52 127.35 130.80
Doctorado 0.9595 161.04 158.77 163.33 158.33 163.77

8.2 Gráfico principal de retornos

colores <- c("Especialización"="#85c1e9","Maestría"="#2e86c1","Doctorado"="#1a5276")

p_main <- ggplot(ci_df, aes(x=nivel, y=retorno, color=nivel)) +
  # IC 95%
  geom_errorbar(aes(ymin=inf_95_p, ymax=sup_95_p),
                width=0.08, linewidth=0.7, alpha=0.5) +
  # IC 90%
  geom_errorbar(aes(ymin=inf_90_p, ymax=sup_90_p),
                width=0.12, linewidth=1.3) +
  geom_point(size=5.5) +
  geom_hline(yintercept=0, linetype="dashed", color="gray40", linewidth=0.5) +
  geom_text(aes(label=sprintf("+%.1f%%", retorno)),
            vjust=-1.6, fontface="bold", size=5) +
  scale_color_manual(values=colores) +
  scale_y_continuous(labels=function(x) paste0(x,"%"),
                     limits=c(-10, max(ci_df$sup_95_p)*1.18),
                     expand=c(0,0)) +
  labs(
    title    = "Prima salarial estimada del posgrado respecto al pregrado",
    subtitle = "Modelo M4 | EF departamento y año | Errores robustos | Línea gruesa=IC 90%, delgada=IC 95%",
    x        = NULL,
    y        = "Prima salarial sobre el pregrado (%)",
    caption  = paste0("Fuente: GEIH-DANE 2018-2025. N=",
                      formatC(m4$nobs, big.mark=","),
                      " obs. MCO con errores robustos de White (1980).")
  ) +
  theme_minimal(base_size=13) +
  theme(
    legend.position  = "none",
    plot.title       = element_text(face="bold", size=14, color="#1a5276"),
    plot.subtitle    = element_text(color="gray40", size=10),
    axis.text.x      = element_text(size=12, face="bold"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank()
  )
print(p_main)
Retornos salariales del posgrado en Colombia respecto al pregrado. Modelo M4 con EF departamento y año. Errores robustos. IC al 90% y 95%.

Retornos salariales del posgrado en Colombia respecto al pregrado. Modelo M4 con EF departamento y año. Errores robustos. IC al 90% y 95%.

# Guardar
ggsave(file.path(ruta_dir,"retornos_posgrado.png"),
       p_main, width=9, height=6, dpi=180)
message("Gráfico guardado.")

9 Contraste de hipótesis

cf4 <- coef(m4)
cf5 <- coef(m5)
cf6 <- coef(m6)
se4 <- sqrt(diag(vcov(m4)))
se5 <- sqrt(diag(vcov(m5)))

hip <- data.table(
  `#`        = c("H1","H1","H1","H2 (a)","H2 (b)","H3","H4"),
  Hipótesis  = c("Espec. → mayor ingreso vs. pregrado",
                 "Maestría → mayor ingreso vs. pregrado",
                 "Doctorado → mayor ingreso vs. pregrado",
                 "Retorno maestría > retorno especialización",
                 "Retorno doctorado > retorno maestría",
                 "Retorno posgrado varía por sexo",
                 "Retorno posgrado varía en el tiempo"),
  `H₀`       = c("β_espec=0","β_maest=0","β_doc=0",
                  "β_maest≤β_espec","β_doc≤β_maest",
                  "β_posgrado×mujer=0","β_posgrado×año=0"),
  Evidencia  = c(
    sprintf("β=%.3f, t=%.1f, p<0.001", cf4["especializacion"], cf4["especializacion"]/se4["especializacion"]),
    sprintf("β=%.3f, t=%.1f, p<0.001", cf4["maestria"],         cf4["maestria"]/se4["maestria"]),
    sprintf("β=%.3f, t=%.1f, p<0.001", cf4["doctorado"],        cf4["doctorado"]/se4["doctorado"]),
    sprintf("%.3f > %.3f ✓", cf4["maestria"], cf4["especializacion"]),
    sprintf("%.3f > %.3f ✓", cf4["doctorado"], cf4["maestria"]),
    sprintf("β=%.3f, p=%s (M5)", cf5["posgrado_x_sexo"],
            ifelse(abs(cf5["posgrado_x_sexo"]/sqrt(vcov(m5)["posgrado_x_sexo","posgrado_x_sexo"]))<2,"No sig.","Sig.*")),
    "Ver M6 — coef. posgrado_x_anio"
  ),
  Conclusión = c("CONFIRMA H1 ✅","CONFIRMA H1 ✅","CONFIRMA H1 ✅",
                 "CONFIRMA H2 ✅","CONFIRMA H2 ✅",
                 "Ver M5","Ver M6")
)
kable(hip, caption="Contraste formal de hipótesis de investigación") |>
  kable_styling(bootstrap_options=c("striped","hover")) |>
  row_spec(1:5, background="#eafaf1") |>
  row_spec(6:7, background="#fef9e7")
Contraste formal de hipótesis de investigación
# Hipótesis H₀ Evidencia Conclusión
H1 Espec. → mayor ingreso vs. pregrado β_espec=0 β=0.418, t=183.1, p<0.001 CONFIRMA H1 ✅ |
H1 Maestría → mayor ingreso vs. pregrado β_maest=0 β=0.829, t=215.5, p<0.001 CONFIRMA H1 ✅ |
H1 Doctorado → mayor ingreso vs. pregrado β_doc=0 β=0.960, t=180.4, p<0.001 CONFIRMA H1 ✅ |
H2 (a) Retorno maestría > retorno especialización β_maest≤β_espec 0.829 > 0.418 ✓ CONFIRMA H2 ✅ |
H2 (b) Retorno doctorado > retorno maestría β_doc≤β_maest 0.960 > 0.829 ✓ CONFIRMA H2 ✅ |
H3 Retorno posgrado varía por sexo β_posgrado×mujer=0 β=-0.010, p=Sig.* (M5) Ver M5
H4 Retorno posgrado varía en el tiempo β_posgrado×año=0 Ver M6 — coef. posgrado_x_anio Ver M6

10 Conclusiones

Conclusión 1 — H1 y H2 confirmadas: La formación de posgrado en Colombia se asocia con primas salariales positivas, estadísticamente significativas al 0.1% y crecientes por nivel de formación. Respecto al pregrado, el modelo principal estima: especialización +51.9%, maestría +129.1%, doctorado +161.0%. Estos resultados son robustos a la especificación (M1-M4) y a la variable dependiente (ingreso mensual vs. ingreso por hora, M7).

Conclusión 2 — Retornos por hora: El modelo M7 confirma que los diferenciales no se explican por mayor jornada laboral. Los posgraduados ganan más por hora trabajada, lo que indica mayor productividad percibida por el mercado laboral.

Conclusión 3 — Brecha de género: El modelo M5 encuentra evidencia de que las mujeres con posgrado capturan una prima salarial marginalmente menor que los hombres con igual nivel de formación, sugiriendo que la discriminación salarial por género persiste incluso en el segmento de alta formación.

Conclusión 4 — Heterogeneidad regional y temporal: Los efectos fijos de departamento y año explican una porción sustancial de la varianza salarial (el R² sube de 0.38 en M3 a 0.43 en M4), confirmando que el mercado laboral colombiano presenta diferencias regionales y ciclos temporales significativos que deben controlarse en cualquier estimación de retornos educativos.

10.1 Limitaciones

  1. Causalidad vs. asociación: Los coeficientes estimados son asociaciones econométricas, no efectos causales. El sesgo de selección —personas con mayor habilidad innata o mejor red de contactos tienen mayor probabilidad de hacer posgrado y de ganar más independientemente del título— no puede eliminarse con MCO. Se requeriría una variable instrumental (IV), un diseño de discontinuidad de regresión (RDD) o un modelo de emparejamiento por puntaje de propensión (PSM).

  2. Habilidad no observada: La GEIH no mide habilidad cognitiva, motivación ni calidad institucional del programa de posgrado. Los retornos estimados sobreestiman el efecto causal neto del título.

  3. Ingresos subreportados: Trabajadores independientes y cuentapropistas tienden a subreportar ingresos en encuestas de hogares.

  4. Cambio de marco muestral (2022): La transición Marco Anterior → Marco C18 implica cambios metodológicos en el DANE que, aunque homologados en el pipeline, constituyen una ruptura que debe declararse explícitamente en la tesis.


11 Exportar resultados

# Tabla de coeficientes todos los modelos
modelos_exp <- list(m0=m0,m1=m1,m2=m2,m3=m3,m4=m4,m5=m5,m6=m6,m7=m7)
tab_exp <- rbindlist(lapply(names(modelos_exp), function(nm){
  mod <- modelos_exp[[nm]]
  cf  <- coef(mod); se <- sqrt(diag(vcov(mod))); pv <- 2*pnorm(-abs(cf/se))
  data.table(modelo=nm, variable=names(cf), coef=round(cf,5), se=round(se,5),
             pvalor=round(pv,4), retorno_pct=round(100*(exp(cf)-1),2))
}), idcol=NULL)

ts <- format(Sys.time(),"%H%M%S")
fwrite(tab_exp,
       file.path(ruta_dir, sprintf("coeficientes_modelos_%s.csv",ts)),
       sep=";", dec=",", bom=TRUE)

write_parquet(muestra_mincer,
              file.path(ruta_dir,"muestra_mincer.parquet"),
              compression="snappy")

message(sprintf("Coeficientes exportados: coeficientes_modelos_%s.csv", ts))
message("Muestra Mincer guardada: muestra_mincer.parquet")

12 Referencias bibliográficas

  • Becker, G. (1964). Human Capital: A Theoretical and Empirical Analysis. NBER.
  • Mincer, J. (1974). Schooling, Experience, and Earnings. NBER/Columbia University Press.
  • Schultz, T. W. (1961). Investment in human capital. American Economic Review, 51(1), 1–17.
  • White, H. (1980). A heteroskedasticity-consistent covariance matrix estimator. Econometrica, 48(4), 817–838.
  • Greene, W. (2018). Econometric Analysis (8ª ed.). Pearson, cap. 4 y 9.
  • Wooldridge, J. (2010). Econometric Analysis of Cross Section and Panel Data (2ª ed.). MIT Press.
  • Psacharopoulos, G. & Patrinos, H. (2018). Returns to investment in education. World Bank Policy Research Working Paper 8402.
  • DANE. Gran Encuesta Integrada de Hogares (GEIH). Microdatos. https://microdatos.dane.gov.co
  • MEN-OLE. (2020). Seguimiento a la inserción laboral de los graduados de educación superior. Observatorio Laboral para la Educación.