1 Resultado principal y decisión

El objetivo de este punto es elegir un predictor individual para estimar el ingreso mensual y justificar la elección mediante la interpretación económica y la validación cruzada.

Este resultado se limita a la base analizada. Una asociación estadística, por significativa que sea, no equivale a identificar el efecto causal de experiencia, antigüedad o género sobre el ingreso.

2 Problema, usuarios y alcance

Pregunta de investigación. ¿En qué medida la experiencia laboral, la antigüedad en la empresa y el género se relacionan individualmente con el ingreso mensual de los empleados y cuál de estas variables permite la predicción simple más precisa?

Unidad de observación. Empleado. La estructura es de corte transversal: no se siguen los mismos empleados en diferentes periodos. La regresión se plantea como una herramienta ilustrativa para comparar magnitudes salariales en perfiles de una base de recursos humanos, no para decidir remuneraciones individuales reales.

Variable respuesta. monthly_income, cuantitativa y expresada en las unidades monetarias reportadas por el archivo. En el documento original, su escala se presenta como pesos, aunque la plantilla de referencia advierte que deriva de una multiplicación por 1.000 de valores de un conjunto sintético, sin conversión cambiaria documentada. No se interpreta como una muestra representativa de salarios de Colombia.

Predictores simples. years_of_experience (años de experiencia laboral acumulada), company_tenure (años en la empresa) y gender (variable cualitativa binaria, niveles M y F). La elección combina dos medidas de trayectoria laboral con una comparación descriptiva de grupos. Los resultados son asociaciones brutas, sin controlar simultáneamente por cargo, formación o responsabilidades.

3 Fuente, auditoría y preparación

3.1 Procedencia y selección

El archivo utilizado es dataset_03_employee_income_and_job_characteristics.xlsx, hoja employee_income. Contiene 1470 filas y 24 variables originales. De estas se seleccionan cuatro para el punto 1. El documento de partida identifica la base como adaptación del conjunto sintético IBM HR Analytics Employee Attrition & Performance. Por ello, el análisis es académico y no acredita condiciones del mercado laboral colombiano.

tab(data.frame(
  Variable=c("monthly_income", "years_of_experience", "company_tenure", "gender"),
  Rol=c("Respuesta", "Explicativa S1", "Explicativa S2", "Explicativa S3"),
  Tipo=c("Cuantitativa", "Cuantitativa discreta", "Cuantitativa discreta", "Cualitativa nominal binaria"),
  Unidad=c("Unidades monetarias / mes", "Años", "Años", "M / F")
), caption="Variables elegidas y escala de medición")
Variables elegidas y escala de medición
Variable Rol Tipo Unidad
monthly_income Respuesta Cuantitativa Unidades monetarias / mes
years_of_experience Explicativa S1 Cuantitativa discreta Años
company_tenure Explicativa S2 Cuantitativa discreta Años
gender Explicativa S3 Cualitativa nominal binaria M / F

3.2 Calidad, duplicados y valores atípicos

control <- data.frame(
  Verificacion=c("Filas originales", "Columnas originales", "Celdas faltantes en toda la base",
    "Celdas faltantes en variables seleccionadas", "Filas idénticas (todas las columnas)",
    "Filas idénticas (solo variables seleccionadas)", "Ingresos no positivos",
    "Experiencia negativa", "Antigüedad negativa", "Antigüedad mayor que experiencia"),
  Resultado=c(nrow(original), ncol(original), sum(is.na(original)),
    sum(is.na(datos)), sum(duplicated(original)), sum(duplicated(datos)),
    sum(datos$monthly_income <= 0), sum(datos$years_of_experience < 0),
    sum(datos$company_tenure < 0),
    sum(datos$company_tenure > datos$years_of_experience))
)
tab(control, caption="Auditoría básica de integridad y coherencia")
Auditoría básica de integridad y coherencia
Verificacion Resultado
Filas originales 1470
Columnas originales 24
Celdas faltantes en toda la base 0
Celdas faltantes en variables seleccionadas 0
Filas idénticas (todas las columnas) 0
Filas idénticas (solo variables seleccionadas) 3
Ingresos no positivos 0
Experiencia negativa 0
Antigüedad negativa 0
Antigüedad mayor que experiencia 0
nombres_tukey <- c(monthly_income="Ingreso mensual", years_of_experience="Experiencia",
                   company_tenure="Antigüedad")
