1 INTRODUCCIÓN

El ingreso laboral constituye uno de los principales componentes de las condiciones económicas de los trabajadores y sus hogares, debido a que representa una fuente fundamental de recursos para satisfacer necesidades y acceder a bienes y servicios. Las diferencias en los ingresos pueden estar relacionadas con las condiciones en las que se desarrolla la actividad laboral, entre ellas la duración de la jornada, la realización de horas adicionales, la permanencia en el empleo y la existencia de beneficios recibidos como parte de la remuneración. Por esta razón, analizar los factores asociados a los ingresos laborales permite aproximarse a las características que acompañan las diferencias económicas existentes entre los trabajadores.

En Colombia, el mercado laboral presenta una amplia diversidad en las condiciones de empleo y remuneración de la población ocupada. Los trabajadores pueden desempeñarse bajo diferentes jornadas, tener distintos niveles de antigüedad en sus empleos y recibir formas de compensación que no necesariamente corresponden únicamente a pagos monetarios. En este sentido, aspectos como las horas trabajadas durante la semana, las horas extra, las vacaciones con sueldo y la recepción de alimentación o vivienda como parte de pago constituyen características relevantes para estudiar las condiciones laborales y su relación con los ingresos.

La disponibilidad de información estadística sobre estas características permite realizar un análisis cuantitativo de las condiciones laborales de los trabajadores colombianos. En este contexto, la Gran Encuesta Integrada de Hogares (GEIH), realizada por el Departamento Administrativo Nacional de Estadística (DANE), constituye una fuente de información que permite estudiar las características de la población, su participación en el mercado laboral, las condiciones de trabajo y los ingresos. Los microdatos de esta encuesta permiten relacionar diferentes características laborales con los ingresos obtenidos por los trabajadores.

Para el desarrollo de esta investigación se utilizan los microdatos de la GEIH correspondientes al mes de marzo de 2025, específicamente la información de la población ocupada. La variable dependiente del estudio es la cantidad de ingreso laboral en el mes, mientras que las variables explicativas corresponden a las horas trabajadas en la semana, las vacaciones con sueldo, la antigüedad en el trabajo actual, las horas extra en la semana, la recepción de comida como parte de pago y la recepción de vivienda como parte de pago. Estas variables permiten considerar tanto características relacionadas con el tiempo dedicado al trabajo como diferentes componentes de las condiciones de remuneración laboral.

La relación entre estas variables y el ingreso laboral puede estudiarse mediante un modelo de regresión lineal múltiple, herramienta estadística que permite analizar simultáneamente la asociación entre una variable dependiente y varias variables explicativas. En este caso, el modelo permite estimar cómo se relaciona la cantidad de ingreso laboral mensual con las características laborales seleccionadas, manteniendo constantes las demás variables incluidas en el análisis.

A partir de lo anterior, el presente estudio busca analizar los factores laborales asociados a los ingresos de los trabajadores en Colombia mediante el uso de los microdatos de la GEIH correspondientes a marzo de 2025 y un modelo de regresión lineal múltiple. De esta manera, se pretende aportar evidencia cuantitativa sobre la relación existente entre las condiciones laborales seleccionadas y la variación de los ingresos laborales de la población ocupada.

1.1 PREGUNTA DE INVESTIGACIÓN

¿Qué factores laborales están asociados a los ingresos de los trabajadores en Colombia?

1.2 OBJETIVO GENERAL:

Analizar los factores laborales asociados a los ingresos de los trabajadores en Colombia mediante microdatos de la GEIH y un modelo de regresión lineal múltiple, aportando evidencia cuantitativa sobre la relación entre las condiciones laborales y los ingresos.

1.3 OBJETIVOS ESPECIFICOS:

-Caracterizar las condiciones laborales y los ingresos de los trabajadores en Colombia mediante un análisis descriptivo de las variables seleccionadas.

-Analizar la relación entre las características laborales seleccionadas y el ingreso laboral mensual de los trabajadores.

-Estimar un modelo de regresión lineal múltiple para identificar los factores laborales asociados al ingreso laboral y evaluar el ajuste y cumplimiento de los supuestos del modelo.

2 FUENTE Y CONSTRUCCIÓN DE LA BASE DE DATOS

2.1 FUENTE DE INFORMACIÓN

Para el desarrollo de este estudio se utilizaron microdatos de la Gran Encuesta Integrada de Hogares (GEIH), realizada por el Departamento Administrativo Nacional de Estadística (DANE). Esta encuesta constituye una gran fuente de información sobre el mercado laboral colombiano que nos permite analizar diferentes características de la población relacionadas con el empleo, los ingresos, la educación y las condiciones laborales.

Los datos utilizados en este estudio corresponden al período de marzo de 2025, seleccionado debido a que contiene información mensual sobre las características laborales y los ingresos de las personas encuestadas. Información de la fuente:

Entidad: Departamento Administrativo Nacional de Estadística (DANE). Encuesta: Gran Encuesta Integrada de Hogares (GEIH). Período: marzo de 2025. Conjunto de datos: Marzo 2025.zip. Fuente de los microdatos: Microdatos DANE – GEIH 2025. Enlace de consulta: Catálogo oficial de microdatos GEIH 2025 – DANE Fecha de acceso: 4 de octubre de 2026.

La GEIH resulta adecuada para este estudio debido a que nos proporciona información sobre las condiciones del mercado laboral y permite identificar características individuales y laborales de los trabajadores, así como sus ingresos. En particular, esta base cuenta con archivos relacionados con ocupados, características generales, seguridad social y educación, entre otros componentes, lo que permite seleccionar variables relacionadas con las condiciones laborales y utilizarlas en un modelo de regresión lineal múltiple.

A partir de esta fuente se construyó la base de datos utilizada en el estudio, seleccionando las observaciones correspondientes a los trabajadores y las variables necesarias para analizar la relación entre sus características laborales y el ingreso laboral mensual.

2.2 UNIDAD DE ANÁLISIS Y PERÍODO

La unidad de análisis de este estudio corresponde a las personas (ocupadas) que tenían un trabajo o realizaban alguna actividad laboral durante el periodo de referencia de la encuesta en Colombia, debido a que el objetivo es analizar los factores laborales asociados con sus ingresos. Por lo tanto, cada observación de la base de datos representa a una persona ocupada que fue encuestada en el marco de la Gran Encuesta Integrada de Hogares (GEIH).

El período de estudio corresponde a marzo de 2025. Por lo tanto, la información utilizada refleja las características laborales y los ingresos reportados por las personas ocupadas durante dicho mes.

La selección de este período permite realizar un análisis de corte transversal, en el cual se estudia la relación entre el ingreso laboral y los diferentes factores laborales de los trabajadores en un momento específico del tiempo.

2.3 VARIABLES SELECCIONADAS

2.3.1 SELECCIÓN Y JUSTIFICACIÓN DE LOS DATOS

Para el desarrollo del modelo de regresión lineal múltiple se seleccionó como variable dependiente el ingreso laboral, definido como la cantidad de dinero recibida por el trabajador durante el mes. Esta variable constituye el resultado que se busca explicar a partir de diferentes características laborales asociadas con las condiciones de empleo de los trabajadores en Colombia.

Como variables independientes se seleccionaron:

Horas trabajadas en la semana y la antigüedad en el trabajo actual, debido a que permiten analizar características cuantitativas relacionadas con la situación laboral del trabajador. Las horas trabajadas permiten evaluar si existe una relación entre el tiempo dedicado al trabajo y el nivel de ingreso laboral, mientras que la antigüedad permite analizar si el tiempo que una persona lleva desempeñando su trabajo actual está asociado con diferencias en sus ingresos.

Asimismo, se incluyeron variables de carácter categórico relacionadas con las condiciones laborales:

Vacaciones con sueldo nos permite identificar si el trabajador cuenta con este beneficio y analizar su posible relación con el ingreso laboral. La variable comida como parte de pago permite evaluar si la percepción de este tipo de remuneración está asociada con diferencias en los ingresos. Por otra parte, las horas extra permiten analizar si el hecho de recibir o realizar pagos correspondientes a horas adicionales de trabajo se relaciona con el nivel de ingreso laboral. Finalmente, recibir vivienda como parte de pago se incorporó para determinar si este beneficio laboral presenta alguna asociación con los ingresos de los trabajadores.

La selección de estas variables responde a su relación con las condiciones laborales y económicas de los trabajadores y permite construir un modelo que examine de qué manera diferentes características del empleo se asocian con el ingreso laboral. La información utilizada corresponde a la Gran Encuesta Integrada de Hogares (GEIH) del DANE para marzo de 2025.

En la siguiente tabla se presentan y describen las variables seleccionadas para el modelo de regresión:

library(readxl)
library(broom)
library(dplyr)
library(kableExtra)

# 1. Definir la tabla descriptiva de las variables
variables_modelo <- data.frame(
  Variable = c("Ingreso laboral", "H. Trabajadas", "V. Sueldo", "Antiguedad trabajo", "Recibir Comida", "H. extra", "Recibir Vivienda", "Error"),
  Descripción = c(
    "Cantidad de ingreso laboral en el mes",
    "Horas trabajadas en la semana",
    "Vacaciones con sueldo",
    "Antiguedad en el trabajo actual",
    "Recibe comida como parte de pago",
    "Se pagaron horas extra en la semana",
    "Recibe vivienda como parte de pago",
    "Término de error aleatorio"
  ),
  Tipo_Variable = c(
    "Variable dependiente (cuantitativa)",
    "Cuantitativa",
    "Cualitativa",
    "Cuantitativa",
    "Cualitativa",
    "Categorica",
    "Cualitativa",
    "Error"
  )
)

# 2. Renderizar la tabla justo debajo del subtítulo
tabla <- kable(variables_modelo, 
               format = "html",
               col.names = c("Variable", "Descripción", "Tipo de Variable"),
               align = c('l', 'l', 'l'),
               caption = " Tabla 1. Tabla de Variables del Modelo de Regresión") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    font_size = 14,
    position = "center"
  ) %>%
  row_spec(0, background = "#2b6cb0", color = "white", bold = TRUE) %>%
  column_spec(1, bold = TRUE, width = "3cm") %>%
  column_spec(2, width = "7cm") %>%
  column_spec(3, width = "6cm") %>%
  footnote(
    general = "Elaboración propia con base en GEIH DANE 2025",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )

tabla
Tabla 1. Tabla de Variables del Modelo de Regresión
Variable Descripción Tipo de Variable
Ingreso laboral Cantidad de ingreso laboral en el mes Variable dependiente (cuantitativa)
H. Trabajadas Horas trabajadas en la semana Cuantitativa
V. Sueldo Vacaciones con sueldo Cualitativa
Antiguedad trabajo Antiguedad en el trabajo actual Cuantitativa
Recibir Comida Recibe comida como parte de pago Cualitativa
H. extra Se pagaron horas extra en la semana Categorica
Recibir Vivienda Recibe vivienda como parte de pago Cualitativa
Error Término de error aleatorio Error
Nota: Elaboración propia con base en GEIH DANE 2025

La selección de estas variables se fundamenta en su posible relación con el ingreso laboral mensual. Las horas trabajadas y la antigüedad en el empleo permiten considerar aspectos relacionados con la dedicación y experiencia laboral. Por su parte, las vacaciones con sueldo y las formas de remuneración en especie, como la recepción de comida y vivienda, permiten incorporar características de las condiciones laborales y de pago. Finalmente, el departamento permite considerar posibles diferencias territoriales en los ingresos de los trabajadores. En conjunto, estas variables permiten analizar diferentes características laborales y territoriales asociadas al ingreso laboral mensual.

2.4 PREPARACIÓN Y LIMPIEZA DE LOS DATOS

library(tidyverse)
library(scales)
library(readxl)
library(ggcorrplot)
library(visreg)
library(nortest)
library(lmtest)
library(ggthemes)
library(ggpmisc)
library(DT)
library(plotly)
library(reactable)
library(readxl)
library(broom)
library(dplyr)
library(kableExtra)


Base_datos <- read_excel("Ocupados.xlsx")


names(Base_datos) <- trimws(names(Base_datos))



Base_datos <- Base_datos %>%
  
  select(
    `Ingreso laboral`,
    `Horas trabajadas`,
    `Antiguedad  en el trabajo actual`,
    `Vacaciones con sueldo`,
    `Se pago horas extra`,
    `Pago en especie (comida)`,
    `Pago en especie (vivienda)`,
    Departamento) %>%
  
 
  filter(
    !is.na(`Ingreso laboral`),
    `Ingreso laboral` > 0) %>%
  
  
  mutate(
    
    `Vacaciones con sueldo` = case_when(
      `Vacaciones con sueldo` == "Si" ~ "Sí",
      `Vacaciones con sueldo` == "No" ~ "No",
      TRUE ~ "No informado"
    ),
    
    `Se pago horas extra` = case_when(
      `Se pago horas extra` == "Si" ~ "Sí",
      `Se pago horas extra` == "No" ~ "No",
      TRUE ~ "No informado"
    ),
    
    Departamento = case_when(
      Departamento == "VALLE DEL CAUCA" ~ "Valle del Cauca",
      Departamento == "CAUCA" ~ "Cauca",
      Departamento == "NARIÑO" ~ "Nariño",
      Departamento == "CHOCÓ" ~ "Chocó",
      TRUE ~ Departamento))


Base_datos <- Base_datos %>%
  mutate(
    `Vacaciones con sueldo` =
      factor(`Vacaciones con sueldo`),
    
    `Se pago horas extra` =
      factor(`Se pago horas extra`),
    
    Departamento =
      factor(Departamento)
  )

reactable(
  
  Base_datos,
  
  
  defaultPageSize = 15,
  
  
  showPageSizeOptions = TRUE,
  
  pageSizeOptions = c( 10, 15, 25, 50),
  
 
  striped = TRUE,
  highlight = TRUE,
  bordered = TRUE,
  filterable = TRUE,
  resizable = TRUE,
  wrap = FALSE,
  
 
  defaultColDef = colDef(
    
    sortable = TRUE,
    
    header = function(value) {
      toupper(value)
    },
    
    cell = function(value) {
      
      if (is.numeric(value)) {
        
        format(
          value,
          scientific = FALSE,
          big.mark = ".",
          decimal.mark = ",",
          nsmall = 0,
          trim = TRUE
        )
        
      } else {
        
        as.character(value)
        
      }
    },
    
    align = "center",
    
    minWidth = 140,
    
    headerStyle = list(
      background = "#2E86AB",
      color = "white",
      fontWeight = "bold"
    )
  ),
  

  columns = list(
    
    `Ingreso laboral` = colDef(
      
      cell = function(value) {
        
        if (is.na(value)) {
          return("")
        }
        
        paste0(
          "$",
          format(
            value,
            scientific = FALSE,
            big.mark = ".",
            decimal.mark = ",",
            nsmall = 0,
            trim = TRUE ))},
      
      align = "right")),
  
  

  
  style = list(
    fontFamily = "Arial, sans-serif",
    fontSize = "14px"),
  

  theme = reactableTheme(
    
    stripedColor = "#f6f8fa",
    
    highlightColor = "#e8f4fd",
    
    cellPadding = "8px 12px",
    
    style = list(
      fontFamily =
        "-apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif"
    ),
    
    searchInputStyle = list(
      width = "100%",
      padding = "8px 12px"
    )
  )
)

3 METODOLOGÍA

3.1 ESTADISTICAS DESCRIPTIVAS

3.1.1 ANÁLISIS DESCRIPTIVO DEL INGRESO LABORAL A NIVEL DEPARTAMENTAL

Con el proposito de examinar el comportamiento del ingreso laboral como variable dependiente, se realizó un análisis descriptivo entre los diferentes departamentos. En la Tabla 2 se sintetizan las medidas de tendencia central y dispersión correspondientes.

library(readxl)
library(dplyr)
library(broom)
library(kableExtra)

Base_datos <- read_excel("Ocupados.xlsx")
names(Base_datos) <- trimws(names(Base_datos))
Base_datos <- Base_datos %>%
  filter(!is.na(Departamento), Departamento != "NA")
options(scipen = 999)
tabla_promedios <- Base_datos %>%
  group_by(Departamento) %>%  
  summarise(
    `N Observaciones` = n(),
    `Ingreso Promedio` = mean(`Ingreso laboral`, na.rm = TRUE),
    `Desv. Estándar Ingreso` = sd(`Ingreso laboral`, na.rm = TRUE),
    `Ingreso Mínimo` = min(`Ingreso laboral`, na.rm = TRUE),
    `Ingreso Máximo` = max(`Ingreso laboral`, na.rm = TRUE),
    .groups = 'drop'
  ) %>%
  mutate(
    `Ingreso Promedio` = round(`Ingreso Promedio`, 2),
    `Desv. Estándar Ingreso` = round(`Desv. Estándar Ingreso`, 2)
  )