atipicos <- do.call(rbind, lapply(names(nombres_tukey), function(v) {
  x <- regla_tukey(datos[[v]])
  data.frame(Variable=unname(nombres_tukey[v]),
             Limite_inferior=unname(x["Limite_inferior"]),
             Limite_superior=unname(x["Limite_superior"]),
             Casos=as.integer(x["Observaciones"]))
}))
rownames(atipicos) <- NULL
atipicos_display <- atipicos
atipicos_display$Limite_inferior <- num(atipicos$Limite_inferior,0)
atipicos_display$Limite_superior <- num(atipicos$Limite_superior,0)
tab(atipicos_display, caption="Valores señalados mediante la regla de Tukey (1,5 × RIQ)")
Valores señalados mediante la regla de Tukey (1,5 × RIQ)
Variable Limite_inferior Limite_superior Casos
Ingreso mensual -5.291.000 16.581.000 114
Experiencia -8 28 63
Antigüedad -6 18 104

No se eliminan ni imputan registros: 1470 observaciones forman la muestra de análisis. La auditoría distingue duplicados completos de coincidencias en las cuatro variables elegidas; dos empleados pueden compartir salario, experiencia, antigüedad y género sin tratarse del mismo registro. Los casos señalados por la regla de Tukey son candidatos para revisión, no errores demostrados. En particular, los ingresos altos pueden corresponder a cargos directivos que no se incluyen como predictor en esta etapa. El análisis principal conserva esas observaciones para no truncar artificialmente la distribución salarial.

4 Exploración

4.1 Medidas de centralidad y dispersión

resumen <- rbind(
  resumen_num(datos$monthly_income, "Ingreso mensual"),
  resumen_num(datos$years_of_experience, "Experiencia (años)"),
  resumen_num(datos$company_tenure, "Antigüedad (años)")
)
resumen_display <- resumen
for (v in c("Media", "Mediana", "DE", "Minimo", "Q1", "Q3", "Maximo")) {
  resumen_display[[v]] <- num(resumen_display[[v]], if (v %in% c("Media","Mediana","DE")) 1 else 0)
}
tab(resumen_display, caption="Estadísticos descriptivos de las variables cuantitativas")
Estadísticos descriptivos de las variables cuantitativas
Variable N Media Mediana DE Minimo Q1 Q3 Maximo
Ingreso mensual 1470 6.502.931,3 4.919.000,0 4.707.956,8 1.009.000 2.911.000 8.379.000 19.999.000
Experiencia (años) 1470 11,3 10,0 7,8 0 6 15 40
Antigüedad (años) 1470 7,0 5,0 6,1 0 3 9 40
freq_gender <- as.data.frame(table(datos$gender), stringsAsFactors=FALSE)
names(freq_gender) <- c("Genero", "Frecuencia")
freq_gender$Proporcion <- paste0(num(100*freq_gender$Frecuencia/sum(freq_gender$Frecuencia),1), "%")
tab(freq_gender, caption="Distribución de género")
Distribución de género
Genero Frecuencia Proporcion
M 882 60,0%
F 588 40,0%

El ingreso presenta una media de $6.502.931 y una mediana de $4.919.000. La media superior a la mediana apunta a una cola de ingresos altos. La mediana se conservará como referencia predictiva por ser resistente a observaciones extremas.

ggplot(datos, aes(x=monthly_income/1e6)) +
  geom_histogram(bins=35, fill="#447B9B", color="white", linewidth=0.2) +
  geom_vline(xintercept=median(datos$monthly_income)/1e6, linetype="dashed", color="#B45A4C") +
  labs(x="Ingreso mensual (millones)", y="Número de empleados") +
  theme_minimal(base_size=12)
Histograma de ingresos mensuales (millones de unidades monetarias).

Histograma de ingresos mensuales (millones de unidades monetarias).