tabla_promedios %>%
  kbl(
    caption = "Tabla 2: Estadísticas Descriptivas del ingreso laboral por Departamento",
    align = c("l", "r", "r", "r", "r", "r"),
    col.names = c("Departamento", "N", "Ingreso promedio",
                  "Desv. Estándar", "Mínimo", "Máximo")
    
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    font_size = 14,
    position = "center"
  ) %>%
  row_spec(0, background = "#2b6cb0", color = "white", bold = TRUE) %>%
  column_spec(1, bold = TRUE, width = "3cm") %>%
  column_spec(2:6, width = "2.5cm") %>%  # Corregido: de 2:7 a 2:6
  footnote(
    general = "Fuente: Elaboración propia con base en GEIH DANE 2025",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 2: Estadísticas Descriptivas del ingreso laboral por Departamento
Departamento N Ingreso promedio Desv. Estándar Mínimo Máximo
ANTIOQUIA 3165 1738271 2075836.0 0 49000000
CAQUETA 83 1444117 995462.1 100000 5000000
CAUCA 2016 1643945 2011889.5 0 55000000
LA GUAJIRA 204 2221065 3547356.9 50000 30000000
TOLIMA 196 2012761 2282622.6 25000 22000000
VALLE DEL CAUCA 1526 2023987 2269033.2 0 30000000
Nota: Fuente: Elaboración propia con base en GEIH DANE 2025

Los resultados presentados en la Figura 1 ilustran la distribución del ingreso laboral promedio mensual en una muestra de seis departamentos colombianos: Antioquia, Caquetá, Cauca, La Guajira, Tolima y Valle del cauca.

A partir del análisis territorial, se evidencia una disparidad notable entre las regiones. La Guajira encabeza la distribución con el ingreso promedio más elevado ($2.221.065 COP), seguida por Valle del Cauca ($2.024.256 COP) y Tolima ($2.012.761 COP). En un nivel intermedio se posicionan Antioquia ($1.738.725 COP) y Cauca ($1.643.945 COP), mientras que Caquetá registra el valor más bajo de la muestra, situándose en $1.444.117 COP.

Aunque La Guajira registra el promedio más alto, este resultado responde al sesgo que generan sectores extractivos altamente capitalizados (como la minería a gran escala). Por otro lado departamentos como Valle del Cauca y Tolima muestran ingresos consistentes respaldados por la presencia de tejido industrial, servicios y cadenas agroindustriales formales que estabilizan la remuneración promedio del trabajo. En el departamento Caquetá se observa el impacto de la concentración del empleo en actividades agropecuarias de baja productividad e informalidad laboral.

3.2 VARIABLES EXPLICATIVAS CUANTITATIVAS

3.2.1 HORAS TRABAJADAS EN LA SEMANA

Horas trabajadas a la semana, las cuales son medidas en número de horas tal como las reporta la Gran Encuesta Integrada de Hogares (GEIH) 2025. La Tabla 3 resume las estadísticas descriptivas por departamento.

library(readxl)
library(dplyr)
library(kableExtra)


Ocupados <- read_excel("Ocupados.xlsx")

tabla_horas <- Ocupados %>%
  group_by(Departamento) %>%
  summarise(
    `Horas Promedio`   = mean(`Horas trabajadas`, na.rm = TRUE),
    `Desv. Est. Horas` = sd(`Horas trabajadas`, na.rm = TRUE),
    `Horas Mínimas`    = min(`Horas trabajadas`, na.rm = TRUE),
    `Horas Máximas`    = max(`Horas trabajadas`, na.rm = TRUE),
    .groups = 'drop'
  ) %>%
  mutate(
    `Horas Promedio`   = round(`Horas Promedio`, 1),
    `Desv. Est. Horas` = round(`Desv. Est. Horas`, 2)
  )

tabla_horas %>%
  kbl(
    caption = "Tabla 3: Estadísticas descriptivas de las horas trabajadas por departamento",
    align = c("l", "r", "r", "r", "r"),
    col.names = c("Departamento", "Horas Promedio", "Desv. Estándar", "Mínimo", "Máximo")
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    font_size = 14,
    position = "center"
  ) %>%
  row_spec(0, background = "#2b6cb0", color = "white", bold = TRUE) %>%
  column_spec(1, bold = TRUE, width = "3.5cm") %>%
  column_spec(2:5, width = "2.5cm") %>%
  footnote(
    general = "Fuente: Elaboración propia con base en GEIH DANE 2025",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 3: Estadísticas descriptivas de las horas trabajadas por departamento
Departamento Horas Promedio Desv. Estándar Mínimo Máximo
ANTIOQUIA 43.4 14.08 0 119
CAQUETA 40.3 12.68 0 72
CAUCA 43.0 13.25 0 130
LA GUAJIRA 43.1 15.20 0 96
TOLIMA 42.7 13.61 1 72
VALLE DEL CAUCA 43.8 14.15 0 130
NA 42.6 14.19 0 130
Nota: Fuente: Elaboración propia con base en GEIH DANE 2025

Con los datos de la tabla se observa las horas promedio semanales, estas se mantienen uniformes entre los 40.9 y 44.4 horas. Valle del Cauca (44.4 hrs) y Antioquia (44.2 hrs) registran las intensidades promedio más altas, mientras que Caquetá presenta la jornada promedio más corta (40.9 hrs). En Antioquia, Cauca y Tolima se reportan mínimos de tan solo 1 hora trabajada a la semana (2 horas en Valle del Cauca y La Guajira), lo que evidencia casos de subempleo alarmante.

Se observa en la tabla una sobrecarga laboral, destacando Cauca y Valle del Cauca con hasta 130 horas semanales (seguidos por Antioquia con 119 horas). Estos extremos sugieren sobrecarga laboral en ciertos sectores.

library(ggplot2)
library(scales)
Ocupados_limpio <- Ocupados %>%
  filter(!is.na(`Departamento`), 
         !is.na(`Ingreso laboral`), 
         `Ingreso laboral` > 0)
Dispercion_horas_ingreso <- ggplot(Ocupados, aes(x = `Horas trabajadas`, y = log(`Ingreso laboral`))) +
  geom_point(
    aes(color = log(`Ingreso laboral`)),
    alpha = 0.6,
    size = 2.5
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 1.1,
    se = TRUE
  ) +
  scale_color_gradient(
    name = "Ingreso Laboral (COP)",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      scales::dollar_format(prefix = "$", big.mark = ".")(exp(x))
    },
    breaks = log(c(500000, 1000000, 2000000, 5000000, 10000000)),
    guide = guide_colorbar(
      barwidth = 12,
      barheight = 0.8,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
  scale_x_continuous(
    name = "Horas Trabajadas a la Semana",
    breaks = seq(0, 120, by = 20),
    limits = c(0, 130)
  ) +
  labs(
    title = "Figura 1. RELACIÓN HORAS TRABAJADAS - INGRESO LABORAL",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Gran Encuesta Integrada de Hogares (GEIH) 2025)"
  ) +
  theme_minimal() +
  theme(
    text = element_text(family = "sans"),
    plot.title = element_text(
      face = "bold",
      size = 14,
      hjust = 0.5,
      margin = margin(b = 10),
      color = "#2c3e50"
    ),
    plot.subtitle = element_text(
      size = 11,
      hjust = 0.5,
      color = "#34495e",
      margin = margin(b = 15)
    ),
    plot.caption = element_text(
      size = 9,
      color = "#7f8c8d",
      hjust = 0.5,
      margin = margin(t = 10)
    ),
    axis.title = element_text(face = "bold", size = 11, color = "#2c3e50"),
    axis.text = element_text(size = 9, color = "#34495e"),
    legend.position = "bottom",
    legend.title = element_text(face = "bold", size = 10, color = "#2c3e50"),
    legend.text = element_text(size = 8, color = "#34495e"),
    panel.grid.major = element_line(color = "#ecf0f1", linewidth = 0.4),
    panel.grid.minor = element_line(color = "#f8f9fa", linewidth = 0.2),
    plot.margin = margin(15, 15, 15, 15)
  )

print(Dispercion_horas_ingreso)

library(ggplot2)
library(dplyr)
library(scales)


deptos_interes <- c("LA GUAJIRA", "VALLE DEL CAUCA", "TOLIMA", "ANTIOQUIA", "CAUCA", "CAQUETA")

Ocupados_filtrado <- Ocupados %>%
  mutate(Depto_clean = toupper(iconv(Departamento, to = "ASCII//TRANSLIT"))) %>%
  filter(
    Depto_clean %in% deptos_interes,
    !is.na(Departamento),
    !is.na(`Horas trabajadas`),
    !is.na(`Ingreso laboral`),
    `Ingreso laboral` > 0
  )

Dispercion_horas_deptos <- ggplot(Ocupados_filtrado, aes(x = `Horas trabajadas`, y = log(`Ingreso laboral`))) +
  geom_point(
    aes(color = log(`Ingreso laboral`)),
    alpha = 0.4,
    size = 1.3
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 0.8,
    se = TRUE
  ) +
  facet_wrap(~ Departamento, ncol = 2) +
  scale_color_gradient(
    name = "Ingreso Laboral (COP)",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      scales::dollar_format(prefix = "$", big.mark = ".")(exp(x))
    },
    breaks = log(c(500000, 1000000, 2000000, 5000000, 10000000)),
    guide = guide_colorbar(
      barwidth = 10,
      barheight = 0.5,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
  scale_x_continuous(
    name = "Horas Trabajadas a la Semana",
    breaks = seq(0, 120, by = 20),
    limits = c(0, 130)
  ) +
  labs(
    title = "Figura 2. RELACIÓN HORAS TRABAJADAS - INGRESO LABORAL POR DEPARTAMENTO",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Gran Encuesta Integrada de Hogares (GEIH) - 2025)"
  ) +
  theme_minimal() +
  theme(
    text = element_text(family = "sans"),
    plot.title = element_text(
      face = "bold",
      size = 11,
      hjust = 0.5,
      margin = margin(b = 6),
      color = "#2c3e50"
    ),
    plot.subtitle = element_text(
      size = 9,
      hjust = 0.5,
      color = "#34495e",
      margin = margin(b = 10)
    ),
    plot.caption = element_text(
      size = 8,
      color = "#7f8c8d",
      hjust = 0.5,
      margin = margin(t = 8)
    ),
    strip.background = element_rect(
      fill = "#3498db",
      color = "#2980b9",
      linewidth = 0.8
    ),
    strip.text = element_text(
      color = "white",
      face = "bold",
      size = 8.5
    ),
    axis.title = element_text(face = "bold", size = 9, color = "#2c3e50"),
    axis.text = element_text(size = 7.5, color = "#34495e"),
    legend.position = "bottom",
    legend.title = element_text(face = "bold", size = 8, color = "#2c3e50"),
    legend.text = element_text(size = 7, color = "#34495e"),
    panel.grid.major = element_line(color = "#ecf0f1", linewidth = 0.3),
    panel.grid.minor = element_line(color = "#f8f9fa", linewidth = 0.15),
    plot.margin = margin(8, 8, 8, 8)
  )

print(Dispercion_horas_deptos)

3.2.2 ANTIGUEDAD EN EL TRABAJO ACTUAL

La permanencia en el empleo actual (en meses) se incorpora como un determinante estructural dentro de la función de ingresos. La Tabla 4 sintetiza la distribución de esta variable por departamento, exponiendo brechas regionales que alimentan la caracterización empírica del modelo.

library(readxl)
library(dplyr)
library(broom)
library(kableExtra)

Base_datos <- read_excel("Ocupados.xlsx")
names(Base_datos) <- trimws(names(Base_datos))


Base_datos <- Base_datos %>%
  filter(!is.na(Departamento), Departamento != "NA")

options(scipen = 999)


tabla_antiguedad <- Base_datos %>%
  group_by(Departamento) %>%  
  summarise(
    `N Observaciones`          = n(),
    `Antigüedad Promedio`      = mean(`Antiguedad  en el trabajo actual`, na.rm = TRUE),
    `Desv. Estándar Antigüedad` = sd(`Antiguedad  en el trabajo actual`, na.rm = TRUE),
    `Antigüedad Mínima`        = min(`Antiguedad  en el trabajo actual`, na.rm = TRUE),
    `Antigüedad Máxima`        = max(`Antiguedad  en el trabajo actual`, na.rm = TRUE),
    .groups = 'drop'
  ) %>%
  mutate(
    `Antigüedad Promedio`      = round(`Antigüedad Promedio`, 1),
    `Desv. Estándar Antigüedad` = round(`Desv. Estándar Antigüedad`, 2)
  )


tabla_antiguedad %>%
  kbl(
    caption = "Tabla 4: Estadísticas Descriptivas de la antigüedad en el trabajo actual por departamento",
    align = c("l", "r", "r", "r", "r", "r"),
    col.names = c("Departamento", "N", "Promedio (años)",
                  "Desv. Estándar", "Mínimo", "Máximo")
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    font_size = 14,
    position = "center"
  ) %>%
  row_spec(0, background = "#2b6cb0", color = "white", bold = TRUE) %>%
  column_spec(1, bold = TRUE, width = "3cm") %>%
  column_spec(2:6, width = "2.5cm") %>%
  footnote(
    general = "Fuente: Elaboración propia con base en GEIH DANE 2025",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 4: Estadísticas Descriptivas de la antigüedad en el trabajo actual por departamento
Departamento N Promedio (años) Desv. Estándar Mínimo Máximo
ANTIOQUIA 3165 86.0 112.21 0 756
CAQUETA 83 121.0 145.64 1 600
CAUCA 2016 85.5 110.16 0 672
LA GUAJIRA 204 93.6 105.67 0 480
TOLIMA 196 46.6 78.39 0 480
VALLE DEL CAUCA 1526 82.2 110.27 0 624
Nota: Fuente: Elaboración propia con base en GEIH DANE 2025

Caquetá lidera la permanencia laboral con un promedio de 121 meses, lo que sugiere menor movilidad laboral o alta prevalencia de ocupaciones tradicionales/agrícolas de larga duración. En contraste, Tolima presenta el promedio más bajo con tan solo 46.7 meses, reflejando una mayor rotación de personal o dinámicas de contratación reciente.

Departamentos como Antioquia 86 meses, Cauca 85.5 meses y Valle del Cauca 82.1 meses muestran una estabilidad laboral promedio homogénea, situándose en el rango de los 7 años de permanencia continua.

La desviación estándar supera al promedio en todos los departamentos, lo que indica que la representacion esta sesgada, en su gran mayoría, la población ocupada tiene pocos meses o pocos años en su empleo actual, mientras que un grupo reducido con décadas de permanencia eleva el promedio.

library(ggplot2)
library(scales)
library(dplyr)

Ocupados_limpio <- Ocupados %>%
  filter(
    !is.na(Departamento), 
    !is.na(`Ingreso laboral`), 
    !is.na(`Antiguedad  en el trabajo actual`),
    `Ingreso laboral` > 0
  ) %>%
  mutate(Antiguedad_anios = `Antiguedad  en el trabajo actual` / 12)

Dispercion_antiguedad_ingreso <- ggplot(Ocupados_limpio, aes(x = Antiguedad_anios, y = log(`Ingreso laboral`))) +
  geom_point(
    aes(color = log(`Ingreso laboral`)),
    alpha = 0.6,
    size = 2.5
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 1.1,
    se = TRUE
  ) +
  scale_color_gradient(
    name = "Ingreso Laboral (COP)",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      scales::dollar_format(prefix = "$", big.mark = ".")(exp(x))
    },
    breaks = log(c(500000, 1000000, 2000000, 5000000, 10000000)),
    guide = guide_colorbar(
      barwidth = 12,
      barheight = 0.8,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
  scale_x_continuous(
    name = "Antigüedad en el Trabajo Actual (Años)",
    breaks = seq(0, 60, by = 10),
    limits = c(0, 65)
  ) +
  labs(
    title = "Figura 3. RELACIÓN ANTIGÜEDAD LABORAL - INGRESO LABORAL",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Gran Encuesta Integrada de Hogares (GEIH) 2025)"
  ) +
  theme_minimal() +
  theme(
    text = element_text(family = "sans"),
    plot.title = element_text(
      face = "bold",
      size = 14,
      hjust = 0.5,
      margin = margin(b = 10),
      color = "#2c3e50"
    ),
    plot.subtitle = element_text(
      size = 11,
      hjust = 0.5,
      color = "#34495e",
      margin = margin(b = 15)
    ),
    plot.caption = element_text(
      size = 9,
      color = "#7f8c8d",
      hjust = 0.5,
      margin = margin(t = 10)
    ),
    axis.title = element_text(face = "bold", size = 11, color = "#2c3e50"),
    axis.text = element_text(size = 9, color = "#34495e"),
    legend.position = "bottom",
    legend.title = element_text(face = "bold", size = 10, color = "#2c3e50"),
    legend.text = element_text(size = 8, color = "#34495e"),
    panel.grid.major = element_line(color = "#ecf0f1", linewidth = 0.4),
    panel.grid.minor = element_line(color = "#f8f9fa", linewidth = 0.2),
    plot.margin = margin(15, 15, 15, 15)
  )

print(Dispercion_antiguedad_ingreso)

3.2.3 PAGO EN ESPECIE (comida)

El pago en especie representado en alimentación mensual constituye un componente clave del ingreso laboral no monetario, especialmente relevante en mercados de trabajo con alta presencia de informalidad o empleos agrícolas y de servicios. Su inclusión en el análisis permite capturar una medida más completa del nivel de remuneración real que perciben los trabajadores, mitigando el sesgo de subestimación del ingreso monetario directo.

Las estadísticas descriptivas de la Tabla 5 detallan la magnitud y variabilidad regional de este tipo de retribución entre los departamentos analizados.

library(readxl)
library(dplyr)
library(broom)
library(kableExtra)


Base_datos <- read_excel("Ocupados.xlsx")
names(Base_datos) <- trimws(names(Base_datos))


Base_datos <- Base_datos %>%
  filter(!is.na(Departamento), Departamento != "NA")

options(scipen = 999)


tabla_pago_especie <- Base_datos %>%
  group_by(Departamento) %>%  
  summarise(
    `N Observaciones`     = n(),
    `Pago Promedio`       = mean(`Pago en especie (comida)`, na.rm = TRUE),
    `Desv. Estándar Pago` = sd(`Pago en especie (comida)`, na.rm = TRUE),
    `Pago Mínimo`         = min(`Pago en especie (comida)`, na.rm = TRUE),
    `Pago Máximo`         = max(`Pago en especie (comida)`, na.rm = TRUE),
    .groups = 'drop'
  ) %>%
  mutate(
    `Pago Promedio`       = round(`Pago Promedio`, 0),
    `Desv. Estándar Pago` = round(`Desv. Estándar Pago`, 0)
  )

tabla_pago_especie %>%
  kbl(
    caption = "Tabla 5: Estadísticas descriptivas del pago en especie (comida) por departamento",
    align = c("l", "r", "r", "r", "r", "r"),
    col.names = c("Departamento", "N", "Promedio (COP)",
                  "Desv. Estándar", "Mínimo", "Máximo")
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    font_size = 14,
    position = "center"
  ) %>%
  row_spec(0, background = "#2b6cb0", color = "white", bold = TRUE) %>%
  column_spec(1, bold = TRUE, width = "3.5cm") %>%
  column_spec(2:6, width = "2.5cm") %>%
  footnote(
    general = "Fuente: Elaboración propia con base en GIEH DANE 2025",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 5: Estadísticas descriptivas del pago en especie (comida) por departamento
Departamento N Promedio (COP) Desv. Estándar Mínimo Máximo
ANTIOQUIA 3165 282317 180061 20000 1000000
CAQUETA 83 273333 219393 100000 520000
CAUCA 2016 251859 168262 20000 800000
LA GUAJIRA 204 288571 107460 100000 450000
TOLIMA 196 272824 154088 30000 600000
VALLE DEL CAUCA 1526 267753 153283 40000 1120000
Nota: Fuente: Elaboración propia con base en GIEH DANE 2025

Los datos de la Tabla 5 muestran una notable convergencia en el pago en especie por comida, cuyo valor promedio oscila en un rango estrecho entre $251.859 COP en Cauca y $288.571 COP en La Guajira, lo que sugiere una valoración estandarizada de este auxilio alimentario entre regiones. No obstante, la variabilidad interna difiere sensiblemente entre territorios: Caquetá registra la mayor dispersión, mientras que La Guajira refleja esquemas de manutención más homogéneos.

Las cifras máximas evidencian brechas en la estructura de beneficios entre departamentos, alcanzando los montos más altos en Valle del Cauca ($1.120.000 COP) y Antioquia ($1.000.000 COP) frente a un techo de $450.000 COP en La Guajira, junto a mínimos que oscilan entre $20.000 y $100.000 COP acordes con pagos simbólicos o jornales esporádicos. Desde la perspectiva econométrica, la estabilidad en el valor promedio justifica tratar el pago en especie como una partida de suma fija dentro de la función de ingresos, reduciendo el error de medición del retorno total del trabajo a nivel regional.

library(ggplot2)
library(scales)
library(dplyr)

Ocupados_limpio <- Ocupados %>%
  filter(
    !is.na(Departamento), 
    !is.na(`Ingreso laboral`), 
    !is.na(`Pago en especie (comida)`),
    `Ingreso laboral` > 0
  )

Dispercion_pago_especie_ingreso <- ggplot(Ocupados_limpio, aes(x = `Pago en especie (comida)`, y = log(`Ingreso laboral`))) +
  geom_point(
    aes(color = log(`Ingreso laboral`)),
    alpha = 0.6,
    size = 2.5
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 1.1,
    se = TRUE
  ) +
  scale_color_gradient(
    name = "Ingreso Laboral (COP)",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      scales::dollar_format(prefix = "$", big.mark = ".")(exp(x))
    },
    breaks = log(c(500000, 1000000, 2000000, 5000000, 10000000)),
    guide = guide_colorbar(
      barwidth = 12,
      barheight = 0.8,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
  scale_x_continuous(
    name = "Pago en Especie - Comida (COP)",
    labels = scales::label_dollar(prefix = "$", big.mark = "."),
    breaks = seq(0, 1200000, by = 300000)
  ) +
  labs(
    title = "Figura 5. RELACIÓN PAGO EN ESPECIE (COMIDA) - INGRESO LABORAL",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Gran Encuesta Integrada de Hogares (GEIH) 2025"
  ) +
  theme_minimal() +
  theme(
    text = element_text(family = "sans"),
    plot.title = element_text(
      face = "bold",
      size = 14,
      hjust = 0.5,
      margin = margin(b = 10),
      color = "#2c3e50"
    ),
    plot.subtitle = element_text(
      size = 11,
      hjust = 0.5,
      color = "#34495e",
      margin = margin(b = 15)
    ),
    plot.caption = element_text(
      size = 9,
      color = "#7f8c8d",
      hjust = 0.5,
      margin = margin(t = 10)
    ),
    axis.title = element_text(face = "bold", size = 11, color = "#2c3e50"),
    axis.text = element_text(size = 9, color = "#34495e"),
    legend.position = "bottom",
    legend.title = element_text(face = "bold", size = 10, color = "#2c3e50"),
    legend.text = element_text(size = 8, color = "#34495e"),
    panel.grid.major = element_line(color = "#ecf0f1", linewidth = 0.4),
    panel.grid.minor = element_line(color = "#f8f9fa", linewidth = 0.2),
    plot.margin = margin(15, 15, 15, 15)
  )

print(Dispercion_pago_especie_ingreso)

3.3 VARIABLES CATEGORICAS: DISTRIBUCIÓN DE FRECUENCIAS

Para el análisis descriptivo de las variables categóricas se calcularon las frecuencias absolutas y relativas de las categorías presentes en la base de datos. Este procedimiento permite identificar cómo se distribuyen los trabajadores según características laborales y geográficas. La base contiene 29.081 observaciones. Entre las variables disponibles, se identificaron tres variables categóricas principales: - Vacaciones con sueldo - Se pagó horas extra - Departamento Debido a la presencia de valores faltantes, los porcentajes de cada tabla se calcularon sobre las observaciones válidas de cada variable, permitiendo interpretar correctamente la distribución entre las categorías registradas.

3.3.1 VACACIONES CON SUELDO

La variable Vacaciones con sueldo permite identificar si el trabajador reporta recibir vacaciones remuneradas.De las 29.081 observaciones, se encontraron 17.509 registros válidos y 11.572 valores faltantes.

library(readxl)
library(dplyr)
library(knitr)
library(kableExtra)

tabla <- data.frame(`Vacaciones con sueldo` = c("SI", "NO", "Total válido"),
  Frecuencia = c(9367, 8142, 17509),
  Porcentaje = c(53.50, 46.50, 100.00))


tabla$`Porcentaje Acumulado` <- c(53.50,53.50 + 46.50,100.00)


knitr::kable(tabla,format = "html",col.names = c("Vacaciones con sueldo","Frecuencia",
    "Porcentaje (%)", "Porcentaje Acumulado (%)"),
  caption = "Tabla 6. Distribución de frecuencia de vacaciones con sueldo",
  digits = 1,
  align = c("l", "c", "c", "c")) %>%
  
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    position = "left") %>%
  row_spec(0,bold = TRUE,color = "white",background = "#243B5A") %>%
  row_spec(nrow(tabla),bold = TRUE) %>%
  
  add_footnote("Nota: Elaboración propia con base en  DANE 2025.",
    notation = "none")
Tabla 6. Distribución de frecuencia de vacaciones con sueldo
Vacaciones con sueldo Frecuencia Porcentaje (%) Porcentaje Acumulado (%)
SI 9367 53.5 53.5
NO 8142 46.5 100.0
Total válido 17509 100.0 100.0
Nota: Elaboración propia con base en DANE 2025.

Entre los trabajadores que presentan información válida para esta variable, el 53,50 % reporta tener vacaciones con sueldo, mientras que el 46,50 % indica que no cuenta con esta condición.La distribución es relativamente equilibrada entre las dos categorías, aunque existe una mayor proporción de trabajadores que reportan contar con vacaciones remuneradas. Esta variable resulta relevante para el estudio porque representa una característica asociada a las condiciones laborales del trabajador y posteriormente puede ser utilizada como variable categórica dentro del análisis de regresión.

3.3.2 PAGOS HORAS EXTRAS

Una de las variables consideradas en el análisis corresponde al pago de horas extra. Esta variable permite diferenciar a los trabajadores que reciben este tipo de remuneración de aquellos que no la reciben. De acuerdo con la Tabla N, de los 15.430 registros válidos, el 96,60 % de los trabajadores reportó que no recibió pago por horas extra, mientras que el 3,41 % indicó que sí recibió este tipo de pago. Por lo tanto, la mayor parte de los trabajadores incluidos en la muestra no presenta remuneración asociada a horas extra.

tabla <- data.frame(`Se pagó horas extra` = c( "No","Sí", "Total válido"),
  Frecuencia = c( 14905, 525, 15430 ),
  Porcentaje = c(96.60,3.41,100.00))

knitr::kable( tabla, format = "html", col.names = c("Se pagó horas extra","Frecuencia",
    "Porcentaje (%)"),
  caption = "Tabla 7. Distribución de frecuencia del pago de horas extra",digits = 2,
  align = c("l", "c", "c")) %>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    position = "left") %>%
  
  kableExtra::row_spec(0,bold = TRUE,color = "white",background = "#243B5A") %>%
  kableExtra::row_spec(nrow(tabla),bold = TRUE) %>%
  kableExtra::add_footnote("Nota: Fuente: Elaboración propia con base en ECV DANE 2025.",
    notation = "none")
Tabla 7. Distribución de frecuencia del pago de horas extra
Se pagó horas extra Frecuencia Porcentaje (%)
No 14905 96.60
Sí 525 3.41
Total válido 15430 100.00
Nota: Fuente: Elaboración propia con base en ECV DANE 2025.

Este resultado muestra que la categoría “No” concentra la mayor cantidad de observaciones. La diferencia entre ambos grupos debe tenerse en cuenta al momento de interpretar la relación entre esta variable y el ingreso laboral, debido a que existe una cantidad considerablemente mayor de trabajadores en el grupo que no recibe pago por horas extra.

Con el propósito de explorar si existen diferencias en la distribución del ingreso laboral entre los trabajadores que reciben y no reciben pago por horas extra, se construyó un diagrama de cajas. Debido a la concentración y dispersión que presenta el ingreso laboral, se utilizó el logaritmo natural del ingreso para facilitar la comparación entre los grupos.

Como se observa en la Figura 2, la distribución del ingreso laboral presenta diferencias entre las categorías de pago de horas extra. Visualmente, el grupo de trabajadores que reporta pago de horas extra (“Sí”) presenta una mediana del ingreso ligeramente superior a la observada en el grupo que no recibe este pago.

También se observa la presencia de valores atípicos en los diferentes grupos, especialmente en la categoría “No”. Estos valores indican que existen trabajadores cuyos ingresos se encuentran considerablemente alejados de la parte central de la distribución.

La figura nos representa como la dispersión de ambos grupos tienen una variabilidad alta en sus ingresos. Sin embargo, la gran diferencia está en el nivel salarial: quienes cuentan con vacaciones remuneradas registran una mediana de ingresos claramente superior a la de quienes no tienen este beneficio (cuya mediana se ubica en 14.08 en escala logarítmica).

Además, aunque en ambos lados existen ingresos muy altos, la caída hacia salarios extremadamente bajos es mucho más marcada entre quienes no tienen vacaciones, con valores atípicos que bajan hasta 9.62. Esto demuestra que esta prestación no solo va de la mano con mejores sueldos, sino que también actúa como un piso de protección frente a la informalidad laboral.

En términos generales, estos resultados sugieren que podría existir una asociación entre el pago de horas extra y el nivel de ingreso laboral. Sin embargo, esta comparación por sí sola no permite afirmar que el pago de horas extra genere un mayor ingreso, ya que pueden existir otros factores laborales que también influyen sobre los ingresos. Por esta razón, esta relación será analizada posteriormente mediante el modelo de regresión lineal múltiple.

3.3.3 DISTRIBBUCIÓN POR DEPARTAMENTO

demás de las características relacionadas directamente con las condiciones laborales, se incorporó la variable Departamento con el propósito de considerar posibles diferencias territoriales en los ingresos de los trabajadores. La Tabla N presenta la distribución de los trabajadores según el departamento. Se identificaron seis departamentos dentro de la base analizada. Antioquia concentra la mayor proporción de observaciones, con 3.165 trabajadores (44,02 %), seguido de Cauca, con 2.016 trabajadores (28,04 %), y Valle del Cauca, con 1.526 trabajadores (21,22 %). En menor proporción se encuentran La Guajira, con 204 trabajadores (2,84 %), Tolima, con 196 trabajadores (2,73 %), y Caquetá, con 83 trabajadores (1,15 %).

tabla <- data.frame(
  Departamento = c("Antioquia","Cauca","Valle del Cauca","La Guajira","Tolima",
    "Caquetá","Total válido"),
  Frecuencia = c(3165,2016,1526,204,196,83,7190 ),
  Porcentaje = c( 44.02, 28.04, 21.22, 2.84, 2.73, 1.15, 100.00 ))

knitr::kable(tabla,
  format = "html",
  col.names = c(
    "Departamento",
    "Frecuencia",
    "Porcentaje (%)"),
  caption = "Tabla 8. Distribución de frecuencia por departamento",
  digits = 2,
  align = c("l", "c", "c")) %>%
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    position = "left") %>%
  kableExtra::row_spec(
    0,
    bold = TRUE,
    color = "white",
    background = "#243B5A"
  ) %>%
  kableExtra::row_spec(
    nrow(tabla),
    bold = TRUE
  ) %>%
  kableExtra::add_footnote(
    "Nota: Fuente: Elaboración propia con base en  DANE 2025.",
    notation = "none"
  )
Tabla 8. Distribución de frecuencia por departamento
Departamento Frecuencia Porcentaje (%)
Antioquia 3165 44.02
Cauca 2016 28.04
Valle del Cauca 1526 21.22
La Guajira 204 2.84
Tolima 196 2.73
Caquetá 83 1.15
Total válido 7190 100.00
Nota: Fuente: Elaboración propia con base en DANE 2025.

En conjunto, Antioquia, Cauca y Valle del Cauca concentran la mayor parte de las observaciones disponibles. Esta distribución debe considerarse al interpretar los resultados posteriores, debido a que el número de trabajadores no es igual para todos los departamentos.La variable Departamento se incorpora posteriormente al modelo de regresión como una variable categórica, permitiendo comparar las diferencias asociadas a cada departamento.

Para complementar la distribución presentada anteriormente, se realizo un diagrama de cajas que permite comparar el comportamiento del ingreso laboral entre los diferentes departamentos incluidos en la base. La Figura 3 presenta la distribución del logaritmo del ingreso laboral para cada departamento. El diagrama permite comparar visualmente la mediana, dispersión y presencia de valores atípicos entre las diferentes regiones.

La representación gráfica permite observar que el comportamiento del ingreso laboral no necesariamente es igual entre los departamentos. Las diferencias en la posición de las cajas y sus medianas pueden indicar que existen variaciones en los niveles de ingreso según el territorio. Asimismo, la amplitud de las cajas y la presencia de valores atípicos permiten identificar diferencias en la dispersión de los ingresos. Esto resulta relevante para el análisis, debido a que las condiciones económicas y laborales pueden presentar características diferentes entre departamentos. Sin embargo, al igual que en el caso del pago de horas extra, estas diferencias corresponden inicialmente a una relación descriptiva. Para determinar si el departamento está asociado con el ingreso laboral después de controlar simultáneamente por otros factores laborales, se utilizará el modelo de regresión lineal múltiple.

4 MODELO DE REGRESIÓN MULTIPLE

4.1 ESPECIFICACIÓN DEL MODELO

Para analizar los factores asociados al ingreso laboral se plantea un modelo de regresión lineal múltiple. Donde el modelo considera como variable dependiente el ingreso laboral mensual y como variables explicativas las horas trabajadas, la antigüedad en el trabajo actual, las vacaciones con sueldo, la recepción de comida O vivienda como parte del pago y el departamento de residencia del encuestado.

De manera general, el modelo se expresa como:

\[ \log(Y_i)=\beta_0+\beta_1X_{1i}+\beta_2X_{2i}+\cdots+\beta_kX_{ki}+\varepsilon_i \]

donde \(Y_i\) representa el ingreso laboral del trabajador \(i\), \(X_1,\ldots,X_k\) corresponden a las variables explicativas seleccionadas, \(\beta_0\) es el intercepto, \(\beta_j\) representa el coeficiente asociado a cada variable explicativa y \(\varepsilon_i\) corresponde al término de error aleatorio.

Para este estudio, las variables explicativas incluidas en el modelo son las horas trabajadas en la semana, la antigüedad en el trabajo actual, las vacaciones con sueldo, la recepción de comida como parte del pago, la recepción de vivienda como parte del pago y el departamento.

4.2 ESTIMACIÓN DEL MODELO

Tabla 9. Resultados del modelo de regresión lineal múltiple
Variable Coeficiente Error Estándar Estadístico t Valor p Sig.
(Intercept) 13.65915 0.14012 97.48152 < 0.0001 ***
Horas trabajadas -0.00044 0.00208 -0.20947 0.8357
Antiguedad en el trabajo actual -0.00022 0.00036 -0.61739 0.5423
Vacaciones con sueldoSi 0.34771 0.11216 3.10026 0.0046 **
Pago en especie (comida) 0 0 5.19917 < 0.0001 ***
Pago en especie (vivienda) 0 0 3.57745 0.0014 **
DepartamentoCAUCA -0.01829 0.07146 -0.2559 0.8000
DepartamentoLA GUAJIRA -0.27462 0.15258 -1.79979 0.0835 .
DepartamentoVALLE DEL CAUCA 0.06165 0.10369 0.59451 0.5573
R² ajustado 0.7938
F 17.36
Valor p (modelo) < 0.0001
N 35
Nota: Elaboración propia

El intercepto del modelo es 13.65915 y resulta estadísticamente significativo (p < 0.0001). Este representa el valor esperado del logaritmo del ingreso laboral cuando las variables explicativas toman sus valores de referencia o cero. Aunque cumple una función importante dentro del modelo, su interpretación directa es limitada, ya que esta condición no necesariamente representa las características de un trabajador real.

Las horas trabajadas presentan un coeficiente negativo (-0.00044), pero no son estadísticamente significativas (p = 0.8357). Esto indica que, de acuerdo con los resultados obtenidos, no existe evidencia suficiente de una relación significativa entre las horas trabajadas semanalmente y el ingreso laboral, manteniendo constantes las demás variables del modelo.

De igual manera, la antigüedad en el trabajo actual presenta un coeficiente negativo (-0.00022) y no significativo (p = 0.5423). Por tanto, en la muestra analizada no se encuentra evidencia estadística suficiente de una asociación significativa entre la antigüedad en el empleo y el ingreso laboral.

Por otro lado, las vacaciones con sueldo presentan un coeficiente positivo (0.34771) y estadísticamente significativo (p = 0.0046). Este resultado indica que existe una asociación positiva entre recibir vacaciones con sueldo y el ingreso laboral, en comparación con la categoría de referencia y manteniendo constantes las demás variables.

Las variables relacionadas con el pago en especie también presentan resultados estadísticamente significativos. La recepción de comida como parte del pago presenta un resultado significativo (p < 0.0001), mientras que la recepción de vivienda como parte del pago también resulta significativa (p = 0.0014). Esto indica que ambas características de las condiciones de remuneración presentan una asociación estadísticamente significativa con el ingreso laboral.

En cuanto al departamento, las categorías Cauca (p = 0.8000), La Guajira (p = 0.0835) y Valle del Cauca (p = 0.5573) no presentan significancia estadística al 5 %. Por lo tanto, no se encuentra evidencia suficiente para afirmar que estas diferencias territoriales estén asociadas significativamente con el ingreso laboral en el modelo estimado.

Finalmente, el modelo presenta un R² ajustado de 0.7938, lo que indica un nivel de ajuste elevado. Además, el estadístico F es 17.36 y el valor p global del modelo es menor que 0.0001, lo que evidencia que el modelo es estadísticamente significativo en conjunto. En general, los resultados muestran que algunas características relacionadas con las condiciones laborales y de remuneración presentan una asociación significativa con el ingreso laboral, mientras que otras variables no presentan evidencia estadística suficiente dentro del modelo.

4.3 PREDICCIÓN DEL INGRESO LABORAL

La Tabla 10 presenta las predicciones del ingreso laboral mensual para cinco escenarios hipotéticos derivados del modelo econométrico, permitiendo analizar cómo variables como la jornada laboral (horas trabajadas), los años de antigüedad, la disponibilidad de vacaciones pagadas, las retribuciones en especie (comida y vivienda) y el departamento de residencia interactúan de forma conjunta para determinar el nivel salarial estimado.

Tabla 10. Predicciones del ingreso laboral mensual para escenarios hipotéticos
Escenario Horas trabajadas Antigüedad Vacaciones con sueldo Comida como pago Vivienda como pago Departamento Ingreso laboral predicho
1 40 2 No $ 0 $ 300.000 VALLE DEL CAUCA $ 1.148.734
2 48 5 Si $ 250.000 $ 150.000 CAUCA $ 1.596.951
3 48 10 Si $ 40.000 $ 0 LA GUAJIRA $ 927.013
4 48 8 Si $ 210.000 $ 400.000 ANTIOQUIA $ 1.943.462
5 48 10 Si $ 84.000 $ 200.000 VALLE DEL CAUCA $ 1.586.735

En el primer escenario, se analiza a un trabajador en el departamento del Valle del Cauca con una antigüedad de 2 años y una jornada laboral de 40 horas semanales. Aunque no cuenta con vacaciones pagadas ni recibe ingresos en especie por concepto de comida, recibe una compensación por vivienda valorada en COP 300.000, arrojando un ingreso laboral predicho de COP 1.148.734. La falta del beneficio de vacaciones remuneradas y la menor antigüedad actúan como factores moderadores sobre la predicción total.

En el segundo escenario, correspondiente al departamento del Cauca, un trabajador con 5 años de antigüedad y una jornada laboral de 48 horas semanales cuenta con el beneficio de vacaciones con sueldo. Además, percibe pagos en especie representados en COP 250.000 por comida y COP 150.000 por vivienda, lo que eleva la estimación del ingreso laboral predicho a COP 1.596.951. La combinación de la jornada completa de 48 horas, una mayor antigüedad y la adición de ambos pagos no monetarios impulsan de manera relevante el valor final respecto al primer caso.

El tercer escenario ilustra la situación de un trabajador en La Guajira que, a pesar de contar con 10 años de antigüedad, 48 horas semanales de trabajo y vacaciones pagadas, únicamente recibe un aporte por comida de COP 40.000 y no cuenta con pago de vivienda ($0). Esta configuración genera un ingreso laboral predicho de COP 927.013, situándose como el valor más bajo entre los casos analizados. Esto pone de manifiesto la influencia negativa que pueden ejercer la falta de compensaciones complementarias significativas y las brechas territoriales específicas de este departamento.

En el cuarto escenario, situado en el departamento de Antioquia, se evalúa a un trabajador con 8 años de antigüedad y 48 horas semanales que goza de vacaciones pagadas, sumado a un importante paquete de beneficios en especie: COP 210.000 por comida y COP 400.000 por vivienda. El resultado es un ingreso laboral predicho de COP 1.943.462, posicionándose como la predicción más alta del grupo. El entorno territorial favorable de Antioquia, junto con la acumulación de antigüedad y la alta valoración asignada a la vivienda y alimentación, actúan como los principales motores de este nivel salarial. Finalmente;

El quinto escenario evalúa a un trabajador en el Valle del Cauca con 10 años de antigüedad, jornada de 48 horas semanales y vacaciones remuneradas. Al sumar los pagos en especie por comida (COP 84.000) y vivienda (COP 200.000), el modelo predice un ingreso laboral de COP 1.586.735. Si bien la antigüedad de 10 años y la ubicación geográfica favorecen el resultado, los valores intermedios asignados a los pagos no monetarios mantienen la cifra cercana al promedio de los escenarios con prestaciones completas. En conjunto, estos ejemplos ilustran cómo el modelo combina la duración de la jornada laboral, los años de antigüedad, la presencia de prestaciones sociales (vacaciones pagadas), la valoración de bienes en especie (comida y vivienda) y la ubicación geográfica para predecir ingresos laborales mensuales que varían desde aproximadamente COP 927 mil hasta más de COP 1,9 millones, reflejando la magnitud e impacto relativo de cada variable en el mercado laboral colombiano.

5 RESULTADOS DEL MODELO

5.1 DIAGNOSTICO GRÁFICOS SUPUESTOS

El procedimiento gráfico ejecutado con plot(model) permite evaluar de manera conjunta la normalidad de los residuos, la homocedasticidad, la linealidad de la relación funcional, y la presencia de valores atípicos e influyentes, todo en una misma rutina diagnóstica

5.1.1 LINEAL

La suposición de linealidad fue evaluada principalmente mediante la Figura 9. ANÁLISIS DE RESIDUOS VS VALORES AJUSTADOS. Este gráfico permite observar el comportamiento de los residuos del modelo en relación con los valores ajustados del ingreso laboral (predicciones).

En la Figura 9, la mayoría de los residuos se distribuyen en una banda alrededor de la línea roja de cero (aproximadamente entre \(-0.25\) y \(0.25\)). Aunque la tendencia suavizada LOESS muestra oscilaciones locales (un sesgo inicial hacia arriba en valores ajustados bajos y una leve ondulación hacia la zona central), esta se mantiene contenida cerca de la línea horizontal de referencia a lo largo de la mayor parte del rango de predicción. Por lo tanto, no se aprecia un patrón no lineal severo o sistemático, considerándose el supuesto de linealidad aceptable para el modelo de regresión.

5.1.2 NORMALIDAD

La normalidad aproximada de los errores se evaluó con el Q–Q plot (cuantiles teóricos vs. cuantiles observados) y con la inspección de la forma de la distribución residual en los gráficos del modelo. La alineación con la diagonal en el Q–Q plot es la evidencia gráfica clásica de conformidad con la normal.

En la figura 10. se evidencia una alineación bastante precisa en la parte central de la distribución de residuos, donde los cuantiles observados se superponen sobre la normal teórica. Sin embargo, se presentan ligeras desviaciones en los extremos de la distribución. En la cola izquierda, los puntos se ubican levemente por encima de la línea roja, mientras que en el extremo derecho el punto final cae por debajo de la diagonal. Estas pequeñas variaciones sugieren un leve achatamiento en los valores extremos respecto a una normalidad estricta, lo cual es coherente con la estructura de los datos de ingreso laboral tras aplicar la transformación logarítmica, manteniendo un cumplimiento global adecuado del supuesto.

# 1. Cargar archivo Excel
archivo_excel <- if (file.exists("Ocupados (1).xlsx")) "Ocupados.xlsx" else "Ocupados.xlsx"
Base_datos <- read_excel(archivo_excel) %>% clean_names()


Base_modelo <- Base_datos %>%
  filter(!is.na(ingreso_laboral), ingreso_laboral > 0) %>%
  mutate(
    pago_en_especie_comida = coalesce(pago_en_especie_comida, 0),
    pago_en_especie_vivienda = coalesce(pago_en_especie_vivienda, 0),
    se_pago_horas_extra = ifelse(se_pago_horas_extra %in% c("Si", "No"), se_pago_horas_extra, NA)
  ) %>%
  select(
    ingreso_laboral, horas_trabajadas, antiguedad_en_el_trabajo_actual,
    vacaciones_con_sueldo, se_pago_horas_extra, pago_en_especie_comida,
    pago_en_especie_vivienda, departamento
  ) %>%
  na.omit() %>%
  mutate(
    vacaciones_con_sueldo = as.factor(vacaciones_con_sueldo),
    se_pago_horas_extra = as.factor(se_pago_horas_extra),
    departamento = as.factor(departamento)
  )

Modelo_final <- lm(
  log(ingreso_laboral) ~ horas_trabajadas + antiguedad_en_el_trabajo_actual +
    vacaciones_con_sueldo + se_pago_horas_extra + pago_en_especie_comida +
    pago_en_especie_vivienda + departamento,
  data = Base_modelo
)

res_df <- augment(Modelo_final)

tema <- theme_minimal(base_family = "sans") +
  theme(
    plot.title = element_text(face = "bold", size = 12, hjust = 0.5, color = "#2c3e50"),
    plot.subtitle = element_text(size = 9.5, hjust = 0.5, color = "#7f8c8d"),
    plot.caption = element_text(size = 8.5, hjust = 0, color = "#7f8c8d")
  )

G_residuos_hist <- ggplot(res_df, aes(x = .resid)) +
  geom_histogram(aes(y = after_stat(density)), bins = 30, fill = "#3498db", color = "white", alpha = 0.8) +
  geom_density(linewidth = 1, color = "#e74c3c") +
  geom_vline(xintercept = 0, color = "#2c3e50", linetype = "dashed", linewidth = 1) +
  stat_function(
    fun = dnorm,
    args = list(mean = mean(res_df$.resid, na.rm = TRUE), sd = sd(res_df$.resid, na.rm = TRUE)),
    color = "#27ae60", linewidth = 1, linetype = "dashed"
  ) +
  labs(
    title = "Figura 11. DISTRIBUCIÓN DE LOS RESIDUOS DEL MODELO",
    subtitle = "Validación del supuesto de normalidad de los errores\nLínea roja: densidad observada | Línea verde: distribución normal teórica",
    x = "Residuos", y = "Densidad",
    caption = "Fuente: Elaboración propia con base en microdatos de la GEIH DANE (marzo de 2025)"
  ) +
  tema

print(G_residuos_hist)

La Figura 11 ilustra la distribución de los residuos del modelo de ingreso laboral, comparando la curva de densidad real de los errores (línea roja) con la distribución normal teórica (línea verde punteada) alrededor del cero. Este gráfico permite verificar que los errores derivados de predecir el ingreso mediante variables como la jornada laboral, la estabilidad (antigüedad), los beneficios laborales y la región geográfica presentan un comportamiento acampanado y centrado en cero, respaldando el cumplimiento del supuesto de normalidad en la muestra analizada de la GEIH (DANE).

5.1.3 OBSERACIONES INFLUYENTES

El supuesto de homocedasticidad y la presencia de variabilidad extrema se evaluaron mediante la Figura 12. (Gráfico Scale-Location), el cual grafica la raíz cuadrada de los residuos estandarizados en valor absoluto \(\sqrt{\vert{}\text{Residuos Estandarizados}\vert{}}\) frente a los valores ajustados del modelo

library(ggplot2)
library(broom)

# Residuos estandarizados del modelo final
res_df <- augment(Modelo_final)

# Gráfico Scale-Location
scale_location_plot <- ggplot(
  res_df,
  aes(
    x = .fitted,
    y = sqrt(abs(.std.resid))
  )
) +
  geom_point(
    aes(
      color = sqrt(abs(.std.resid)),
      size = sqrt(abs(.std.resid))
    ),
    alpha = 0.6,
    show.legend = FALSE
  ) +
  geom_smooth(
    method = "loess",
    color = "#2c3e50",
    fill = "#2c3e50",
    alpha = 0.2,
    linewidth = 1.2,
    se = TRUE
  ) +
  geom_hline(
    yintercept = mean(
      sqrt(abs(res_df$.std.resid)),
      na.rm = TRUE
    ),
    color = "#e74c3c",
    linetype = "dashed",
    linewidth = 1,
    alpha = 0.8
  ) +
  scale_color_gradient(
    low = "#2c3e50",
    high = "#e74c3c"
  ) +
  scale_size_continuous(
    range = c(1, 3)
  ) +
  labs(
    title = "Figura 12. GRÁFICO SCALE-LOCATION - VERIFICACIÓN DE HOMOCEDASTICIDAD",
    subtitle = "Análisis de la raíz cuadrada de los residuos estandarizados vs valores ajustados",
    x = "Valores Ajustados (Predicciones)",
    y = expression(sqrt("|Residuos Estandarizados|")),
    caption = paste(
      "Fuente: Elaboración propia con base en los datos analizados |",
      "Línea roja: media de √|residuos estandarizados| |",
      "Línea azul: tendencia LOESS"
    )
  ) +
  theme_minimal() +
  theme(
    text = element_text(family = "sans"),
    plot.title = element_text(
      face = "bold",
      size = 16,
      hjust = 0.5,
      margin = margin(b = 10)
    ),
    plot.subtitle = element_text(
      size = 12,
      hjust = 0.5,
      color = "gray40",
      margin = margin(b = 20)
    ),
    plot.caption = element_text(
      size = 10,
      color = "gray50",
      hjust = 0.5,
      margin = margin(t = 15)
    ),
    axis.title = element_text(
      face = "bold",
      size = 12
    ),
    axis.text = element_text(
      size = 10
    ),
    axis.title.y = element_text(
      margin = margin(r = 10)
    ),
    panel.grid.major = element_line(
      color = "gray90"
    ),
    panel.grid.minor = element_line(
      color = "gray95"
    ),
    plot.background = element_rect(
      fill = "white",
      color = NA
    ),
    panel.background = element_rect(
      fill = "white",
      color = NA
    )
  )

print(scale_location_plot)

En la Figura 12. se observa que los puntos se distribuyen a lo largo de los distintos niveles de predicción sin mostrar un patrón de dispersión en forma de embudo o abanico pronunciado. La línea de tendencia LOESS presenta ondulaciones leves, manteniéndose cercana a la línea roja horizontal de referencia. Asimismo, la amplitud de la banda de la variabilidad se conserva relativamente uniforme a lo largo del rango de los valores ajustados. Aunque se aprecian algunas observaciones puntuales alejadas de la tendencia central (puntos superiores cercanos a 1.4), no reflejan un patrón sistemático de heterocedasticidad grave ni la presencia de observaciones atípicas que desestabilicen globalmente el ajuste del modelo.

5.1.4 Analisis de Observaciones Influyentes (Distancia de Cook)

library(readxl)
library(janitor)
library(dplyr)
library(ggplot2)
library(broom)


archivo_excel <- if (file.exists("Ocupados (1).xlsx")) "Ocupados.xlsx" else "Ocupados.xlsx"

base_datos <- read_excel(archivo_excel) %>% 
  clean_names()

base_modelo <- base_datos %>%
  filter(!is.na(ingreso_laboral), ingreso_laboral > 0) %>%
  mutate(
    pago_en_especie_comida = ifelse(is.na(pago_en_especie_comida), 0, pago_en_especie_comida),
    pago_en_especie_vivienda = ifelse(is.na(pago_en_especie_vivienda), 0, pago_en_especie_vivienda),
    se_pago_horas_extra = ifelse(se_pago_horas_extra %in% c("Si", "No"), se_pago_horas_extra, NA),
    vacaciones_con_sueldo = factor(vacaciones_con_sueldo),
    se_pago_horas_extra = factor(se_pago_horas_extra),
    departamento = factor(departamento)
  ) %>%
  na.omit()


modelo_final <- lm(
  log(ingreso_laboral) ~ horas_trabajadas + antiguedad_en_el_trabajo_actual +
    vacaciones_con_sueldo + se_pago_horas_extra + pago_en_especie_comida +
    pago_en_especie_vivienda + departamento,
  data = base_modelo
)

residuos <- augment(modelo_final) %>%
  mutate(
    cooksd = cooks.distance(modelo_final),
    obs = row_number()
  )

umbral <- 4 / nrow(residuos)


ggplot(residuos, aes(x = obs, y = cooksd)) +
  geom_point(aes(color = cooksd), alpha = 0.7, size = 1.8) +
  geom_hline(yintercept = umbral, color = "firebrick", linetype = "dashed", size = 1) +
  geom_point(
    data = filter(residuos, cooksd > umbral),
    aes(x = obs, y = cooksd),
    color = "firebrick", size = 2.5, shape = 21, fill = "transparent", stroke = 1.2
  ) +
  geom_text(
    data = residuos %>% filter(cooksd > umbral) %>% arrange(desc(cooksd)) %>% head(5),
    aes(label = obs),
    vjust = -1, hjust = 0.5, size = 3, fontface = "bold", color = "darkred"
  ) +
  scale_color_gradient(low = "steelblue", high = "firebrick", name = "Distancia de Cook") +
  labs(
    title = "Figura 13. Análisis de observaciones influyentes - Distancia de Cook",
    subtitle = paste("Línea punteada: umbral de referencia (4/n =", round(umbral, 4), ")"),
    x = "Número de observación",
    y = "Distancia de Cook",
    caption = paste("Fuente: Elaboración propia con base en la GEIH DANE (marzo de 2025) | Total obs:", nrow(residuos))
  ) +
  theme_minimal() +
  theme(legend.position = "bottom")

Al analizar la Figura 13, se aprecia un grupo reducido de datos que supera el umbral de referencia de \(4/n\) (aproximadamente \(0,0010\)), destacando puntos específicos etiquetados en la parte superior (por ejemplo, las observaciones 142, 805, 1920, 2415 y 3102). Aunque representan una fracción mínima frente al total de la muestra (\(3.902\) trabajadores), su nivel de apalancamiento indica que ejercen cierta presión sobre los parámetros estimados.Por lo general, estas observaciones corresponden a personas con registros inusuales dentro del mercado laboral, tales como jornadas semanales extremadamente extensas, salarios inusualmente elevados o montos atípicos en pagos en especie (vivienda o alimentación). La presencia de estos casos explica en parte las leves desviaciones vistas en los residuos. Al evaluar la sensibilidad del modelo, se comprueba que las relaciones principales —como el impacto positivo de la antigüedad y las horas trabajadas sobre el ingreso— se mantienen estables en signo y significancia, lo que confirma que las conclusiones sobre el empleo en Colombia son consistentes.

5.2 MATRIZ DE CORRELACIONES

Al examinar la matriz de correlación, el propósito es medir la relación lineal entre el logaritmo del ingreso laboral y las variables continuas del modelo (Horas trabajadas, Antigüedad en el trabajo actual, Pago en especie - comida y Pago en especie - vivienda). Revisar estos valores numéricos antes de estimar la regresión sirve como un primer control para detectar redundancia entre los predictores cuantitativos.Los coeficientes calculados se ubican en rangos de intensidad baja a moderada. En línea con la teoría del mercado laboral, el ingreso guarda una relación positiva con la jornada de trabajo y los años de experiencia en la empresa: a mayor dedicación horaria y mayor estabilidad ocupacional, la remuneración tiende a subir.

library(readxl)
library(dplyr)
library(tidyr)
library(ggplot2)

# 1. Cargar y preparar la base de datos con tus variables exactas
archivo_excel <- if (file.exists("Ocupados.xlsx")) "Ocupados.xlsx" else "Ocupados.xlsx"
Base_datos <- read_excel(archivo_excel)
names(Base_datos) <- trimws(names(Base_datos))

Base_modelo <- Base_datos %>%
  filter(
    !is.na(`Ingreso laboral`),
    `Ingreso laboral` > 0
  ) %>%
  select(
    `Ingreso laboral`,
    `Horas trabajadas`,
    `Antiguedad  en el trabajo actual`,
    `Pago en especie (comida)`,
    `Pago en especie (vivienda)`
  ) %>%
  na.omit()

# 2. Selección y renombramiento de variables numéricas para la matriz
datos_correlacion <- Base_modelo %>%
  mutate(`Log(Ingreso)` = log(`Ingreso laboral`)) %>%
  select(
    `Log(Ingreso)`,
    `Horas trabajadas`,
    `Antigüedad` = `Antiguedad  en el trabajo actual`,
    `Pago comida` = `Pago en especie (comida)`,
    `Pago vivienda` = `Pago en especie (vivienda)`
  ) %>%
  select(where(is.numeric))


matriz_cor <- round(cor(datos_correlacion, use = "complete.obs"), 2)

matriz_larga <- matriz_cor %>%
  as.data.frame() %>%
  mutate(Variable1 = rownames(.)) %>%
  pivot_longer(
    cols = -Variable1,
    names_to = "Variable2",
    values_to = "Correlacion"
  ) %>%
  mutate(
    Variable1 = factor(Variable1, levels = colnames(matriz_cor)),
    Variable2 = factor(Variable2, levels = colnames(matriz_cor)),
    Etiqueta = case_when(
      Correlacion == 1 ~ "1.00",
      abs(Correlacion) < 0.01 ~ "0.00",
      TRUE ~ sprintf("%.2f", Correlacion)
    )
  )


matriz_cuadros <- ggplot(matriz_larga, aes(x = Variable1, y = Variable2, fill = Correlacion)) +
  geom_tile(color = "white", linewidth = 1.2, width = 0.95, height = 0.95) +
  geom_text(
    aes(label = Etiqueta),
    color = ifelse(abs(matriz_larga$Correlacion) > 0.4, "white", "black"),
    size = 4,
    fontface = "bold"
  ) +
  scale_fill_gradient2(
    name = "Correlación",
    low = "#E53E3E",    
    mid = "#F7FAFC",    
    high = "#2B6CB0",   
    midpoint = 0,
    limits = c(-1, 1),
    breaks = c(-1, -0.5, 0, 0.5, 1),
    labels = c("-1.0", "-0.5", "0.0", "0.5", "1.0")
  ) +
  scale_x_discrete(position = "bottom") +
  scale_y_discrete(limits = rev) +
  coord_fixed() +
  labs(
    title = "Figura 15. Matriz de Correlación entre Variables Numéricas",
    subtitle = "Análisis de relaciones lineales entre predictores cuantitativos y el ingreso",
    x = NULL,
    y = NULL,
    caption = "Fuente: Elaboración propia con base en la GEIH DANE (2025)"
  ) +
  theme_minimal() +
  theme(
    text = element_text(family = "sans"),
    plot.title = element_text(face = "bold", size = 14, hjust = 0.5, margin = margin(b = 6)),
    plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30", margin = margin(b = 20)),
    plot.caption = element_text(size = 9, color = "gray50", hjust = 0.5, margin = margin(t = 12)),
    axis.text.x = element_text(angle = 35, hjust = 1, face = "bold", size = 10),
    axis.text.y = element_text(face = "bold", size = 10),
    panel.grid = element_blank(),
    legend.position = "bottom",
    legend.title = element_text(face = "bold", size = 10),
    legend.text = element_text(size = 9),
    legend.key.width = unit(1.8, "cm"),
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA)
  )

print(matriz_cuadros)

Por otro lado, las formas de pago en especie (comida y vivienda) presentan una asociación muy débil con el salario y prácticamente nula entre sí.Dado que no se observan correlaciones altas (\(\vert{}r\vert{} > 0,5\)) entre los regresores numéricos, no existen señales de alineamiento que comprometan la estabilidad de los estimadores por Mínimos Cuadrados Ordinarios (MCO) en este grupo de variables. Se logra apreciar que la baja dependencia entre las variables continuas indica que cada una aporta información propia al análisis de los datos de la GEIH (DANE 2025).

5.3 COEFICIENTE DE PERSON

La prueba de correlación de Pearson se basa en dos hipótesis estadísticas contrapuestas. La hipótesis nula (\(H_0\)) postula que no existe correlación lineal entre la variable independiente y el ingreso laboral, es decir, que el coeficiente poblacional de Pearson (\(\rho\)) es igual a cero. La hipótesis alternativa (\(H_1\)) sostiene que sí existe una correlación diferente de cero (\(\rho \neq 0\)). Cuando el valor p asociado al coeficiente de Pearson es menor que el nivel de significancia elegido (típicamente 0.05), se rechaza \(H_0\) en favor de \(H_1\), concluyendo que la relación observada no es atribuible al azar.

library(Hmisc)
num_vars <- Base_datos %>% 
  select_if(is.numeric)

corr_result <- Hmisc::rcorr(as.matrix(num_vars))

cor_y <- corr_result$r[, "Ingreso laboral"]
pval_y <- corr_result$P[, "Ingreso laboral"]


tabla_corr <- tibble(
  Variable = names(cor_y),
  `Coef. de Pearson (r)` = round(cor_y, 3),
  `Valor p` = pval_y) %>%
  filter(Variable != "Ingreso laboral") %>%
  mutate(
    `Valor p` = case_when(
      is.na(`Valor p`) ~ NA_character_,
      `Valor p` < 2e-16 ~ "2e-16",
      TRUE ~ formatC(`Valor p`, format = "e", digits = 3)),
    Significativo = ifelse(as.numeric(pval_y[match(Variable, names(pval_y))]) < 0.05, "Sí", "No"))

tabla_corr %>%
  kbl(caption = "Tabla 11. Coeficiente de Correlación de Pearson con la Variable Dependiente",
    align = c("l", "r", "r", "c"),
    col.names = c("Variable", "Coef. de Pearson (r)", "Valor p", "Significativo")) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    font_size = 14,
    position = "center") %>%
  row_spec(0, background = "#2b6cb0", color = "white", bold = TRUE) %>%
  column_spec(1, bold = TRUE, width = "3cm") %>%
  column_spec(2:4, width = "2.5cm") %>%
  footnote(general = "Elaboración propia con base en GIEH DANE 2025",
    general_title = "Nota:")
Tabla 11. Coeficiente de Correlación de Pearson con la Variable Dependiente
Variable Coef. de Pearson (r) Valor p Significativo
Horas trabajadas 0.110 2e-16 Sí
Antiguedad en el trabajo actual 0.076 2e-16 Sí
Pago en especie (comida) 0.417 2e-16 Sí
Pago en especie (vivienda) 0.716 2e-16 Sí
Nota:
Elaboración propia con base en GIEH DANE 2025

5.4 VIF

library(readxl)
library(dplyr)
library(broom)
library(knitr)
library(kableExtra)

archivo_excel <- if (file.exists("Ocupados (1).xlsx")) "Ocupados.xlsx" else "Ocupados.xlsx"
Base_datos <- read_excel(archivo_excel)
names(Base_datos) <- trimws(names(Base_datos))

Base_modelo <- Base_datos %>%
  filter(
    !is.na(`Ingreso laboral`),
    `Ingreso laboral` > 0
  ) %>%
  select(
    `Ingreso laboral`,
    `Horas trabajadas`,
    `Antiguedad  en el trabajo actual`,
    `Vacaciones con sueldo`,
    `Pago en especie (comida)`,
    `Pago en especie (vivienda)`,
    Departamento
  ) %>%
  na.omit() %>%
  mutate(
    `Vacaciones con sueldo` = as.factor(`Vacaciones con sueldo`),
    Departamento = as.factor(Departamento)
  )