ggplot(datos, aes(x="Empleados", y=monthly_income/1e6)) +
  geom_boxplot(fill="#ADC7D8", width=0.40, outlier.alpha=0.35) +
  labs(x=NULL, y="Ingreso mensual (millones)") +
  theme_minimal(base_size=12)
Distribución e ingresos potencialmente atípicos según la regla gráfica del boxplot.

Distribución e ingresos potencialmente atípicos según la regla gráfica del boxplot.

dat_larga <- rbind(
  data.frame(Indicador="Experiencia laboral", Anios=datos$years_of_experience),
  data.frame(Indicador="Antigüedad empresa", Anios=datos$company_tenure)
)
ggplot(dat_larga, aes(x=Anios)) +
  geom_histogram(binwidth=2, fill="#447B9B", color="white", boundary=0) +
  facet_wrap(~Indicador, scales="free_y") +
  labs(x="Años", y="Número de empleados") +
  theme_minimal(base_size=12)
Distribuciones de experiencia y antigüedad laboral.

Distribuciones de experiencia y antigüedad laboral.

4.2 Relación entre ingreso y predictores cuantitativos

dat_carrera <- rbind(
  data.frame(Predictor="Experiencia laboral", Anios=datos$years_of_experience,
             Ingreso=datos$monthly_income/1e6),
  data.frame(Predictor="Antigüedad empresa", Anios=datos$company_tenure,
             Ingreso=datos$monthly_income/1e6)
)
ggplot(dat_carrera, aes(x=Anios, y=Ingreso)) +
  geom_point(alpha=0.25, size=0.8, color="#32556D") +
  geom_smooth(method="lm", se=TRUE, color="#B45A4C", linewidth=0.9) +
  facet_wrap(~Predictor, scales="free_x") +
  labs(x="Años", y="Ingreso mensual (millones)") +
  theme_minimal(base_size=12)
Dispersión entre ingreso, experiencia y antigüedad; rectas estimadas por MCO.

Dispersión entre ingreso, experiencia y antigüedad; rectas estimadas por MCO.

correlaciones <- data.frame(
  Predictor=c("Experiencia laboral", "Antigüedad en la empresa"),
  Pearson=c(cor(datos$monthly_income, datos$years_of_experience),
            cor(datos$monthly_income, datos$company_tenure)),
  Spearman=c(cor(datos$monthly_income, datos$years_of_experience, method="spearman"),
             cor(datos$monthly_income, datos$company_tenure, method="spearman"))
)
tab(transform(correlaciones, Pearson=num(Pearson,3), Spearman=num(Spearman,3)),
    caption="Correlaciones de Pearson y Spearman con ingreso mensual")
Correlaciones de Pearson y Spearman con ingreso mensual
Predictor Pearson Spearman
Experiencia laboral 0,773 0,710
Antigüedad en la empresa 0,514 0,464

La correlación lineal de Pearson entre ingreso y experiencia es 0,773, frente a 0,514 con antigüedad. Estos coeficientes describen asociación entre variables, no efectos netos de mantener constantes otras características. Una correlación elevada tampoco demuestra que la relación sea causal ni que su forma sea exactamente lineal.

4.3 Comparación entre los grupos de género

resumen_genero <- do.call(rbind, lapply(levels(datos$gender), function(g) {
  x <- datos$monthly_income[datos$gender==g]
  data.frame(Genero=g, N=length(x), Media=mean(x), Mediana=median(x), DE=sd(x))
}))
resumen_genero$Media <- money(resumen_genero$Media)
resumen_genero$Mediana <- money(resumen_genero$Mediana)
resumen_genero$DE <- money(resumen_genero$DE)
tab(resumen_genero, caption="Comparación descriptiva de ingresos mensuales por género")
Comparación descriptiva de ingresos mensuales por género
Genero N Media Mediana DE
M 882 $6.380.508 $4.837.500 $4.714.857
F 588 $6.686.566 $5.081.500 $4.695.609
ggplot(datos, aes(x=gender, y=monthly_income/1e6, fill=gender)) +
  geom_boxplot(width=0.5, alpha=0.75, show.legend=FALSE) +
  scale_x_discrete(labels=c(M="Hombres (M)", F="Mujeres (F)")) +
  scale_fill_manual(values=c(M="#547B9A", F="#B7A0B4")) +
  labs(x="Género", y="Ingreso mensual (millones)") +
  theme_minimal(base_size=12)