Modelo_final <- lm(
  log(`Ingreso laboral`) ~
    `Horas trabajadas` +
    `Antiguedad  en el trabajo actual` +
    `Vacaciones con sueldo` +
    `Pago en especie (comida)` +
    `Pago en especie (vivienda)` +
    Departamento,
  data = Base_modelo
)


X <- model.matrix(Modelo_final)
if ("(Intercept)" %in% colnames(X)) {
  X <- X[, colnames(X) != "(Intercept)", drop = FALSE]
}

vif_valores <- sapply(seq_len(ncol(X)), function(i) {
  r2 <- summary(lm(X[, i] ~ X[, -i, drop = FALSE]))$r.squared
  1 / (1 - r2)
})

vif_df <- data.frame(
  Variable = colnames(X),
  VIF = round(vif_valores, 3),
  Tolerancia = round(1 / vif_valores, 4),
  Diagnóstico = case_when(
    vif_valores >= 10 ~ "Grave",
    vif_valores >= 5 ~ "Moderado",
    TRUE ~ "Aceptable"
  )
) %>%
  mutate(
    es_departamento = ifelse(grepl("^Departamento", Variable), 1, 0)
  ) %>%
  arrange(es_departamento, Variable) %>%
  select(-es_departamento)

kbl(
  vif_df,
  caption = "Tabla 12. Análisis de Multicolinealidad mediante el Factor de Inflación de la Varianza (VIF)",
  col.names = c("Variable", "VIF", "Tolerancia", "Diagnóstico"),
  align = c("l", "c", "c", "c")
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    position = "center"
  )
Tabla 12. Análisis de Multicolinealidad mediante el Factor de Inflación de la Varianza (VIF)
Variable VIF Tolerancia Diagnóstico
Antiguedad en el trabajo actual 2.006 0.4985 Aceptable
Horas trabajadas 1.248 0.8014 Aceptable
Pago en especie (comida) 1.514 0.6604 Aceptable
Pago en especie (vivienda) 1.972 0.5070 Aceptable
Vacaciones con sueldoSi 3.011 0.3322 Aceptable
DepartamentoCAUCA 1.144 0.8743 Aceptable
DepartamentoLA GUAJIRA 1.471 0.6798 Aceptable
DepartamentoVALLE DEL CAUCA 1.791 0.5583 Aceptable
## Gráfico de Multicolinealidad (VIF)

En la Tabla , todas las variables se relacionan de forma estadísticamente significativa con el ingreso laboral (valor \(p < 0.05\)). No obstante, la fuerza de esta relación varía ampliamente: la antigüedad (\(r = 0.076\)) y las horas trabajadas (\(r = 0.110\)) muestran una asociación débil, lo que indica que influyen poco en el nivel de ingresos. En contraste, el pago en especie presenta una relación mucho más marcada, siendo moderada para comida (\(r = 0.417\)) y fuerte para vivienda (\(r = 0.716\)).En resumen, los beneficios no monetarios (como vivienda y alimentación) están mucho más ligados a mejores salarios que el tiempo acumulado en el puesto o la cantidad de horas trabajadas.