Distribución del ingreso por género, sin controles por cargo o experiencia.

Distribución del ingreso por género, sin controles por cargo o experiencia.

La comparación entre grupos permite describir diferencias en la distribución de ingresos. No identifica una brecha salarial ajustada porque no separa las diferencias de cargo, responsabilidad, educación, experiencia ni jornada. Tampoco acredita discriminación.

5 Tres regresiones simples

Definición y utilidad. En regresión lineal simple se estima la media condicional de una respuesta a partir de un único predictor conceptual. Cuando el predictor es binario, el coeficiente de la categoría no referencial equivale a una diferencia de medias entre grupos.

Se estiman tres especificaciones independientes mediante mínimos cuadrados ordinarios (MCO):

En S1 y S2 se contrasta \(H_0:\beta_1=0\) frente a \(H_1:\beta_1\neq0\). En S3 se contrasta \(H_0:\beta_1=0\) frente a \(H_1:\beta_1\neq0\), lo que equivale a contrastar igualdad de medias en esta especificación simple.

coef_tab <- do.call(rbind, lapply(names(modelos), function(id) {
  z <- summary(modelos[[id]])$coefficients
  data.frame(Modelo=unname(model_names[id]), Termino=rownames(z),
             Estimacion=z[,1], EE=z[,2], Estadistico_t=z[,3], Valor_p=z[,4],
             row.names=NULL, check.names=FALSE)
}))
coef_display <- coef_tab
coef_display$Estimacion <- money(coef_display$Estimacion)
coef_display$EE <- money(coef_display$EE)
coef_display$Estadistico_t <- num(coef_display$Estadistico_t,3)
coef_display$Valor_p <- p_text(coef_display$Valor_p)
tab(coef_display, caption="Coeficientes y contraste t bilateral; errores estándar clásicos de MCO")
Coeficientes y contraste t bilateral; errores estándar clásicos de MCO
Modelo Termino Estimacion EE Estadistico_t Valor_p
S1: Experiencia (Intercept) $1.227.935 $137.299 8,944 <0,001
S1: Experiencia years_of_experience $467.658 $10.021 46,669 <0,001
S2: Antigüedad (Intercept) $3.733.273 $160.091 23,320 <0,001
S2: Antigüedad company_tenure $395.205 $17.201 22,976 <0,001
S3: Género (Intercept) $6.380.508 $158.499 40,256 <0,001
S3: Género genderF $306.058 $250.608 1,221 0,222
ajuste_tab <- do.call(rbind, lapply(names(modelos), function(id) {
  s <- summary(modelos[[id]])
  data.frame(Modelo=unname(model_names[id]),
             R2=num(s$r.squared,4), R2_ajustado=num(s$adj.r.squared,4),
             N=nobs(modelos[[id]]), row.names=NULL)
}))
tab(ajuste_tab, caption="Bondad de ajuste dentro de la muestra")
Bondad de ajuste dentro de la muestra
Modelo R2 R2_ajustado N
S1: Experiencia 0,5974 0,5971 1470
S2: Antigüedad 0,2645 0,2640 1470
S3: Género 0,0010 0,0003 1470

5.1 Interpretación de los coeficientes

S1: Experiencia laboral. La pendiente estimada indica que cada año adicional de experiencia se asocia con una diferencia promedio de $467.658 en el ingreso mensual, en una comparación transversal sin controlar por otras características laborales.

El modelo explica el 59,74 % de la variabilidad muestral de los ingresos (\(R^2\)). El valor p del coeficiente de experiencia es <0,001; por tanto, se rechaza H0 al 5 %.

S2: Antigüedad en la empresa. Cada año adicional de antigüedad se asocia con una diferencia promedio estimada de $395.205 en el ingreso mensual, sin controlar por otras características laborales.

El modelo presenta un coeficiente de determinación de $R^2 = $ 0,2645, mientras que el valor p de la pendiente es <0,001; por tanto, se rechaza H0 al 5 %.