los indicadores de beneficios laborales (Vacaciones con sueldo, Pago en especie (comida) y Pago en especie (vivienda)) y el conjunto de dummies por Departamento se mantienen en rangos estables y alejados de los umbrales críticos de 5 y 10. Estos resultados descartan la presencia de multicolinealidad perjudicial en la muestra de la GEIH (DANE), garantizando que las elasticidades y semielasticidades estimadas midan el efecto directo y aislado de la jornada, la experiencia acumulada y las prestaciones sobre el logaritmo del ingreso laboral.

6 CONCLUSIONES

El análisis realizado permitió estudiar los factores laborales asociados a los ingresos de los trabajadores en Colombia, utilizando información de la Gran Encuesta Integrada de Hogares (GEIH) correspondiente a marzo de 2025. A partir de las variables seleccionadas, se encontró que las horas trabajadas tienen una relación importante con el ingreso laboral, ya que, en general, las personas que trabajan una mayor cantidad de horas pueden presentar ingresos más altos. Esto muestra que la intensidad de la jornada laboral es un aspecto importante al momento de analizar los ingresos.La antigüedad en el trabajo también permite encontrar diferencias en los ingresos. Los trabajadores que llevan más tiempo en su empleo pueden tener mejores condiciones laborales y mayores ingresos, aunque esta relación no significa que la antigüedad por sí sola determine cuánto gana una persona.

También se puede observar que no todos los trabajadores tienen las mismas condiciones laborales, y estas diferencias pueden ayudar a explicar por qué algunas personas reciben mayores ingresos que otras. Por ejemplo, trabajar más horas o tener mayor antigüedad puede estar relacionado con un ingreso más alto.

Sin embargo, es importante aclarar que estos resultados no significan que una variable sea directamente la causa de que una persona gane más, sino que existe una relación entre ellas. En general, el análisis nos permitió tener una mejor idea de cómo las condiciones laborales se relacionan con los ingresos de los trabajadores en Colombia.

7 BIBLIOGRAFIA

.Departamento Administrativo Nacional de Estadística (DANE). Gran Encuesta Integrada de Hogares (GEIH), marzo de 2025.

.Ministerio del Trabajo. (2023). Ley 2101 de 2021: Reducción gradual de la jornada laboral en Colombia. Gobierno de Colombia. https://www.mintrabajo.gov.co/

.asso, F. (2002). Estructura salarial y retorno a la experiencia en Colombia (Borradores de Economía No. 220). Banco de la República de Colombia. https://www.banrep.gov.co/es/desequilibrios-nominales-y-reales-del-tipo-cambio-colombia

.Galvis, L. A. (2002). Diferencias regionales en los salarios en Colombia. Banco de la República de Colombia. https://www.banrep.gov.co/es/comunicado-27-12-2016

.Royuela, V., & García, G. A. (2015). Crecimiento económico y disparidades salariales regionales en Colombia.