La pendiente no debe interpretarse como el incremento salarial que recibiría un empleado por permanecer un año adicional en la empresa, ya que el modelo identifica una asociación estadística y no un efecto causal.

S3: Género. Tomando el grupo M como categoría de referencia, la constante representa su ingreso mensual promedio estimado: $6.380.508.

El coeficiente correspondiente al grupo F es **\(306.058** y representa la diferencia bruta de ingresos medios entre ambos grupos (\)F-M$).

El modelo presenta un coeficiente de determinación de $R^2 = $ 0,0010, mientras que el valor p del coeficiente de género es 0,222; por tanto, no se rechaza H0 al 5 %.

No rechazar la hipótesis de igualdad de medias no demuestra que los ingresos sean iguales entre ambos grupos. Asimismo, rechazarla no constituye evidencia suficiente para afirmar que existe discriminación salarial, puesto que el modelo no controla por otras características relevantes.

En conjunto, los tres modelos permiten identificar asociaciones estadísticas individuales con el ingreso mensual.

6 Validación y elección predictiva

Definición y utilidad. La validación cruzada de cinco particiones (5-fold cross-validation) predice registros no utilizados para estimar cada ajuste. Todos los candidatos usan las mismas particiones, estratificadas por género, y la semilla 2026. El error absoluto medio (MAE) se calcula en las unidades originales de ingreso:

\[ MAE = \frac{1}{n}\sum_{i=1}^{n}|y_i-\hat y_i|. \]

La referencia predice para cada pliegue únicamente la mediana del ingreso del entrenamiento. Así se evita calcular esa referencia con los ingresos de los registros evaluados.

validacion <- cv_summary
validacion$MAE <- money(validacion$MAE)
validacion$DE_pliegues <- money(validacion$DE_pliegues)
validacion <- rbind(validacion,
                    data.frame(Modelo="Referencia: mediana", MAE=money(mae_referencia),
                               DE_pliegues="No aplica"))
tab(validacion, caption="Errores fuera de muestra mediante 5-fold CV; DE entre pliegues orientativa")
Errores fuera de muestra mediante 5-fold CV; DE entre pliegues orientativa
Modelo MAE DE_pliegues
S1: Experiencia $2.220.214 $131.615
S2: Antigüedad $2.962.965 $251.298
S3: Género $3.635.559 $266.837
Referencia: mediana $3.350.557 No aplica
datos_graf <- rbind(cv_summary[,c("Modelo","MAE")],
                    data.frame(Modelo="Referencia: mediana", MAE=mae_referencia))
ggplot(datos_graf, aes(x=reorder(Modelo,MAE), y=MAE/1e6)) +
  geom_col(fill="#447B9B", width=0.65) +
  coord_flip() +
  labs(x=NULL, y="MAE de validación (millones de unidades monetarias)") +
  theme_minimal(base_size=12)
Comparación de MAE: menor es mejor; predicciones fuera del pliegue de entrenamiento.

Comparación de MAE: menor es mejor; predicciones fuera del pliegue de entrenamiento.

Selección. El mejor de los tres modelos simples es S1: Experiencia, con MAE $2.220.214. La mejora relativa frente a la referencia de mediana es 33,7 %. La elección se apoya en precisión predictiva, utilidad económica del predictor e interpretación de su coeficiente; no se basa únicamente en la significancia ni en el \(R^2\) observado dentro de la muestra.

Alcance de la comparación. Una variable puede presentar una relación estadísticamente significativa con el ingreso y, aun así, tener escaso valor predictivo para empleados no usados durante el ajuste. Esta validación interna no garantiza rendimiento en otras empresas, periodos o mercados laborales.

7 Conclusión del punto 1

La exploración identifica diferencias de ingresos asociadas con trayectoria laboral y diferencias descriptivas por género, pero los tres modelos son simples y, por tanto, no controlan las demás características de los empleados. La evidencia se interpreta como asociación transversal, no causalidad.

El criterio predictivo favorece S1: Experiencia entre los tres candidatos estudiados. Este resultado constituye una línea base para la siguiente etapa del caso; no se estiman aquí regresiones múltiples, selección AIC, diagnósticos completos ni escenarios de predicción.