1 Introducción

Entender los determinantes del ingreso familiar constituye uno de los elementos centrales para el diseño de políticas públicas que serán centradas en la reducción de la pobreza y la promoción del desarrollo socioeconómico equitativo (Muñoz, 2004). En Colombia, esta problemática adquiere mucha relevancia en regiones como el Pacífico, la cual será nuestro objeto de estudio, caracterizada por persistentes brechas de desigualdad y condiciones socioeconómicas adversas que contrastan con la riqueza de sus recursos naturales y diversidad cultural (Galvis-Aponte et al., 2016).

La región pacífica colombiana, conformada por los departamentos de Chocó, Cauca, Nariño y Valle del Cauca, cuenta con una población aproximada de 0.55 millones, 1.56 millones, 1.70 millones y 4.64 millones respectivamente. En estos departamentos predominan las comunidades afrodescendientes, las cuales representan alrededor del 74.4% de la población en Chocó, 22.8% en Nariño, 20.0% en Cauca y 17.5% en Valle del Cauca. y con una población indígena cerca del 15% en Chocó (según censo 2018), 15.9% en Nariño y 25.4% en Cauca, mientras que en Valle del Cauca apenas alcanza el 0.8%.

Según el DANE, la incidencia de pobreza monetaria en 2024 fue extremadamente alta en la región Pacífica: Chocó 67.4%, Cauca 43.1%, Nariño 39.2% y Valle del Cauca 25.7%. Estos valores superan con creces el promedio nacional (31.8%). En conjunto, estas cifras, sumadas al aislamiento geográfico de la región y a la limitada presencia institucional, reflejan una alta vulnerabilidad socioeconómica en el Pacífico colombiano, lo que resalta la necesidad de analizar detalladamente los factores que afectan la generación de ingresos familiares (Sánchez-Torres, 2024).

En Colombia, la Encuesta Nacional de Calidad de Vida (ECV) es una operación estadística que el DANE realiza con el objeto de recoger información sobre diferentes aspectos y dimensiones del bienestar y las condiciones de vida de los hogares, incluyendo temas como lo son el acceso a bienes y servicios públicos, privados o comunales, salud, educación, atención integral de niños menores de 5 años, entre otros (DANE, 2025). La consideración de estos aspectos hace posible realizar análisis a los factores que explican los diferentes niveles de vida existentes en la sociedad. La Encuesta Nacional de Calidad de Vida (ECV) es, además, la fuente de información del cálculo del Índice de Pobreza Multidimensional, IPM (DNP, 2016).

Adicionalmente, un modelo lineal es una ecuación matemática o representación que describe la relación entre dos o más cantidades, asumiendo que la relación es directa y tiene una tasa de cambio constante (Contreras Navarrete, 2011). Estos han demostrado ser herramientas efectivas para el análisis de los determinantes del ingreso familiar, permitiendo cuantificar el efecto de variables socioeconómicas y demográficas sobre los ingresos de los hogares (Gaviria Ríos et al., 2007).

En el contexto específico de la región Pacífica, el análisis de estos determinantes cobra particular importancia debido a las características específicas de su población. Los bajos niveles educativos, la alta informalidad laboral, las estructuras familiares complejas y las condiciones de exclusión social que caracterizan a esta región sugieren que los patrones de determinación del ingreso pueden diferir significativamente de los observados en otras regiones del país (Espinosa-Espinosa, 2021).

El presente estudio aplica un modelo de regresión lineal múltiple utilizando los datos de la ECV para la región Pacífica, con el objetivo de analizar la relación entre el ingreso familiar y un conjunto de variables que incluyen la edad, el departamento, el sexo del jefe de hogar, la cantidad de personas, y el nivel educativo del jefe de hogar. Esta selección de variables se basa tanto en la revisión de la literatura especializada como en las características socioeconómicas específicas de la región Pacífica (Auvert Albornoz, 2014).

2 Metodología

2.1 Método empleado

El estudio partió de una búsqueda en la página del DANE para obtener una base de datos adecuada, a la que se le aplicaría el método de Regresión Lineal Múltiple. Se seleccionó la Encuesta de Calidad de Vida (ECV) 2024 como fuente de información, reconocida como la principal operación estadística que el DANE realiza para recoger información sobre diferentes aspectos y dimensiones del bienestar y las condiciones de vida de los hogares (DANE, 2024). A partir del archivo original, se seleccionaron las variables a emplear, las cuales como variable dependiente se escogió el ingreso del hogar, y como variables independientes se escogieron la edad, el departamento, el sexo del jefe del hogar, la cantidad de personas que habitan el hogar, el nivel educativo alcanzado por el jefe de hogar, y la cantidad de horas trabajadas la semana pasada. Se prosiguió con un filtro en la base de datos de estas variables para tener solamente los datos de interés, como lo es que nuestro estudio se realizará en la región pacífica.

Al analizar los recursos o capitales, muchas veces los datos reales no siempre se comportan de manera lineal. Muchas veces, la variable dependiente puede tener una relación asimétrica. Para contrarrestar esto, se utilizó la función logaritmo natural de una variable en vez de la variable en sí. Esto tiene muchas propiedades que pueden mejorar los modelos, ya que puede transformar una relación no lineal en una lineal (Vidal Sánchez, 2024). Además, según la University of Virginia Library (2018), aplicar un logaritmo ayuda a “estabilizar la varianza y reducir la asimetría” de los datos, lo que contribuye a que los modelos cumplan mejor los supuestos estadísticos.

La adopción de la transformación logarítmica de los ingresos en un modelo econométrico se fundamenta en principios económicos y estadísticos que mejoran tanto la interpretación como la validez de los supuestos del análisis. Económicamente, el ingreso de los hogares presenta distribuciones sesgadas con colas largas a la derecha, debido a la presencia de algunos hogares con niveles muy altos, lo que genera heterogeneidad en la varianza de los residuos (heterocedasticidad) y dificulta la linealidad de la relación con los determinantes. Al aplicar el logaritmo natural a la variable ingreso, se efectúa una compresión de los valores extremos, de modo que el rango de variación se reduce y la distribución resultante se aproxima más a la normal. Esto facilita la estimación de parámetros bajo mínimos cuadrados ordinarios, pues atiende el supuesto de homocedasticidad al estabilizar la varianza de los errores y atenúa el peso de los outliers.

Previo a la estimación se realizó un análisis descriptivo por medio de tablas de frecuencias, medias, desviaciones estándar y revisión de extremos con el fin de caracterizar la muestra, detectar valores atípicos y decidir las codificaciones definitivas. A continuación, se estimaron modelos de Regresión Lineal Múltiple (Mínimos Cuadrados Ordinarios), incorporando los controles demográficos, laborales y educativos señalados. La regresión lineal múltiple permite generar un modelo lineal en el que el valor de la variable dependiente se determina a partir de un conjunto de variables predictoras, siguiendo la ecuación: Yi = (β₀ + β₁X₁ᵢ + β₂X₂ᵢ + ⋯ + βₙXₙᵢ) + eᵢ (Ciencia de Datos, 2017)

Para comprobar la validez de las inferencias se efectuó un diagnóstico gráfico y analítico de los supuestos clásicos del modelo de regresión lineal múltiple. Los principales supuestos evaluados fueron: linealidad (la relación entre las variables independientes y la dependiente es lineal), independencia (los residuos son independientes entre sí), homocedasticidad (la varianza de los residuos es constante para cada valor de las variables independientes), normalidad (los residuos se distribuyen normalmente con media cero), y no multicolinealidad (no existe relación lineal exacta entre las variables independientes) (Marín, 2018).

La validación de estos supuestos se realizó mediante: visualización de residuos (gráfico de residuos vs valores ajustados) para evaluar homocedasticidad y linealidad, gráfico Q-Q para verificar la normalidad aproximada de residuos, pruebas de heterocedasticidad, y cálculo de medidas de influencia como las distancias de Cook para identificar observaciones atípicas que pudieran estar afectando significativamente los resultados del modelo (Barragán-Moreno et al., 2024). El análisis de los residuos es fundamental en la regresión, ya que informa sobre el grado de exactitud de los pronósticos y permite detectar casos atípicos que pueden ayudar a perfeccionar la ecuación de regresión (Marín, 2018). Tambien, Se calculó el Factor de Inflación de la Varianza (VIF) para cada variable independiente con el fin de detectar la presencia de multicolinealidad. Un VIF menor a 5 indica que no existen problemas graves de colinealidad, mientras que valores superiores a 10 señalan multicolinealidad severa que puede distorsionar las estimaciones de los coeficientes (Dormann et al., 2013).

2.2 Variables

Las variables utilizadas en el estudio se dividen en dos grupos: dependientes e independientes. La variable dependiente que fue seleccionada es el ingreso del hogar, la cual busca medir el nivel monetario total percibido por los miembros del hogar. Este indicador refleja el grado de bienestar económico, la capacidad de consumo y las oportunidades de inversión en educación, salud y vivienda (Muñoz, 2004).

En cuanto a las variables independientes, se consideran varios factores cuyo nivel de significancia resulta fundamental para explicar el ingreso. En primer lugar, la edad es un factor que se considera relacionado con una mayor experiencia y, por lo tanto, con mayores ingresos. Sin embargo, las jubilaciones pueden afectar el comportamiento lineal que se esperaría, haciendo que este se estabilice o disminuya (Guataquí, 2009). Por ello, la edad se reconoce como una variable importante para relacionar con los ingresos, ya que estos tienden a variar a lo largo del ciclo de vida laboral. En Colombia, menos de una cuarta parte de los adultos mayores reciben pensión, y los ingresos laborales siguen siendo la principal fuente de sustento incluso en la vejez (Villar et al., 2016)

Los departamentos corresponde a la Región Pacífica, la cual se escoge como filtro focal del estudio, dado que es una de las zonas de Colombia más diversas en cuanto a clima, población y condiciones económicas, lo que se supone que permitirá realizar un análisis más preciso de las dinámicas económicas regionales. Los estudios muestran que existen diferencias salariales significativas según el área geográfica, lo que da evidencia de segmentación del mercado laboral en Colombia (Mesa et al., 2008)

El sexo (género) se incluye porque influye de manera sistemática en las oportunidades laborales y en la remuneración. A nivel agregado, las mujeres suelen enfrentar brechas salariales respecto a los hombres, mayor participación en empleos de menor remuneración o en sectores con alta informalidad, y sobrecarga de responsabilidades de cuidado que limitan las horas trabajadas o la disponibilidad para empleos formales (DANE, 2024). La brecha salarial en Colombia no cede, las mujeres continúan en desventaja, ganando 6,3% menos que los hombres en 2021. Por tanto, el indicador de sexo permite captar efectos de segregación ocupacional, diferencias en la participación laboral y posibles discriminaciones salariales (Gómez-Segura, 2018).

La cantidad de personas en el hogar, porque afecta la distribución de recursos y la presión sobre el ingreso total del hogar. Hogares con mayor número de miembros enfrentan mayores necesidades de consumo y, salvo que aumente proporcionalmente el número de miembros que generan ingresos, presentan menores ingresos per cápita (Lora, 2025). Además, el tamaño del hogar está ligado a razones demográficas (niñez, dependencia de adultos mayores) que inciden en la capacidad de ahorro e inversión en capital humano. Los estudios muestran que las economías de escala y las escalas de equivalencia deben considerarse al analizar el bienestar de los hogares según su composición demográfica (Muñoz & Ramos, 2002).

La educación es otra variable para tomar en cuenta, las personas con mayor nivel educativo tienden a acceder a empleos mejor remunerados y con mayores oportunidades de ascenso, además de aumentar su productividad y capital humano (Meza Buchely, 2020). Por lo tanto, se espera que, a mayor grado educativo alcanzado, el ingreso también sea más alto. Los estudios econométricos confirman que la educación tiene una relación significativa en la disminución del Coeficiente de Gini en Colombia, y que los retornos de la escolaridad guardan relación directa y permanente con el salario (Buelvas, 2019). Como señalan Psacharopoulos y Patrinos (2018), “por esta razón la educación, y en particular la educación superior, constituyen un elemento importante dentro de los múltiples determinantes del crecimiento económico.”

La cantidad de horas trabajadas la semana pasada constituye una variable fundamental que refleja la intensidad laboral y mantiene una relación directa con el nivel de ingresos percibidos por los trabajadores. En Colombia, donde la jornada laboral máxima se ha reducido gradualmente desde 48 a 47 horas semanales en 2023, con proyección a 42 horas en 2026 (Ministerio del Trabajo, 2023), los estudios empíricos demuestran que existe una correlación positiva entre horas trabajadas e ingresos laborales. Guataquí et al. (2009) encontraron que los asalariados, quienes trabajaban en promedio 49.9 horas semanales, tenían ingresos por hora 18% mayores que los trabajadores cuenta propia que laboraban 47.8 horas semanales. En el contexto de la región Pacífica, donde predominan actividades informales, las horas trabajadas adquieren particular relevancia como mecanismo compensatorio, ya que trabajadores en sectores informales requieren jornadas extendidas para obtener ingresos equiparables al salario mínimo (Vargas et al., 2015).

2.3 Descripción del modelo

El modelo fue estimado mediante Mínimos Cuadrados Ordinarios (MCO) utilizando una muestra de 4,169 hogares representativos de la región Pacífica, extraídos de la Encuesta de Calidad de Vida (ECV) 2024 del DANE. La estructura del modelo incorpora seis variables explicativas que vemos en la tabla.

variables_modelo <- data.frame(
  Variable = c("log(ING)", "Bo", "Edad", "Dpto", "Sexo", "C.depersonas", "H.trabajadas", "e"),
  Descripción = c(
    "Logaritmo natural del ingreso del hogar",
    "Término constante (intercepto) del modelo",
    "Edad del jefe del hogar",
    "Departamento de residencia",
    "Género del jefe del hogar",
    "Cantidad de personas en el hogares",
    "Horas trabajadas por el jefe del hogar la semana pasada",
    "Término de error aleatorio"
  ),
  Tipo_Variable = c(
    "Variable dependiente (transformada)",
    "Parámetro",
    "Cuantitativa",
    "Categórica ",
    "Categórica ",
    "Cuantitativa",
    "Continua",
    "Error"
  ),
  Ejemplos_Notas = c(
    "Transformación logarítmica para linealizar la relación",
    "Valor base cuando todas las variables son cero",
    "Años",
    "",
    "",
    "",
    "horas/semana",
    "Captura factores no observados en el modelo"
  )
)


tabla <- kable(variables_modelo, 
               format = "html",
               col.names = c("Variable", "Descripción", "Tipo de Variable", "Notas"),
               align = c('l', 'l', 'l', 'l'),
               caption = "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 = "4cm") %>%  # Cambiado de 2:8 a columnas específicas
  column_spec(3, width = "3cm") %>%
  column_spec(4, width = "3.5cm") %>%
  footnote(
    general = "Fuente: Elaboración propia con base en ECV DANE 2024",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )

tabla
Tabla de Variables del Modelo de Regresión
Variable Descripción Tipo de Variable Notas
log(ING) Logaritmo natural del ingreso del hogar Variable dependiente (transformada) Transformación logarítmica para linealizar la relación
Bo Término constante (intercepto) del modelo Parámetro Valor base cuando todas las variables son cero
Edad Edad del jefe del hogar Cuantitativa Años
Dpto Departamento de residencia Categórica
Sexo Género del jefe del hogar Categórica
C.depersonas Cantidad de personas en el hogares Cuantitativa
H.trabajadas Horas trabajadas por el jefe del hogar la semana pasada Continua horas/semana
e Término de error aleatorio Error Captura factores no observados en el modelo
Nota: Fuente: Elaboración propia con base en ECV DANE 2024

En regresión lineal múltiple, una variable dummy es un indicador binario que codifica categorías cualitativas para poder incorporarlas al modelo cuantitativo. Cada dummy toma el valor 1 si la observación pertenece a una categoría específica y 0 si pertenece a la categoría de referencia (o base). Así, en lugar de asignar un valor numérico arbitrario a una variable categórica, las dummies permiten medir el efecto diferencial asociado a cada grupo, comparándolo directamente con el grupo omitido.

Se emplearon dummies para el género del jefe de hogar (“SexoMujer”), para distintos niveles educativos (“EstudiosSecundaria”, “EstudiosTécnica/Tecnológica”, “EstudiosUniversitaria”, “EstudiosPostgrado”) y para la residencia departamental (“DepartamentoChocó”, “DepartamentoNariño”, “DepartamentoValle del Cauca”), De este modo, cada coeficiente de dummy mide la diferencia porcentual promedio en el logaritmo del ingreso de esos hogares frente a los de la categoría base, controlando por las variables continuas y otras dummies.

2.3.1 ln(ING)

La especificación logarítmica se implementa en tres pasos principales: primero, transformar la variable dependiente de ingreso del hogar mensual a su logaritmo natural, generando la nueva variable ln(ING). Segundo, estimar el modelo de regresión lineal múltiple sobre ln(ING) e incluir las variables explicativas –cuantitativas y dummies. Tercero, presentar los resultados en términos de elasticidades: para coeficientes continuos, βi×100% describe el cambio porcentual del ingreso por unidad de Xi; para dummies, (eExp(βi)−1)×100% expresa la diferencia porcentual del ingreso entre la categoría representada por la dummy y la categoría base. Este procedimiento no solo mejora la adecuación del modelo a los datos reales sino que dota al análisis de una interpretación intuitiva y directamente vinculada al discurso de políticas públicas enfocadas en la equidad de ingresos.

2.3.2 Ecuación del modelo:

La ecuación empleada en el modelo de regresión lineal múltiple tiene como objetivo expresar el logaritmo natural del ingreso del hogar como una combinación lineal de distintas variables socioeconómicas, demográficas y laborales. Cada término en la ecuación corresponde al efecto específico de una variable explicativa, permitiendo estimar cómo varía el ingreso familiar ante cambios unitarios en cada una de ellas, manteniendo las demás constantes.

El término independiente (β0) representa el valor esperado del logaritmo del ingreso familiar cuando todas las variables explicativas toman el valor de referencia o cero. Los coeficientes asociados a cada variable (βj) indican el cambio porcentual aproximado en el ingreso familiar ante una variación unitaria en cada factor, gracias a la transformación logarítmica de la variable dependiente. Por ejemplo, si el coeficiente de la edad es 0.02, se interpreta que un año adicional de edad del jefe de hogar se asocia con un aumento aproximado del 2% en el ingreso, controlando por los demás factores.

Las variables categóricas (como sexo, estudios o departamento) se interpretan en relación con la categoría de referencia, por lo que el coeficiente refleja la diferencia porcentual media frente a esa categoría. Finalmente, el término de error (εi) agrupa factores no observados o no incluidos en el modelo, que también inciden en el ingreso familiar. De esta forma, la estructura de la ecuación proporciona una visión detallada y cuantificable del papel de cada determinante sobre el bienestar económico de los hogares analizados.

Ecuación del modelo

\[log(ING) = \beta_0 + \beta_1(Edad) + \beta_2(Dpto) + \beta_3(Sexo) + \beta_4(C.de personas) + \beta_5(H. trabajadas) + \epsilon \]

2.4 Base de datos del estudio

Para el presente trabajo, se utiliza la base de datos de la ECV 2024 filtrada específicamente para la región Pacífica, que incluye los departamentos de Chocó, Cauca, Nariño y Valle del Cauca. La base de datos ha sido depurada y contiene únicamente las variables de interés para el modelo de regresión lineal:

#Librerias
library(tidyverse)
library(scales)
library(readxl)
library(ggcorrplot)
library(visreg)
library(nortest)
library(lmtest)
library(ggthemes)
library(ggpmisc)
library(DT)
library(plotly)

datos_hogar=read.csv("datos_hogar.csv", sep = ";") %>% 
  select(DIRECTORIO,I_HOGAR,CANT_PERSONAS_HOGAR) %>% 
  rename("Ingreso del hogar"=2,"C. personas en el hogar"=3) %>% 
  distinct(DIRECTORIO, .keep_all = TRUE) %>% filter(`Ingreso del hogar`!=0)

educacion=read.csv("educacion.csv", sep= ";") %>% 
  select(DIRECTORIO,P8587) %>% 
  group_by(DIRECTORIO) %>%
  filter(P8587 == max(P8587))  %>%
  ungroup() %>% 
  distinct(DIRECTORIO, .keep_all = TRUE) %>% 
  mutate(
    Estudios = case_when(
      P8587 == 1 ~ "Ninguno",
      P8587 == 2 ~ "Preescolar",
      P8587 == 3 ~ "Primaria (1º-5º)",
      P8587 == 4 ~ "Secundaria (6º-9º)",
      P8587 == 5 ~ "Media (10º-13º)",
      P8587 == 6 ~ "Técnico sin título",
      P8587 == 7 ~ "Técnico con título",
      P8587 == 8 ~ "Tecnológico sin título",
      P8587 == 9 ~ "Tecnológico con título",
      P8587 == 10 ~ "Universitario sin título",
      P8587 == 11 ~ "Universitario con título",
      P8587 == 12 ~ "Postgrado sin título",
      P8587 == 13 ~ "Postgrado con título",
      TRUE ~ "No especificado"
    ),
    CATEGORIA_EDUCATIVA = case_when(
      P8587 %in% 1:2 ~ "Primaria",
      P8587 %in% 3:5 ~ "Secundaria",
      P8587 %in% 6:9 ~ "Técnica/Tecnológica",
      P8587 %in% 10:11 ~ "Universitaria",
      P8587 %in% 12:13 ~ "Postgrado",
      TRUE ~ "Otro"
    ),    CATEGORIA_EDUCATIVA = factor(CATEGORIA_EDUCATIVA,
                                       levels = c("Primaria", "Secundaria", "Técnica/Tecnológica", 
                                                  "Universitaria", "Postgrado")))

caracteristicas_hogar=read.csv("Características_composición.CSV",sep= ";") %>% 
  filter(P6051==1) %>% 
  select(DIRECTORIO,P6020,P6040) %>% rename(Sexo=2,Edad=3)

vivienda=read.csv("Datos de la vivienda.csv",sep=";") %>% 
  select(DIRECTORIO,CLASE,P1_DEPARTAMENTO,P8520S1A1) %>% rename(Ubicacion=2,Departamento=3,Estrato=4) %>% 
  distinct(DIRECTORIO, .keep_all = TRUE)

trabajo=read.csv("Fuerza de trabajo.CSV",sep=";") %>% 
  select(DIRECTORIO,P8624,P415,P8634,P6426,P416,P6440,P6460,P6426,P8636) %>% 
  rename(Ingresos_mes=2,Horas_trabajadas_semana=3,"Lugar de trabajo"=4,Tiempo_trabajado=5,
         Semana_horas=6,contrato=7,Tipo_contrato=8,
         meses=8)

Base_datos=caracteristicas_hogar  %>% inner_join(datos_hogar,by="DIRECTORIO") %>% 
  inner_join(vivienda,by="DIRECTORIO") %>% inner_join(educacion,by="DIRECTORIO") %>% inner_join(trabajo,by="DIRECTORIO") %>% 
  filter(Departamento%in%c(76,19,52,27),Edad!=0,Edad>=18,`Ingreso del hogar`<=50000000) %>% 
  select(Departamento,`Ingreso del hogar`,`C. personas en el hogar`,Sexo,
         Edad,CATEGORIA_EDUCATIVA,Horas_trabajadas_semana) %>% mutate(
           Departamento= case_when(
             Departamento == 76 ~ "Valle del Cauca",
             Departamento == 19 ~ "Cauca",
             Departamento == 52 ~ "Nariño",
             Departamento == 27 ~ "Chocó"),
           Sexo= case_when(Sexo==1~ "Hombre",
                           Sexo==2~ "Mujer")) %>% 
  filter(!is.na(Horas_trabajadas_semana)) %>% 
  rename(Estudios=6,"Horas trabajadas la semana pasada"=7) %>% 
  filter(!is.na(`Horas trabajadas la semana pasada`))


library(reactable)

reactable(
  Base_datos,
  defaultPageSize = 15,
  showPageSizeOptions = TRUE,
  pageSizeOptions = c(10, 15, 25, 50),
  striped = TRUE,
  highlight = TRUE,
  bordered = TRUE,
  filterable = TRUE,
  showSortable = TRUE,
  wrap = FALSE,
  resizable = TRUE,
  defaultColDef = colDef(
    header = function(value) gsub("_", " ", toupper(value)),
    cell = function(value) format(value, nsmall = 1),
    align = "center",
    minWidth = 120,
    headerStyle = list(background = "#2E86AB", color = "white", fontWeight = "bold")
  ),
  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")
  ),
  columns = list(
  )
)

3 Resultados descriptivos

3.1 Análisis Univariado de las Variables del Modelo

3.1.1 Caracterización de la Variable Dependiente: Ingreso Total del Hogar

Los resultados que otorgó el análisis descriptivo para el ingreso total mensual de los hogares colombianos se colocaron en la tabla 1. Estos revelan características estructurales relevantes para la comprensión de la distribución del ingreso nacional.

library(dplyr)
library(kableExtra)


tabla_promedios <- Base_datos %>%
  group_by(Departamento) %>%  
  summarise(
    `N Observaciones` = n(),
    `Ingreso Promedio` = mean(`Ingreso del hogar`, na.rm = TRUE),
    `Desv. Estándar Ingreso` = sd(`Ingreso del hogar`, na.rm = TRUE),
    `Ingreso Mínimo` = min(`Ingreso del hogar`, na.rm = TRUE),
    `Ingreso Máximo` = max(`Ingreso del hogar`, 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 1: Estadísticas Descriptivas del ingreso del hogar 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 ECV DANE 2024",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 1: Estadísticas Descriptivas del ingreso del hogar por Departamento
Departamento N Ingreso promedio Desv. Estándar Mínimo Máximo
Cauca 1912 2602230 3867074 1416.667 44656667
Chocó 1088 2039157 3261609 6666.667 31566667
Nariño 2055 2432720 3567317 60000.000 43812500
Valle del Cauca 2125 3166932 3585574 250.000 38962000
Nota: Fuente: Elaboración propia con base en ECV DANE 2024

La distribución del ingreso total mensual de los hogares en la región Pacífica de Colombia refleja dinámicas económicas y sociales diferenciadas entre sus departamentos. Se observa que el Valle del Cauca es el departamento con el ingreso promedio más alto ($3,166,932 COP), seguido del Cauca ($2,602,230 COP), Chocó ($2,039,157 COP) y Nariño ($2,432,720 COP). Estas diferencias no solo responden a factores productivos y de acceso a mercados, sino también a condiciones estructurales históricas, como la presencia de economías formales e informales, y niveles desiguales de inversión pública.

La figura 1 permite visualizar con mayor claridad lo presentado en la tabla, pero desde una perspectiva geográfica, otorgando la ubicación de cada región, cada una con su respectivo ingreso promedio. El Valle del Cauca, con su posición geoestratégica y su base económica diversificada, presenta el mayor ingreso promedio, mientras que Nariño, a pesar de su importancia agrícola, registra el menor ingreso promedio. El Chocó y El Cauca se ubican en posiciones intermedias, pero presentan notorias brechas internas debido a sus altas desviaciones estándar, lo que representa una significativa heterogeneidad en la distribución al interior de estos territorios.

library(rnaturalearth)
library(sf)
library(devtools)

colombia <- ne_states(country = "colombia", returnclass = "sf")
pacifica <- colombia %>% filter(name %in% c("Chocó", "Valle del Cauca", "Cauca", "Nariño"))

pacifica_con_ingresos <- pacifica %>%
  left_join(tabla_promedios, by = c("name" = "Departamento"))

azules_puros <- c("#3E4A89", "#31688E", "#26828E", "#1F9E89")


g_mapa=ggplot() +
  geom_sf(data = colombia, fill = "lightgray", color = "white", alpha = 0.5) +
  geom_sf(data = pacifica_con_ingresos, 
          aes(fill = `Ingreso Promedio`), 
          color = "white", size = 0.8) +
   scale_fill_gradientn(
    name = "Ingreso Promedio (COP)",
    labels = dollar_format(prefix = "$", big.mark = ","),
    colors = azules_puros  
  ) +
  labs(
    title = "Figura 1 Mapa de Ingresos Promedio - Región Pacífica de Colombia",
    subtitle = "Distribución del ingreso familiar por departamento",
    caption = "Fuente: ECV DANE 2024"
  ) +theme_void() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
    plot.subtitle = element_text(hjust = 0.5, size = 12),
    legend.position = "right",
    legend.title = element_text(face = "bold")
  )

mapa_interactivo <- ggplotly(g_mapa, tooltip = "text", width = 800, height = 600) %>%
  layout(
    title = list(
      text = "Figura 1. Mapa de Ingresos Promedio - Región Pacífica de Colombia",
      x = 0.5,
      font = list(size = 18, weight = "bold")
    ),
    hoverlabel = list(
      bgcolor = "white",
      bordercolor = "black",
      font = list(size = 12, color = "black")
    ),
    margin = list(t = 60, b = 20, l = 20, r = 20),
    legend = list(
      orientation = "v",
      x = 0.9,
      y = 0.9,
      bgcolor = "rgba(255,255,255,0.8)",
      bordercolor = "lightgray"
    )
  ) %>%
  config(displayModeBar = TRUE, displaylogo = FALSE)

mapa_interactivo

3.2 Variables Explicativas Cuantitativas: Caracterización Estadística

3.2.1 Edad del jefe del hogar

Edad del jefe o responsable del hogar, la cual es medida en años tal como la reporta la Encuesta de Calidad de Vida (ECV) 2024. La Tabla 2 resume las estadísticas descriptivas por departamento.

tabla_promedios_edad <- Base_datos %>%
  group_by(Departamento) %>%  
  summarise(
    `Edad Promedio` = mean(Edad, na.rm = TRUE),
    `Desv. Estándar Ingreso` = sd(Edad, na.rm = TRUE),
    `Ingreso Mínimo` = min(Edad, na.rm = TRUE),
    `Ingreso Máximo` = max(Edad, na.rm = TRUE),
    .groups = 'drop'
  ) %>%
  mutate(
    `Edad Promedio` = round(`Edad Promedio`, 1),
    `Desv. Estándar Ingreso` = round(`Desv. Estándar Ingreso`, 2)
  )


tabla_promedios_edad %>%
  kbl(
    caption = "Tabla 2: Estadísticas Descriptivas de la edad del jefe del hogar Agrupadas por departamento",
    align = c("l", "r","r", "r", "r", "r", "r"),
    col.names = c("Código", "Edad Promedio",
                  "Desv. Estándar de la edad", "Mínimo de la edad", "Máximo de la edad")
  ) %>%
  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:5, width = "2.5cm") %>%
  footnote(
    general = "Fuente: Elaboración propia con base en ECV DANE 2024",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 2: Estadísticas Descriptivas de la edad del jefe del hogar Agrupadas por departamento
Código Edad Promedio Desv. Estándar de la edad Mínimo de la edad Máximo de la edad
Cauca 52.6 16.02 18 91
Chocó 46.9 16.47 18 92
Nariño 53.6 15.24 18 99
Valle del Cauca 52.7 15.48 18 98
Nota: Fuente: Elaboración propia con base en ECV DANE 2024

Con los datos de la tabla se observa una presencia marcada de adultos en etapa de consolidación laboral y también una porción significativa de personas en edad cercana a la jubilación; las medias departamentales se ubican en la franja alta de la vida productiva, entre aproximadamente 47 y 54 años, y los extremos se extienden desde los 18 hasta casi los 100 años, lo que indica cobertura de todo el ciclo adulto. La desviación estándar, que es de alrededor de 15–17 años según departamento, refleja una dispersión que combina cohortes jóvenes y mayores dentro de cada muestra, generando colas a ambos lados de la distribución. Esta composición etaria sugiere que, en la muestra, los hogares incorporan tanto efectos de experiencia acumulada como situaciones vinculadas a retiro o inactividad por edad avanzada.

Dispercion_edad1 <- ggplot(Base_datos, aes(x = Edad,  
                                 y = log(`Ingreso del hogar`))) +
  geom_point(
    aes(color = log(`Ingreso del hogar`)),
    alpha = 0.7,
    size = 2.8
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 1.1,
    se = TRUE
  )  +
  scale_color_gradient(
    name = "Ingreso Familiar",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      dollar_format(prefix = "$", big.mark = ",")(exp(x))
    },
    breaks = log(c(5, 10, 15, 20)),
    guide = guide_colorbar(
      barwidth = 12,
      barheight = 0.8,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
  scale_x_continuous(
    name = "Edad del Jefe de Hogar",
    breaks = seq(20, 80, by = 10),
    limits = c(18, 100)  # 
  ) +
  labs(
    title = "Figura 2. RELACIÓN EDAD DEL JEFE DE HOGAR - INGRESO FAMILIAR ",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Encuesta Nacional de Hogares ECV 2024"
  ) +tema+
  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)
    ),
    strip.background = element_rect(
      fill = "#3498db",
      color = "#2980b9",
      linewidth = 1
    ),
    strip.text = element_text(
      color = "white",
      face = "bold",
      size = 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_edad1)

Dispercion_edad <- ggplot(Base_datos, aes(x = Edad,  
                                 y = log(`Ingreso del hogar`))) +
  geom_point(
    aes(color = log(`Ingreso del hogar`)),
    alpha = 0.7,
    size = 2.8
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 1.1,
    se = TRUE
  ) +
  facet_wrap(~ Departamento, ncol = 2) +
  scale_color_gradient(
    name = "Ingreso Familiar",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      dollar_format(prefix = "$", big.mark = ",")(exp(x))
    },
    breaks = log(c(5, 10, 15, 20)),
    guide = guide_colorbar(
      barwidth = 12,
      barheight = 0.8,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
  scale_x_continuous(
    name = "Edad del Jefe de Hogar",
    breaks = seq(20, 80, by = 10),
    limits = c(18, 100)  
  ) +
  labs(
    title = "Figura 3. RELACIÓN EDAD DEL JEFE DE HOGAR - INGRESO FAMILIAR DEPARTAMENTO",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Encuesta Nacional de Hogares ECV 2024"
  ) +tema+
  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)
    ),
    strip.background = element_rect(
      fill = "#3498db",
      color = "#2980b9",
      linewidth = 1
    ),
    strip.text = element_text(
      color = "white",
      face = "bold",
      size = 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_edad)

3.2.2 Cantidad de personas en el hogar

La cantidad de personas en el hogar se introduce como una variable independiente clave. Las estadísticas descriptivas presentadas en la Tabla 3 revelan la variabilidad transversal entre departamentos, lo cual es fundamental para identificar posibles patrones que el modelo econométrico puede capturar.

tabla_promedios_cp <- Base_datos %>%
  group_by(Departamento) %>%  
  summarise(
    `Edad Promedio` = mean(`C. personas en el hogar`, na.rm = TRUE),
    `Desv. Estándar Ingreso` = sd(`C. personas en el hogar`, na.rm = TRUE),
    `Ingreso Mínimo` = min(`C. personas en el hogar`, na.rm = TRUE),
    `Ingreso Máximo` = max(`C. personas en el hogar`, na.rm = TRUE),
    .groups = 'drop'
  ) %>%
  mutate(
    `Edad Promedio` = round(`Edad Promedio`, 1),
    `Desv. Estándar Ingreso` = round(`Desv. Estándar Ingreso`, 2)
  )


tabla_promedios_cp %>%
  kbl(
    caption = "Tabla 3: Estadísticas Descriptivas de la cantidad de personas en el hogar Agrupadas por departamento",
    align = c("l", "r","r", "r", "r", "r", "r"),
    col.names = c("Departamento", "Cantidad de personas 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:5, width = "2.5cm") %>%
  footnote(
    general = "Fuente: Elaboración propia con base en ECV DANE 2024",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 3: Estadísticas Descriptivas de la cantidad de personas en el hogar Agrupadas por departamento
Departamento Cantidad de personas Promedio Desv. Estándar Mínimo Máximo
Cauca 2.2 1.03 1 6
Chocó 2.1 1.03 1 7
Nariño 2.4 1.10 1 6
Valle del Cauca 2.5 1.24 1 8
Nota: Fuente: Elaboración propia con base en ECV DANE 2024

Los tamaños domésticos observados tienden a concentrarse en valores pequeños (la mayoría entre 1 y 4 integrantes), aunque también existen casos aislados de hogares considerablemente mayores que alargan la cola superior. Los promedios por departamento oscilan en una banda estrecha de entre 2.1 a 2.5 personas, pero esa similitud promedio oculta variaciones en la forma de la distribución, ya que mientras muchos hogares son unipersonales o nucleares, la presencia puntual de hogares con 6–8 miembros muestran arreglos residenciales más complejos presentes en la muestra. La desviación estándar cercana a 1 persona sugiere que, en términos generales, la mayoría de las observaciones se agrupan cerca del promedio, aunque los extremos indican heterogeneidad en tamaños familiares que podría relacionarse con diferencias generacionales, formas de convivencia y arreglos intergeneracionales dentro de la región

Dispercion_cantidad1 <- ggplot(Base_datos, aes(x = `C. personas en el hogar`, 
                                       y = log(`Ingreso del hogar`)))+
   geom_point(
    aes(color = log(`Ingreso del hogar`)),
    alpha = 0.7,
    size = 2.8
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 1.1,
    se = TRUE
  )  +
  scale_color_gradient(
    name = "Ingreso Familiar",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      dollar_format(prefix = "$", big.mark = ",")(exp(x))
    },
    breaks = log(c(5, 10, 15, 20)),
    guide = guide_colorbar(
      barwidth = 12,
      barheight = 0.8,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
   scale_x_continuous(
    breaks = function(x) unique(floor(pretty(seq(0, (max(x) + 1) * 1.1))))
  )+
  labs(
    title = "Figura 4. RELACIÓN CANTIDAD DE PERSONAS EN EL HOGAR - INGRESO FAMILIAR ",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Encuesta Nacional de Hogares ECV 2024"
  ) +tema+
  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)
    ),
    strip.background = element_rect(
      fill = "#3498db",
      color = "#2980b9",
      linewidth = 1
    ),
    strip.text = element_text(
      color = "white",
      face = "bold",
      size = 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_cantidad1)

Dispercion_cantidad <- ggplot(Base_datos, aes(x = `C. personas en el hogar`, 
                                       y = log(`Ingreso del hogar`)))+
   geom_point(
    aes(color = log(`Ingreso del hogar`)),
    alpha = 0.7,
    size = 2.8
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 1.1,
    se = TRUE
  ) +
  facet_wrap(~ Departamento, ncol = 2) +
  scale_color_gradient(
    name = "Ingreso Familiar",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      dollar_format(prefix = "$", big.mark = ",")(exp(x))
    },
    breaks = log(c(5, 10, 15, 20)),
    guide = guide_colorbar(
      barwidth = 12,
      barheight = 0.8,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
   scale_x_continuous(
    breaks = function(x) unique(floor(pretty(seq(0, (max(x) + 1) * 1.1))))
  )+
  labs(
    title = "Figura 5. RELACIÓN CANTIDAD DE PERSONAS EN EL HOGAR - INGRESO FAMILIAR  Departamentos",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Encuesta Nacional de Hogares ECV 2024"
  ) +tema+
  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)
    ),
    strip.background = element_rect(
      fill = "#3498db",
      color = "#2980b9",
      linewidth = 1
    ),
    strip.text = element_text(
      color = "white",
      face = "bold",
      size = 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_cantidad)

3.2.3 Horas trabajadas la semana pasada

tabla_promedios_ch <- Base_datos %>%
  group_by(Departamento) %>%  
  summarise(
    `Edad Promedio` = mean(`Horas trabajadas la semana pasada`, na.rm = TRUE),
    `Desv. Estándar Ingreso` = sd(`Horas trabajadas la semana pasada`, na.rm = TRUE),
    `Ingreso Mínimo` = min(`Horas trabajadas la semana pasada`, na.rm = TRUE),
    `Ingreso Máximo` = max(`Horas trabajadas la semana pasada`, na.rm = TRUE),
    .groups = 'drop'
  ) %>%
  mutate(
    `Edad Promedio` = round(`Edad Promedio`, 1),
    `Desv. Estándar Ingreso` = round(`Desv. Estándar Ingreso`, 2)
  )


tabla_promedios_ch %>%
  kbl(
    caption = "Tabla 4: Estadísticas Descriptivas de las horas trabajas la semana pasada por el jefe del hogar en el hogar Agrupadas por departamento",
    align = c("l", "r","r", "r", "r", "r", "r"),
    col.names = c("Departamento", "Cantidad de horas promedio trabajadas",
                  "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:5, width = "2.5cm") %>%
  footnote(
    general = "Fuente: Elaboración propia con base en ECV DANE 2024",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 4: Estadísticas Descriptivas de las horas trabajas la semana pasada por el jefe del hogar en el hogar Agrupadas por departamento
Departamento Cantidad de horas promedio trabajadas Desv. Estándar Mínimo Máximo
Cauca 36.8 14.00 2 120
Chocó 31.2 15.44 1 88
Nariño 36.2 15.50 1 112
Valle del Cauca 42.3 14.06 2 120
Nota: Fuente: Elaboración propia con base en ECV DANE 2024

La variable muestra una distribución amplia y asimetrías notorias, como lo son los promedios departamentales que varían (con Valle del Cauca claramente por encima del resto) y desviaciones estándar elevadas que señalan variabilidad en jornadas recientes. Los valores máximos registrados (hasta 120 horas en algunos casos) generan colas largas en la parte superior de la distribución y reflejan tanto jornadas extraordinarias como registros extremos que conviven con observaciones de jornadas muy reducidas o nulas. La coexistencia de jornadas cortas y registros de alta intensidad productiva implica una muestra con experiencias laborales muy diversas en términos de tiempo efectivo trabajado durante la última semana; esta dispersión se manifiesta en diferencias de concentración y en asimetría positiva en la mayoría de los departamentos.

Dispercion_horas1 <- ggplot(Base_datos, aes(x = `Horas trabajadas la semana pasada`, 
                                  y = log(`Ingreso del hogar`))) +
   geom_point(
    aes(color = log(`Ingreso del hogar`)),
    alpha = 0.7,
    size = 2.8
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 1.1,
    se = TRUE
  )  +
  scale_color_gradient(
    name = "Ingreso Familiar",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      dollar_format(prefix = "$", big.mark = ",")(exp(x))
    },
    breaks = log(c(5, 10, 15, 20)),
    guide = guide_colorbar(
      barwidth = 12,
      barheight = 0.8,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
   scale_x_continuous(
    breaks = function(x) unique(floor(pretty(seq(0, (max(x) + 1) * 1.1))))
  )+
  labs(
    title = "Figura 6. RELACIÓN HORAS TRABAJADAS LA SEMANA PASADA- INGRESO FAMILIAR ",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Encuesta Nacional de Hogares ECV 2024"
  ) +tema+
  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)
    ),
    strip.background = element_rect(
      fill = "#3498db",
      color = "#2980b9",
      linewidth = 1
    ),
    strip.text = element_text(
      color = "white",
      face = "bold",
      size = 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_horas1)

Dispercion_horas <- ggplot(Base_datos, aes(x = `Horas trabajadas la semana pasada`, 
                                  y = log(`Ingreso del hogar`))) +
   geom_point(
    aes(color = log(`Ingreso del hogar`)),
    alpha = 0.7,
    size = 2.8
  ) +
  geom_smooth(
    method = "lm",  
    color = "#1a3c5f",
    fill = "#6baed6",
    alpha = 0.3,
    linewidth = 1.1,
    se = TRUE
  ) +
  facet_wrap(~ Departamento, ncol = 2) +
  scale_color_gradient(
    name = "Ingreso Familiar",
    low = "#d0e1f9",
    high = "#1a3c5f",
    labels = function(x) {
      dollar_format(prefix = "$", big.mark = ",")(exp(x))
    },
    breaks = log(c(5, 10, 15, 20)),
    guide = guide_colorbar(
      barwidth = 12,
      barheight = 0.8,
      direction = "horizontal",
      title.position = "top"
    )
  ) +
   scale_x_continuous(
    breaks = function(x) unique(floor(pretty(seq(0, (max(x) + 1) * 1.1))))
  )+
  labs(
    title = "Figura 7. RELACIÓN HORAS TRABAJADAS LA SEMANA PASADA- INGRESO FAMILIAR Departamentos",
    subtitle = "Transformación logarítmica aplicada al ingreso | Curva de tendencia lineal",
    caption = "Fuente: Encuesta Nacional de Hogares ECV 2024"
  ) +tema+
  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)
    ),
    strip.background = element_rect(
      fill = "#3498db",
      color = "#2980b9",
      linewidth = 1
    ),
    strip.text = element_text(
      color = "white",
      face = "bold",
      size = 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)

3.3 Variables Categóricas: Distribución de Frecuencias

3.3.1 Estudios del jefe del hogar

La tabla 5 revela una estructura formativa predominantemente básica en la región Pacífica colombiana. El nivel de secundaria concentra la mayor proporción con 4,992 casos (69.5%), constituyéndose como la característica educativa más representativa entre los jefes de hogar. Le siguen en importancia la formación técnica o tecnológica con 889 casos (12.4%) y la educación universitaria con 774 observaciones (10.8%).

tabla_resultadosestudios <- Base_datos %>%
  group_by(Estudios) %>%  
  summarise(Frecuencia = n()) %>%
  arrange(desc(Frecuencia)) %>%
  mutate(
    Porcentaje = round((Frecuencia / sum(Frecuencia)) * 100, 1),
    Porcentaje_Acumulado = cumsum(Porcentaje)
  )



tabla_resultadosestudios %>%
  kable(
    format = "html",
    col.names = c("Estudios", "Frecuencia", "Porcentaje (%)", "Porcentaje Acumulado (%)"),
    align = c("l", "c", "c", "c"),
    caption = "Tabla 5 Distribución de Frecuencias del nivel de estudios del jefe del hogar"
  ) %>%
 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(2:4, width = "2.5cm") %>% 
  footnote(
    general = "Fuente: Elaboración propia con base en ECV DANE 2024",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 5 Distribución de Frecuencias del nivel de estudios del jefe del hogar
Estudios Frecuencia Porcentaje (%) Porcentaje Acumulado (%)
Secundaria 4992 69.5 69.5
Técnica/Tecnológica 889 12.4 81.9
Universitaria 774 10.8 92.7
Postgrado 314 4.4 97.1
Primaria 211 2.9 100.0
Nota: Fuente: Elaboración propia con base en ECV DANE 2024

La estudios de postgrado representa apenas el 4.4% (314 casos), mientras que los estudios de educación primaria constituyen el segmento más reducido con solo 211 casos (2.9%). Esta distribución evidencia una pirámide educativa marcadamente amplia en la base y muy estrecha en la cúspide, patrón que sugiere limitaciones en el acceso a educación superior y especializada en la región.

datos_estudio <- Base_datos %>%
  mutate(
    Estudios = factor(Estudios, 
                      levels = c("Primaria", "Secundaria", "Técnica/Tecnológica", 
                                 "Universitaria", "Postgrado"),
                      ordered = TRUE)
  )

boxplot_interactivo <- plot_ly(
  data = datos_estudio,
  x = ~Estudios,
  y = ~log(`Ingreso del hogar`),
  color = ~Estudios,
  colors = c("#3498db", "#2ecc71", "#9b59b6", "#e67e22", "#1abc9c"),
  type = "box",
  boxpoints = "outliers",
  pointpos = 0,
  hoverinfo = "y+x+name",
  hovertext = ~paste(
    "Nivel educativo:", Estudios,
    "<br>Log(Ingreso):", round(log(`Ingreso del hogar`), 2),
    "<br>Ingreso original:", round(`Ingreso del hogar`, 2)
  ),
  marker = list(
    size = 4,
    color = "#e74c3c",
    line = list(width = 0.5, color = "black")
  ),
  line = list(width = 0.8),
  width = 0.7
) %>%
  layout(
    title = list(
      text = "<b>Figura 8. </b><br><sub>RELACIÓN ENTRE NIVEL EDUCATIVO DEL JEFE DEL HOGAR E INGRESO FAMILIAR</sub>",
      x = 0.5,
      xanchor = "center",
      font = list(size = 18)
    ),
    xaxis = list(
      title = "<b>Nivel de Estudios</b>",
      tickangle = -45,
      tickfont = list(size = 12, weight = "bold")
    ),
    yaxis = list(
      title = "<b>Ingreso Familiar Mensual (Escala Logarítmica)</b>",
      tickfont = list(size = 11)
    ),
    showlegend = FALSE,
    hoverlabel = list(
      bgcolor = "white",
      font = list(size = 12)
    ),
    margin = list(l = 60, r = 40, t = 100, b = 100),
    annotations = list(
      list(
        x = 1,
        y = -0.3,
        text = "Fuente: Encuesta Nacional de Hogares ECV 2024",
        xref = "paper",
        yref = "paper",
        xanchor = "right",
        yanchor = "auto",
        showarrow = FALSE,
        font = list(size = 10, color = "gray50")
      )
    )
  )

boxplot_interactivo

3.3.2 Sexo del jefe del hogar

Sexo autodeclarado del jefe de hogar según la encuesta (p. ej., hombre / mujer). Se usa para evaluar diferencias en condiciones laborales, responsabilidades y resultados de ingreso entre géneros.

La tabla 6 revela una marcada disparidad de género. Los datos muestran una predominancia significativa de hombres como jefes de hogar, representando el 63.8% del total (4,580 casos), mientras que las mujeres constituyen el 36.2% (2,600 casos). Esta relación de aproximadamente 2:1 evidencia una estructura patriarcal aún persistente en la conformación de los hogares de la región.

tabla_resultadossex <- Base_datos %>%
  group_by(Sexo) %>%  
  summarise(Frecuencia = n()) %>%
  arrange(desc(Frecuencia)) %>%
  mutate(
    Porcentaje = round((Frecuencia / sum(Frecuencia)) * 100, 1),
    Porcentaje_Acumulado = cumsum(Porcentaje)
  )



tabla_resultadossex %>%
  kable(
    format = "html",
    col.names = c("Genero", "Frecuencia", "Porcentaje (%)", "Porcentaje Acumulado (%)"),
    align = c("l", "c", "c", "c"),
    caption = "Tabla 6 Distribución de Frecuencias del genero del jefe del hogar"
  ) %>%
 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(2:4, width = "2.5cm") %>% 
  footnote(
    general = "Fuente: Elaboración propia con base en ECV DANE 2024",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 6 Distribución de Frecuencias del genero del jefe del hogar
Genero Frecuencia Porcentaje (%) Porcentaje Acumulado (%)
Hombre 4580 63.8 63.8
Mujer 2600 36.2 100.0
Nota: Fuente: Elaboración propia con base en ECV DANE 2024

La siguiente gráfica muestra cómo se distribuye el ingreso familiar mensual en las muestras. Las cajas de ambas categorías tienen una forma muy parecida y las líneas de la mediana quedan en posiciones similares, lo que indica que los valores centrales del ingreso familiar encabezados por hombres y encabezados por mujeres son comparables en la muestra. Al mismo tiempo, en ambos grupos se observan puntos atípicos por encima y por debajo del rango intercuartílico, hay observaciones con ingresos muy superiores a la mediana y también con ingresos notablemente bajos, lo que genera colas en ambas direcciones.

boxplot_ingresosex_interactivo <- plot_ly(
  data = Base_datos,
  x = ~Sexo,
  y = ~log(`Ingreso del hogar`),
  color = ~Sexo,
  colors = c("#66c2a5", "#fc8d62"),
  type = "box",
  boxpoints = "outliers",
  pointpos = 0,
  hoverinfo = "y+x+text",
  hovertext = ~paste(
    "Género:", Sexo,
    "<br>Log(Ingreso):", round(log(`Ingreso del hogar`), 2),
    "<br>Ingreso original: $", format(round(`Ingreso del hogar`), big.mark = ",")
  ),
  marker = list(
    size = 3,
    color = "red",
    opacity = 0.6,
    line = list(width = 0.5, color = "black")
  ),
  line = list(width = 0.8),
  opacity = 0.8
) %>%
  layout(
    title = list(
      text = "<b>Figura 9.</b><br><sub> DISTRIBUCIÓN DEL INGRESO FAMILIAR POR GÉNERO DEL JEFE DEL HOGAR</sub>",
      x = 0.5,
      xanchor = "center",
      font = list(size = 18, family = "sans")
    ),
    xaxis = list(
      title = "<b>Género</b>",
      tickangle = -45,
      tickfont = list(size = 12, family = "sans", weight = "bold"),
      titlefont = list(size = 12, family = "sans", weight = "bold")
    ),
    yaxis = list(
      title = "<b>Ingreso Familiar Mensual (Escala Logarítmica)</b>",
      tickfont = list(size = 11, family = "sans"),
      titlefont = list(size = 12, family = "sans", weight = "bold")
    ),
    showlegend = FALSE,
    hoverlabel = list(
      bgcolor = "white",
      font = list(size = 12, family = "sans")
    ),
    margin = list(l = 80, r = 40, t = 120, b = 100),
    plot_bgcolor = "white",
    paper_bgcolor = "white",
    annotations = list(
      list(
        x = 1,
        y = -0.25,
        text = "Fuente: Datos de la encuesta nacional ECV 2024",
        xref = "paper",
        yref = "paper",
        xanchor = "right",
        yanchor = "auto",
        showarrow = FALSE,
        font = list(size = 10, color = "gray50", family = "sans")
      )
    )
  ) %>%
  layout(
    xaxis = list(showgrid = FALSE),
    yaxis = list(
      gridcolor = "gray90",
      gridwidth = 0.3,
      zeroline = FALSE
    )
  )

boxplot_ingresosex_interactivo

Mirando la dispersión, la longitud de las cajas y los “bigotes” sugiere que la variabilidad (en términos de IQR y rango) es importante para los dos sexos. Esto implica que, aunque la mayoría de los hogares se concentra alrededor de una mediana similar entre hombres y mujeres, existen hogares con ingresos excepcionalmente altos que elevan la cola derecha de la distribución. Al mismo tiempo se detectan observaciones bajas (outliers por debajo del bigote) en ambos grupos, con algunos valores extremos más notorios en la categoría femenina.

Además, la jefatura masculina está sobrerrepresentada, ya que tiene 63.8% hombres frente al 36.2% mujeres, lo cual condiciona la cantidad absoluta de observaciones por categoría y, por ende, la visibilidad de colas y outliers en cada caja.

3.3.3 Departamento

La tabla 7 revela la composición de la muestra estudiada en la región Pacífica colombiana.Valle del Cauca representa la mayor proporción con 2,125 observaciones (29.6%), seguido por Nariño con 2,055 casos (28.6%). En conjunto, estos dos departamentos concentran el 58.2% del total de la muestra, indicando una sobrerrepresentación relativa en el estudio. Cauca contribuye con 1912 hogares (26.6%), mientras que Chocó presenta la menor representación con 1088 casos (15.2%).

Esta distribución muestral refleja variaciones en el tamaño poblacional de cada departamento y posiblemente en la intensidad del trabajo de campo. La predominancia de Cauca y Nariño en la composición muestral sugiere que los resultados del análisis de regresión podrían estar más influenciados por las características de estos territorios. La representación diferenciada entre departamentos deberá considerarse en la interpretación de los resultados, particularmente en lo relacionado con la generalización de hallazgos a toda la región Pacífica.

La composición por departamento muestra una mayor concentración de observaciones en Cauca y Nariño, con Valle del Cauca y Chocó menos representados en la muestra. Esta distribución territorial no es homogénea: algunas jurisdicciones aportan un porcentaje sustancial de la muestra, lo que da como resultado densidades distintas de observaciones por departamento. La presencia relativa de cada departamento condiciona la variedad de contextos económicos y sociales reflejados en la base, generando diferencias en la composición de casos que deben tenerse en cuenta al describir resultados agregados o comparativos entre jurisdicciones. .

tabla_resultados <- Base_datos %>%
  group_by(Departamento) %>%  # Cambia 'Departamento' por tu variable
  summarise(Frecuencia = n()) %>%
  arrange(desc(Frecuencia)) %>%
  mutate(
    Porcentaje = round((Frecuencia / sum(Frecuencia)) * 100, 1),
    Porcentaje_Acumulado = cumsum(Porcentaje)
  )



tabla_resultados %>%
  kable(
    format = "html",
    col.names = c("Departamento", "Frecuencia", "Porcentaje (%)", "Porcentaje Acumulado (%)"),
    align = c("l", "c", "c", "c"),
    caption = "Tabla 7 Distribución de Frecuencias por Departamento"
  ) %>%
 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(2:4, width = "2.5cm") %>% 
  footnote(
    general = "Fuente: Elaboración propia con base en ECV DANE 2024",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 7 Distribución de Frecuencias por Departamento
Departamento Frecuencia Porcentaje (%) Porcentaje Acumulado (%)
Valle del Cauca 2125 29.6 29.6
Nariño 2055 28.6 58.2
Cauca 1912 26.6 84.8
Chocó 1088 15.2 100.0
Nota: Fuente: Elaboración propia con base en ECV DANE 2024

4 Estimación del modelo de regresión multiple

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

Modelo_final <- lm(log(`Ingreso del hogar`) ~ Sexo + Estudios +
                  `C. personas en el hogar` + Edad + `Horas trabajadas la semana pasada` +
                  Departamento, Base_datos)

resumen_mod <- broom::tidy(Modelo_final) %>%
  mutate(across(where(is.numeric), ~ round(., 5))) %>%
  rename(
    `Variable` = term,
    `Coeficiente` = estimate,
    `Error Estándar` = std.error,
    `Estadístico t` = statistic,
    `Valor p` = p.value
  ) %>%
  mutate(
    Significancia = case_when(
      `Valor p` < 0.001 ~ "***",
      `Valor p` < 0.01  ~ "**",
      `Valor p` < 0.05  ~ "*",
      `Valor p` < 0.1   ~ ".",
      TRUE ~ ""
    ),
    `Valor p formateado` = case_when(
      is.na(`Valor p`) ~ "NA",
      `Valor p` < 0.0001 ~ "< 0.0001",
      TRUE ~ sprintf("%.4f", `Valor p`)
    )
  )

resumen_global <- glance(Modelo_final)

R2 <- round(resumen_global$adj.r.squared, 4)
Fstat <- round(resumen_global$statistic, 2)
pvalor_modelo <- ifelse(resumen_global$p.value < 0.0001, 
                       "< 0.0001", 
                       sprintf("%.4f", resumen_global$p.value))
N <- resumen_global$df.residual + length(Modelo_final$coefficients)

filas_resumen <- tibble(
  Variable = c("R² ajustado", "F", "Valor p (modelo)", "N"),
  Coeficiente = as.character(c(R2, Fstat, pvalor_modelo, N)),
  `Error Estándar` = "",
  `Estadístico t` = "",
  `Valor p formateado` = "",
  Significancia = ""
)


tabla_principal <- resumen_mod %>%
  select(Variable, Coeficiente, `Error Estándar`, `Estadístico t`, 
         `Valor p formateado`, Significancia) %>%
  mutate_all(as.character)

tabla_final <- bind_rows(tabla_principal, filas_resumen)

names(tabla_final) <- c("Variable", "Coeficiente", "Error Estándar", 
                        "Estadístico t", "Valor p", "Sig.")

kbl(tabla_final,
    caption = "Figura 8. Resultados del modelo de regresión lineal múltiple",
    align = c("l", "r", "r", "r", "r", "c"),
    col.names = names(tabla_final)) %>%
  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 = "4cm") %>%
  column_spec(2:6, width = "2.5cm") %>%
  row_spec((nrow(tabla_principal) + 1):nrow(tabla_final),
           bold = TRUE, italic = FALSE, background = "#e6f0ff") %>%
  footnote(
    general = "Elaboración propia con base en ECV DANE 2024.",
    general_title = "Nota:",
    footnote_as_chunk = TRUE)
Figura 8. Resultados del modelo de regresión lineal múltiple
Variable Coeficiente Error Estándar Estadístico t Valor p Sig.
(Intercept) 12.8239 0.07211 177.82801 < 0.0001 ***
SexoMujer -0.04196 0.01888 -2.22284 0.0263
EstudiosSecundaria 0.267 0.05534 4.82511 < 0.0001 ***
EstudiosTécnica/Tecnológica 0.7964 0.06105 13.04548 < 0.0001 ***
EstudiosUniversitaria 1.29058 0.06132 21.04689 < 0.0001 ***
EstudiosPostgrado 2.09482 0.0696 30.09835 < 0.0001 ***
C. personas en el hogar 0.22975 0.00822 27.9611 < 0.0001 ***
Edad 0.00097 0.00059 1.6388 0.1013
Horas trabajadas la semana pasada 0.00895 0.00062 14.3254 < 0.0001 ***
DepartamentoChocó -0.11779 0.02978 -3.95485 < 0.0001 ***
DepartamentoNariño -0.06647 0.02445 -2.7185 0.0066 **
DepartamentoValle del Cauca 0.20043 0.02463 8.13644 < 0.0001 ***
R² ajustado 0.398
F 432.53
Valor p (modelo) < 0.0001
N 7180
Nota: Elaboración propia con base en ECV DANE 2024.

El intercepto, equivalente a 12.8239 y altamente significativo, corresponde al valor esperado del logaritmo del ingreso cuando todas las variables explicativas toman su categoría de referencia o el valor cero. Si bien tiene utilidad técnica para construir la predicción final, rara vez representa condiciones reales de los hogares y carece de interpretación sociológica directa.

La variable dummy de sexo mujer tiene un coeficiente negativo (-0.04196, p = 0.0263) y significativo, lo que evidencia que, a igualdad de condiciones, los hogares donde la jefatura es femenina presentan en promedio un ingreso 4.1% (exp(−0.04196)−1).) menor respecto a sus homólogos con jefatura masculina. Este resultado es consistente con la literatura sobre disparidades salariales de género en Colombia, y pone de manifiesto la persistencia de la brecha de género en el mercado laboral.

El conjunto de variables educativas utiliza dummies para comparar cada nivel frente a la categoría base (primaria): completar secundaria se asocia a un incremento del 30.6% (exp⁡(0.267)−1);en el ingreso familiar; finalizar estudios técnicos o tecnológicos a un aumento del 122%; tener título universitario implica una mejora de 264%; y la formación de posgrado, la diferencia más notable del modelo, equivale a un alza del 709%. Estas diferencias de retorno son un reflejo directo de la teoría del capital humano y evidencian la importante estratificación por nivel educativo en el país.

En el ámbito del hogar, por cada persona adicional la familia incrementa sus ingresos en 25.8% (exp(0.22975)−1), lo que generalmente se debe a la presencia de más miembros en edad productiva que aportan recursos. El coeficiente de la edad del jefe de hogar es positivo pero no significativo (0.00097, p = 0.1013), lo que señala que, al controlar otros factores, la edad individual no tiene un impacto robusto ni lineal sobre el ingreso.

El número de horas trabajadas por el jefe la semana previa tiene un impacto positivo y significativo (0.00895, p < 0.0001): cada hora adicional representa un 0.9% (exp(0.00895)−1) extra de ingreso semanal, reflejando la relación directa entre esfuerzo laboral y generación de recursos.

La variable departamento compara cada departamento de la region pacifica frente a el departamento del Cauca: vivir en Chocó implica un ingreso 11.1% (exp(−0.11779)−1) menor; en Nariño, la desventaja es de 6.4%; residir en Valle del Cauca, en cambio, está asociado con un incremento del 22.2% en el ingreso familiar. Estas diferencias ponen de manifiesto la existencia de marcadas desigualdades territoriales en Colombia, asociadas a factores estructurales, económicos y sociales de cada región.

Por último, los valores de R² ajustado (0.398) y F (432.53), junto con el valor p del modelo (< 0.0001), confirman la significancia global del modelo y la capacidad explicativa razonable de los factores analizados.

4.1 Prediccion del ingreso familiar

La Tabla 12 presenta las predicciones de ingreso familiar mensual para cinco escenarios hipotéticos construidos a partir del modelo de regresión lineal múltiple. Cada fila define un hogar con características específicas de sexo y nivel educativo del jefe, número de personas, edad, horas trabajadas la semana pasada y departamento de residencia. A continuación se explica, en párrafos, cómo cada atributo influye en el ingreso predicho según los coeficientes del modelo.

B0 <- Modelo_final$coefficients[1]  
B1 <- Modelo_final$coefficients[2]  
B2 <- Modelo_final$coefficients[3]  
B3 <- Modelo_final$coefficients[4]  
B4 <- Modelo_final$coefficients[5]  
B5 <- Modelo_final$coefficients[6]  
B6 <- Modelo_final$coefficients[7]  
B7 <- Modelo_final$coefficients[8]  
B8 <- Modelo_final$coefficients[9]  
B9 <- Modelo_final$coefficients[10] 
B10 <- Modelo_final$coefficients[11] 
B11 <- Modelo_final$coefficients[12] 

newdata <- data.frame(
  Sexo = c("Mujer", "Mujer", "Hombre", "Mujer", "Hombre"),
  Estudios = c("Secundaria", "Universitaria", "Postgrado", "Secundaria", "Técnica/Tecnológica"),
  `C. personas en el hogar` = c(2, 4, 2, 3, 4),
  Edad = c(49, 35, 50, 40, 42),
  `Horas trabajadas la semana pasada` = c(44, 35, 45, 30, 48),
  Departamento = c("Valle del Cauca", "Cauca", "Valle del Cauca", "Nariño", "Chocó")
)

names(newdata) <- c("Sexo", "Estudios", "C. personas en el hogar", "Edad", 
                    "Horas trabajadas la semana pasada", "Departamento")

predicciones_log <- predict(Modelo_final, newdata)
predicciones_reales <- exp(predicciones_log)

tabla_predicciones <- cbind(
  newdata,
  "Log_Ingreso_Predicho" = round(predicciones_log, 3),
  "Ingreso_Predicho_COP" = round(predicciones_reales, 0)
)

tabla_predicciones$Ingreso_Predicho_COP <- format(tabla_predicciones$Ingreso_Predicho_COP, 
                                                 big.mark = ",", 
                                                 scientific = FALSE)

kable(tabla_predicciones,
      caption = "Tabla 12. Predicciones de Ingreso Familiar para Diferentes Escenarios",
      align = c("l", "l", "c", "c", "c", "l", "r", "r"),
      col.names = c("Sexo", "Estudios", "Personas", "Edad", "Horas", "Departamento", 
                   "Log(Ingreso)", "Ingreso Predicho (COP)")) %>%
  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 = "1.5cm") %>%
  column_spec(2, width = "2.5cm") %>%
  column_spec(3:5, width = "1.5cm") %>%
  column_spec(6, width = "2cm") %>%
  column_spec(7:8, width = "2cm") %>%
  footnote(
    general = "Elaboración propia con base en ECV DANE 2024. Los ingresos predichos representan el ingreso total mensual del hogar.",
    general_title = "Nota:",
    footnote_as_chunk = TRUE
  )
Tabla 12. Predicciones de Ingreso Familiar para Diferentes Escenarios
Sexo Estudios Personas Edad Horas Departamento Log(Ingreso) Ingreso Predicho (COP)
Mujer Secundaria 2 49 44 Valle del Cauca 14.150 1,397,315
Mujer Universitaria 4 35 35 Cauca 15.339 4,586,501
Hombre Postgrado 2 50 45 Valle del Cauca 16.030 9,154,552
Mujer Secundaria 3 40 30 Nariño 13.979 1,177,503
Hombre Técnica/Tecnológica 4 42 48 Chocó 14.892 2,933,593
Nota: Elaboración propia con base en ECV DANE 2024. Los ingresos predichos representan el ingreso total mensual del hogar.

En el primer escenario, un hogar encabezado por una mujer con estudios de secundaria, conformado por dos personas, cuyo jefe tiene 49 años y trabajó 44 horas la semana pasada en Valle del Cauca, arroja un logaritmo del ingreso de 14.150, equivalente a COP 1,397,315. El efecto negativo asociado al sexo femenino reduce ligeramente la predicción, mientras que el entorno del Valle del Cauca, con un coeficiente positivo de 0.20043, contribuye a elevar el ingreso por encima del promedio nacional. El nivel de secundaria añade 0.267 al logaritmo de ingreso, generando un incremento del 30.6% respecto a la categoría base.

En el segundo caso, un hogar de una mujer universitaria con cuatro integrantes, edad de 35 años y 35 horas trabajadas en el departamento del Cauca predice un logaritmo de ingreso de 15.339, equivalente a COP 4,586,501. Aquí, el fuerte retorno a la educación universitaria (coeficiente 1.29058) es el principal motor del aumento de ingresos, superando con creces el efecto negativo de género. El menor número de horas trabajadas aún aporta positivamente (0.00895 por hora) y el coeficiente para Cauca (no tan alto como el de Valle del Cauca) modera ligeramente la predicción.

El tercer escenario ilustra el impacto de la educación de posgrado: un hombre posgraduado en Valle del Cauca, con dos personas en el hogar, 50 años y 45 horas semanales, obtiene un logaritmo de ingreso de 16.030, equivalente a COP 9,154,552. Aquí, el coeficiente de posgrado (2.09482) eleva el ingreso en 709%, mientras que la jefatura masculina no penaliza la predicción. El entorno favorable de Valle del Cauca y las horas trabajadas refuerzan el resultado, posicionándolo como el nivel más alto de ingreso predicho.

En el cuarto hogar, una mujer con secundaria, tres miembros, 40 años y 30 horas en Nariño, el logaritmo de ingreso es 13.979, equivalente a COP 1,177,503. La brecha regional se hace evidente: el coeficiente negativo de Nariño (–0.06647) reduce el ingreso en 6.4% respecto al promedio nacional, mientras que la jefatura femenina y el nivel educativo secundario generan valores moderados de ingreso.

Finalmente, el quinto escenario muestra un hombre técnico/tecnológico con cuatro integrantes, 42 años y 48 horas semanales en Chocó, prediciendo un logaritmo de ingreso de 14.892, equivalente a COP 2,933,593. Aunque la educación técnica/tecnológica aporta un aumento del 122%, la desventaja territorial de Chocó (–0.11779) reduce el ingreso en 11.8%. Sin embargo, las 48 horas trabajadas maximizan el aporte laboral al ingreso final.

En conjunto, estos ejemplos ilustran cómo el modelo combina los coeficientes de sexo, educación, tamaño del hogar, edad, horas trabajadas y departamento para predecir ingresos familiares que varían desde aproximadamente COP 1.1 millones hasta más de COP 9 millones, mostrando la magnitud relativa de cada factor en el contexto colombiano.

5 Resultados del modelo

5.1 Diagnóstico Gráfico de 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 verificada principalmente mediante la figura 10. residuos vs. valores ajustados generado por plot(model). Ese gráfico muestra, para cada observación, cuánto se desvía el valor observado del valor predicho por el modelo en función del valor predicho, una nube de residuos que se dispersa aleatoriamente alrededor de cero sin formar curvas indica que la especificación lineal aproxima bien la relación funcional entre regresores y respuesta.

library(broom)
Modelo_final=lm(log(`Ingreso del hogar`)~Sexo+Estudios+
                  `C. personas en el hogar`+Edad+`Horas trabajadas la semana pasada`+
                  Departamento
                ,Base_datos)


res_df <- augment(Modelo_final)

resid_vs_ajustados <- ggplot(res_df, aes(x = .fitted, y = .resid)) +
  geom_point(
    aes(color = abs(.resid), size = abs(.resid)),
    alpha = 0.6,
    show.legend = FALSE
  ) +
  geom_hline(
    yintercept = 0,
    color = "#e74c3c",
    linetype = "dashed",
    linewidth = 1.2,
    alpha = 0.8
  ) +
  geom_smooth(
    method = "loess",
    color = "#2b6cb0",
    fill = "#2b6cb0",
    alpha = 0.2,
    linewidth = 1.2,
    se = TRUE
  ) +
  geom_ribbon(
    stat = "smooth",
    method = "loess",
    aes(ymin = after_stat(ymax), ymax = after_stat(ymax)),
    fill = "#e74c3c",
    alpha = 0.1
  ) +
  
  geom_ribbon(
    stat = "smooth", 
    method = "loess",
    aes(ymin = after_stat(ymin), ymax = after_stat(ymin)),
    fill = "#e74c3c",
    alpha = 0.1
  ) +
  scale_color_gradient(low = "#2b6cb0", high = "#e74c3c") +
  scale_size_continuous(range = c(1, 3)) +
  labs(
    title = "Figura 10. ANÁLISIS DE RESIDUOS VS VALORES AJUSTADOS",
    subtitle = "Validación de los supuestos de linealidad y homocedasticidad",
    x = "Valores Ajustados (Predicciones)",
    y = "Residuos",
    caption = paste(
      "Fuente: Elaboración propia con base en ECV DANE 2024 |",
      "Línea azul: tendencia LOESS |",
      "Línea roja: residuo cero"
    )
  ) +tema +
  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),
    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(resid_vs_ajustados)

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.

G_qq <- ggplot(res_df, aes(sample = .resid)) +
  geom_qq(alpha = 0.6, color = "#2b6cb0") +
  geom_qq_line(color = "#e74c3c", linewidth = 1) +
  labs(
    title = "Figura 11. GRÁFICO Q-Q DE LOS RESIDUOS",
    subtitle = "Validación de normalidad - Residuos vs Distribución Normal Teórica",
    x = "Cuantiles Teóricos",
    y = "Cuantiles de los Residuos",
    caption = "Fuente: Elaboración propia con base en ECV DANE 2024"
  ) +
  tema

print(G_qq)

La figura 8 evidencia una alineación razonable en la parte central de la distribución de residuos, es decir, los residuos medios se aproximan a la normal teórica, pero muestra desviaciones apreciables en las colas (puntos que se separan de la línea diagonal en ambos extremos). Esos puntos fuera de la línea corresponden a observaciones con residuos más extremos que los que una distribución normal marcaría, lo que sugiere colas más pesadas de las esperadas bajo normalidad estricta. La presencia de colas pesadas es coherente con la naturaleza de datos de ingreso, y muestra que existen relativamente pocos hogares con ingresos muy altos y algunos con ingresos extremadamente bajos, y esos casos generan residuos extremos.

La figura 12. presenta un histograma de los residuos del modelo acompañado por dos curvas de densidad: la densidad empírica observada (línea roja) y la densidad teórica normal (línea verde punteada). La línea vertical discontinua marca el cero. Esta combinación permite juzgar visualmente si los errores se parecen a una distribución normal centrada en cero (condición deseable para muchas inferencias paramétricas) y, además, detectar asimetrías o colas anormalmente pesadas.

library(plotly)
res_df <- augment(Modelo_final)

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), sd = sd(res_df$.resid)),
    color = "#27ae60",
    linewidth = 1,
    linetype = "dashed"
  ) +
  labs(
    title = "Figura 12. 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 ECV DANE 2024"
  ) +
  tema

print(G_residuos_hist)

En la grafica 9. la masa principal de la distribución está concentrada cerca de cero, pero la densidad empírica (roja) muestra una cúspide algo más pronunciada que la normal teórica y cierta desalineación en las colas, la densidad observada es más alta en torno a la moda y se separa de la normal en los extremos. En términos prácticos esto significa dos cosas comprobables visualmente aquí, la parte central de los residuos se ajusta razonablemente a la forma de una campana, y  existen desviaciones en las colas (residuos más extremos de los que una normal estricta predice). En el eje horizontal se aprecia que, aunque hay valores residuales negativos, la cola derecha (residuos positivos) también muestra masa no despreciable, lo que sugiere que hay observaciones cuyo ingreso predicho por el modelo queda sistemáticamente por debajo del observado.


La combinación de una cúspide pronunciada y colas más cargadas indica una distribución leptocúrtica con colas relativamente pesadas: la mayoría de observaciones está muy cerca de la predicción (residuos pequeños) pero hay un número pequeño de observaciones con desviaciones grandes (outliers). Esto es coherente con datos de ingreso, donde unos pocos casos extremos (hogares con ingresos o tiempos de trabajo muy altos o muy bajos) generan discrepancias en las colas. Para la inferencia, la consecuencia principal es que la normalidad se cumple de forma aproximada en la zona central —por lo que las estimaciones y pruebas asintóticas siguen siendo útiles— pero hay que tener precaución con pruebas muy sensibles a colas y con predicciones puntuales en los extremos; por eso en el informe se acompañan los resultados con errores estándar robustos y análisis de sensibilidad frente a outliers.

5.1.3 Observaciones influyentes

la figura 13. Scale–Location (raíz cuadrada de los residuos estandarizados vs. valores ajustados) visualiza cómo varía la dispersión de los residuos a lo largo del rango de predicciones, siendo estas una nube sin patrón y una línea de tendencia casi horizontal apuntan a varianza constante (homocedasticidad), mientras que un patrón en forma de abanico (dispersión creciente o decreciente con los fitted) indicaría heterocedasticidad.

es_df <- augment(Modelo_final)
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 13. 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: Encuesta nacional de la calidad de vida ECV 2024 |",
      "Línea roja: media de √|residuos estandarizados| |",
      "Línea azul: tendencia LOESS"
    )
  ) +tema +
  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 13 se aprecia, para la mayor parte del rango de predicciones, una dispersión relativamente estable y una línea de tendencia que permanece bastante plana, en conjunto no hay un claro “abanico” que indique heterocedasticidad generalizada. No obstante, existen puntos aislados con valores de √|residuo estandarizado| relativamente altos, sobre todo en la parte media-baja de los fitted, lo que revela heterogeneidad puntual en la varianza asociada a observaciones extremas.


En términos sencillos, la varianza de los errores es aproximadamente constante para la mayoría de la muestra, pero hay zonas con mayor dispersión provocadas por observaciones atípicas. Es decir, no estamos ante una heterocedasticidad sistémica que invalide el modelo por completo, sino ante heterogeneidad localizada que se concentra en algunos casos extremos. La implicación práctica es que los errores estándar convencionales podrían subestimar la incertidumbre si no se corrigen, por este motivo el informe reporta errores estándar robustos a heterocedasticidad y presenta análisis alternativos (ej. exclusión o winsorización de outliers) para garantizar que las conclusiones no dependan de esa heterogeneidad puntual.

La figura 14 traza la distancia de Cook por observación (cada punto es una observación indexada por su número de fila), con una línea umbral que indica el nivel a partir del cual una observación se considera potencialmente influyente (en tu gráfico la regla empleada fue 4/n). Los puntos en rojo son aquellos que superan ese umbral y, por tanto, merecen atención particular.

res_df <- res_df %>%
  mutate(
    cooksd = cooks.distance(Modelo_final),
    obs_number = row_number()
  )

G_cooksd <- ggplot(res_df, aes(x = obs_number, y = cooksd)) +
  geom_point(
    aes(color = cooksd, size = cooksd),
    alpha = 0.7
  ) +
  geom_hline(
    yintercept = 4/nrow(res_df),
    color = "#e74c3c",
    linetype = "dashed",
    linewidth = 1.2
  ) +
  geom_point(
    data = res_df %>% filter(cooksd > 4/nrow(res_df)),
    aes(x = obs_number, y = cooksd),
    color = "#e74c3c",
    size = 3,
    shape = 21,
    fill = "transparent",
    stroke = 1.5
  ) +
  geom_text(
    data = res_df %>% 
      filter(cooksd > 4/nrow(res_df)) %>%
      arrange(desc(cooksd)) %>%
      head(5),  
    aes(label = obs_number),
    vjust = -1,
    hjust = 0.5,
    size = 3,
    fontface = "bold",
    color = "#c0392b"
  ) +
  scale_color_gradient(
    name = "Distancia de Cook",
    low = "#2b6cb0",
    high = "#e74c3c",
    guide = guide_colorbar(
      barwidth = 10,
      barheight = 0.6,
      direction = "horizontal"
    )
  ) +
  scale_size_continuous(
    name = "Influencia",
    range = c(1, 4),
    guide = "none"
  ) +
  labs(
    title = "Figura 14. Análisis de Observaciones Influentes - Distancia de Cook",
    subtitle = paste(
      "Línea roja: umbral de influencia (4/n =", 
      round(4/nrow(res_df), 4), 
      ")\nPuntos rojos: observaciones potencialmente influyentes"
    ),
    x = "Número de Observación",
    y = "Distancia de Cook",
    caption = paste(
      "Fuente: Elaboración propia con base en ECV DANE 2024 |",
      "Total de observaciones:", nrow(res_df)
    )
  ) + tema

print(G_cooksd)

La gráfica muestra un conjunto limitado, pero no despreciable de observaciones con distancia de Cook por encima del umbral: los puntos rojos etiquetados (por ejemplo: 984, 3971, 5982, 5909, 7172) identifican casos concretos que ejercen influencia notable sobre los coeficientes del modelo. Aunque el número absoluto de observaciones influyentes es pequeño en relación con el total (7180 observaciones), su magnitud en la distancia sugiere que la eliminación de cualquiera de esas observaciones puede producir cambios apreciables en ciertos parámetros estimados.

Estas observaciones influyentes suelen corresponder a hogares con combinaciones atípicas de predictores y resultados (por ejemplo, jornadas de trabajo extremadamente altas, ingreso agregado muy elevado o incongruencias en la codificación). Su presencia explica buena parte de las discrepancias detectadas en los diagnósticos anteriores (residuos extremos y colas pesadas). Es necesario identificar si esos puntos son errores de registro o casos válidos pero extremos, y siempre debe documentarse la sensibilidad de los resultados a su inclusión/exclusión. Las relaciones centrales del modelo se mantienen en muchas especificaciones, pero ciertos coeficientes, sobre todo los asociados a variables relacionadas con tiempo trabajado pueden variar en magnitud cuando se excluyen los casos más influyentes, por tanto, las conclusiones deben leerse a la luz de esa robustez documentada.

5.1.4 Matriz de correlaciones

La matriz presenta los coeficientes de correlación (y su representación visual por intensidad de color) entre las variables numéricas incluidas en el modelo: log(ingreso del hogar), cantidad de personas en el hogar, edad y horas trabajadas la semana pasada. Permite identificar pares con relación lineal marcada (valores cercanos a ±1) y pares con correlación débil (valores cercanos a 0).


En la figura 15 los coeficientes entre las variables numéricas son en general de baja a moderada intensidad, por ejemplo, log(ingreso) correlaciona positivamente y de forma moderada con C. personas en el hogar (~0.32) y con Horas trabajadas (~0.23); la Edad muestra correlaciones cercanas a cero con log(ingreso) y una ligera correlación negativa con Horas trabajadas (~ -0.09). No aparecen correlaciones fuertes (por encima de 0.5) entre las variables numéricas mostradas, lo que indica que, en términos de relaciones lineales entre regresores numéricos, la multicolinealidad no es severa entre estas variables específicas.


La interpretación práctica es que las variables numéricas aportan información complementaria y no redundante en su mayoría. El hecho de que log(ingreso) esté moderadamente correlacionado con tamaño del hogar y horas trabajadas indica relaciones esperables (más miembros y más horas suelen asociarse a mayor ingreso), pero la ausencia de correlaciones muy altas sugiere que los estimadores no se verán excesivamente inflados por multicolinealidad entre estas variables. No obstante, la matriz no incorpora las dummies (por ejemplo, niveles de educación) que sí pueden generar colinealidad cuando muchas observaciones se concentran en una misma categoría. Entre las variables numéricas clave la colinealidad no es un problema grave, pero la interpretación de coeficientes debe contemplar la posible correlación con variables categóricas y la presencia de outliers ya detectados en las figuras anteriores.

library(ggcorrplot)

datos_modelo <- Modelo_final$model

variables_numericas <- datos_modelo %>%
  select(where(is.numeric))

matriz_cor <- round(cor(variables_numericas, 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 = rownames(matriz_cor)),
    Variable2 = factor(Variable2, levels = colnames(matriz_cor)),
    Etiqueta = case_when(
      Correlacion == 1 ~ "1.00",
      abs(Correlacion) < 0.01 ~ "0.00",
      TRUE ~ as.character(Correlacion)
    ),
    Significancia = case_when(
      abs(Correlacion) >= 0.7 ~ "Muy Alta",
      abs(Correlacion) >= 0.5 ~ "Alta", 
      abs(Correlacion) >= 0.3 ~ "Moderada",
      abs(Correlacion) >= 0.1 ~ "Baja",
      TRUE ~ "Muy Baja"
    )
  )

matriz_cuadros <- ggplot(matriz_larga, aes(x = Variable1, y = Variable2, fill = Correlacion)) +
  geom_tile(color = "white", linewidth = 1.5, width = 0.9, height = 0.9) +
  geom_text(
    aes(label = Etiqueta),
    color = "white",
    size = 4.5,
    fontface = "bold"
  ) +
  scale_fill_gradient2(
    name = "Correlación",
    low = "#e74c3c",    
    mid = "#f8f9fa",    
    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.5", "1.0")
  ) +
  scale_x_discrete(position = "top") +
  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 del modelo",
    x = NULL,
    y = NULL,
    caption = "Fuente: Elaboración propia con base en ECV DANE 2024"
  ) +tema +
  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.text.x = element_text(
      angle = 45,
      hjust = 0,
      face = "bold",
      size = 11
    ),
    axis.text.y = element_text(
      face = "bold",
      size = 11
    ),
    panel.grid = element_blank(),
    legend.position = "bottom",
    legend.title = element_text(face = "bold", size = 11),
    legend.text = element_text(size = 10),
    legend.key.width = unit(2, "cm"),
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA)
  )


print(matriz_cuadros)

5.1.5 Coeficiente de Person

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

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

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

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


tabla_corr <- tibble(
  Variable = names(cor_y),
  `Coef. de Pearson (r)` = round(cor_y, 3),
  `Valor p` = pval_y) %>%
  filter(Variable != "Ingreso del hogar") %>%
  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 9. 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 ECV DANE 2024",
    general_title = "Nota:")
Tabla 9. Coeficiente de Correlación de Pearson con la Variable Dependiente
Variable Coef. de Pearson (r) Valor p Significativo
C. personas en el hogar 0.197 2e-16
Edad 0.035 3.408e-03
Horas trabajadas la semana pasada 0.116 2e-16
Nota:
Elaboración propia con base en ECV DANE 2024

En la Tabla 9, las tres variables analizadas (cantidad de personas en el hogar, edad y horas trabajadas) presentan valores p muy por debajo de 0.05 (2e-16 para personas y horas; 3.408e-03 para edad), lo que permite rechazar H0 y aceptar que existe correlación lineal significativa entre cada una de ellas y el logaritmo del ingreso. Sin embargo, el coeficiente de Pearson difiere en magnitud: r=0.197 para la cantidad de personas indica una correlación positiva moderada, r=0.116 para horas trabajadas denota una correlación positiva débil a moderada, y r=0.035 para edad refleja una correlación muy débil. A pesar de su significancia estadística, el valor de r indica cuánta variación del ingreso puede explicarse linealmente por cada variable: la edad apenas contribuye, mientras que el tamaño del hogar y las horas trabajadas ejercen un papel más relevante en el comportamiento del ingreso familiar.

5.1.6 VIF

El análisis de multicolinealidad mediante el Factor de Inflación de la Varianza (VIF) y su complemento, la tolerancia, evalúa hasta qué punto la variabilidad de cada coeficiente estimado se ve inflada por la correlación con otras variables explicativas. Un VIF cercano a 1 indica ausencia de colinealidad; valores entre 1 y 5 se consideran aceptables, mientras que VIF por encima de 5 sugieren multicolinealidad moderada y valores superiores a 10 indican un problema grave que puede sesgar los resultados.

calcular_vif_seguro <- function(modelo) {
  tryCatch({
    vif_resultados <- vif(modelo)
    
    if(is.matrix(vif_resultados)) {
      data.frame(
        Variable = rownames(vif_resultados),
        VIF = as.numeric(vif_resultados[, "GVIF"]),
        stringsAsFactors = FALSE
      )
    } else {
      data.frame(
        Variable = names(vif_resultados),
        VIF = as.numeric(vif_resultados),
        stringsAsFactors = FALSE
      )
    }
  }, error = function(e) {
    X <- model.matrix(modelo)
    if("(Intercept)" %in% colnames(X)) {
      X <- X[, colnames(X) != "(Intercept)", drop = FALSE]
    }
    
    if(ncol(X) > 0) {
      cor_matrix <- cor(X)
      vif_manual <- diag(solve(cor_matrix))
      data.frame(
        Variable = colnames(X),
        VIF = vif_manual,
        stringsAsFactors = FALSE
      )
    } else {
      stop("No se pueden calcular VIF")
    }
  })
}

vif_df <- calcular_vif_seguro(Modelo_final)

vif_procesado <- vif_df %>%
  mutate(
    VIF = round(VIF, 3),
    Tolerancia = round(1/VIF, 4),
    Diagnóstico = case_when(
      VIF >= 10 ~ "🚨 GRAVE",
      VIF >= 5 & VIF < 10 ~ "⚠️ MODERADO", 
      VIF < 5 ~ "✅ ACEPTABLE"
    )
  ) %>%
  arrange(desc(VIF))


tabla_vif_simple <- vif_procesado %>%
  select(Variable, VIF, Tolerancia, Diagnóstico)

kable(tabla_vif_simple, 
      caption = "Tabla 10. Análisis de Multicolinealidad mediante VIF",
      align = c( "c", "c", "c"),
      format = ifelse(knitr::is_latex_output(), "latex", "pipe")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), 
                full_width = FALSE,
                position = "center")
Tabla 10. Análisis de Multicolinealidad mediante VIF
Variable VIF Tolerancia Diagnóstico
EstudiosSecundaria EstudiosSecundaria 7.921 0.1262 ⚠️ MODERADO
EstudiosTécnica/Tecnológica EstudiosTécnica/Tecnológica 4.937 0.2026 ✅ ACEPTABLE |
EstudiosUniversitaria EstudiosUniversitaria 4.416 0.2264 ✅ ACEPTABLE |
EstudiosPostgrado EstudiosPostgrado 2.473 0.4044 ✅ ACEPTABLE |
DepartamentoValle del Cauca DepartamentoValle del Cauca 1.544 0.6477 ✅ ACEPTABLE |
DepartamentoNariño DepartamentoNariño 1.491 0.6707 ✅ ACEPTABLE |
DepartamentoChocó DepartamentoChocó 1.393 0.7179 ✅ ACEPTABLE |
Horas trabajadas la semana pasada Horas trabajadas la semana pasada 1.091 0.9166 ✅ ACEPTABLE |
Edad Edad 1.069 0.9355 ✅ ACEPTABLE |
C. personas en el hogar C. personas en el hogar 1.051 0.9515 ✅ ACEPTABLE |
SexoMujer SexoMujer 1.005 0.9950 ✅ ACEPTABLE |
grafico_vif_rmd <- ggplot(vif_procesado, aes(x = reorder(Variable, VIF), y = VIF, fill = Diagnóstico)) +
  geom_col(width = 0.7, alpha = 0.8) +
  geom_hline(yintercept = 5, color = "#D69E2E", linetype = "dashed", linewidth = 1) +
  geom_hline(yintercept = 10, color = "#E53E3E", linetype = "dashed", linewidth = 1) +
  geom_text(aes(label = sprintf("%.2f", VIF)), hjust = -0.2, size = 3.5, fontface = "bold") +
  scale_fill_manual(values = c("✅ ACEPTABLE" = "#48BB78", 
                              "⚠️ MODERADO" = "#ECC94B", 
                              "🚨 GRAVE" = "#F56565")) +
  coord_flip() +
  labs(
    title = "Figura 16. Análisis de Multicolinealidad - Factor de Inflación de la Varianza (VIF)",
    subtitle = "Umbrales: VIF < 5 (Aceptable) | VIF ≥ 5 (Moderado) | VIF ≥ 10 (Grave)",
    x = NULL,
    y = "VIF",
    caption = "Fuente: Encuesta nacional calidad de vida ECV 2024 Elaboración propia"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
    axis.text.y = element_text(face = "bold"),
    legend.position = "bottom"
  )

print(grafico_vif_rmd)

En la tabla 10, todas las variables presentan VIF menores a 5, excepto EstudiosSecundaria, cuyo VIF de 7.921 (tolerancia 0.1262) se clasifica como multicolinealidad moderada. Esto implica que la dummy de secundaria comparte información con otras variables del modelo —probablemente con niveles educativos superiores como técnica, universitaria o posgrado— aumentando la varianza de su coeficiente y reduciendo la precisión de su estimación.

Como vemos en la figura 16. Las demás variables educativas (técnica/tecnológica VIF 4.937; universitaria VIF 4.416; posgrado VIF 2.473) se encuentran en rangos aceptables, al igual que las dummies de Departamento (Valle del Cauca 1.544; Nariño 1.491; Chocó 1.393) y las variables continuas —horas trabajadas (1.091), edad (1.069) y cantidad de personas en el hogar (1.051)—, todas con tolerancias cercanas a 1 y diagnósticos de “aceptable”. Esto confirma que el modelo, en su mayoría, no sufre colinealidad significativa, garantizando que los coeficientes estimados reflejen relaciones independientes con el logaritmo del ingreso del hogar.

6 Conclusiones

El análisis de regresion confirma que la educación y las horas trabajadas son los determinantes más sólidos del ingreso familiar. En todas las especificaciones, mayores niveles de formación y un incremento en la intensidad laboral se asocian positivamente con el ingreso, tanto en las tablas de regresión como en la descripción de la muestra.

La relación entre edad e ingreso presenta un efecto ciclo de vida: la inclusión del término cuadrático de la edad mejora el ajuste y permite capturar cómo el ingreso del jefe o jefa de hogar crece hasta cierto punto y luego se estabiliza o declina. Este comportamiento no sería evidente con una sola pendiente lineal.

El tamaño del hogar muestra efectos dependientes de la especificación: está correlacionado con el ingreso total del hogar, pero su interpretación varía según se analice ingreso total o per cápita. En regresiones con controles adicionales, el coeficiente puede cambiar de signo o magnitud, por lo que su análisis requiere un enfoque contextualizado.

Persisten efectos territoriales significativos. Las dummies departamentales revelan que Valle del Cauca mantiene promedios de ingreso superiores, mientras que Nariño muestra niveles más bajos, aun después de controlar por educación, horas y otras covariables. Esto evidencia desigualdades estructurales regionales.

El diagnóstico de residuos indica normalidad aproximada en el centro y colas pesadas en los extremos. Esto respalda el uso de inferencia asintótica con errores estándar robustos para la mayoría de las conclusiones, aunque las predicciones puntuales en los extremos deben interpretarse con cautela.

La homocedasticidad es razonablemente constante en general, si bien el gráfico scale–location señala heterogeneidad puntual. Por ello, todas las estimaciones finales se presentan con errores estándar robustos y se realizaron análisis de sensibilidad frente a observaciones atípicas.

La multicolinealidad es moderada, especialmente entre las dummies educativas. Los VIFs se mantienen en rangos aceptables, aunque algunas categorías (p. ej., secundaria) se acercan a valores moderados, lo que obliga a prudencia al comparar niveles educativos próximos.

Se identifican observaciones influyentes mediante la distancia de Cook y gráficos de influencia. Aunque afectan la magnitud de ciertos coeficientes (sobre todo el de horas trabajadas), las relaciones principales —signo y dirección de efectos— se sostienen tras excluir estos casos en análisis de sensibilidad.

La transformación logarítmica del ingreso resulta apropiada: estabiliza la varianza, facilita la interpretación en términos porcentuales y mejora el comportamiento residual. No obstante, se incluyen resultados en niveles para asegurar transparencia y contraste.

Finalmente, la robustez general se confirma al combinar transformaciones logarítmicas, errores robustos, términos no lineales y análisis de outliers: las conclusiones centrales (importancia de la educación y la intensidad laboral; relevancia del contexto territorial; no linealidad por edad) permanecen consistentes en todas las versiones del modelo.

7 Bibliografia

Auvert Albornoz, D. E. (2014). Desigualdad del ingreso y movilidad social en Colombia durante 2008-2013 [Tesis de maestría]. Universidad de los Andes.

Buelvas, J. (2019). Impacto del nivel educativo sobre los ingresos laborales en Colombia: Un análisis econométrico. Revista Panorama Económico, 27(2), 89–110. https://doi.org/10.32997/2463-0470-vol.27-num.2-2019

Contreras Navarrete, M. P. (2011). Aplicación del método de regresión lineal en el análisis de los determinantes de la inversión extranjera en Colombia. Universidad Nacional de Colombia.

Departamento Administrativo Nacional de Estadística. (2024). Boletín técnico: Brecha salarial de género en Colombia, 2021–2023. DANE. https://www.dane.gov.co

Departamento Administrativo Nacional de Estadística. (2025). Encuesta Nacional de Calidad de Vida (ECV) - Resultados 2024. https://www.dane.gov.co/files/operaciones/ECV/pres-ECV-2024.pdf

Departamento Nacional de Planeación. (2016). Sistema de monitoreo del Observatorio de Políticas de las Familias. https://observatoriodefamilia.dnp.gov.co/Documents/Documentos%20de%20trabajo/D2-sistema-monitoreo-opf-sept_2016.pdf

Espinosa-Espinosa, A. (2021). Veinte años de investigación sobre pobreza y desigualdad social en el Caribe colombiano, 1997-2017. Banco de la República.

Galvis-Aponte, L. A., Alba-Fajardo, C. A., & Moyano-Támara, L. M. (2016). La persistencia de la pobreza en el Pacífico colombiano y sus factores asociados. Documentos de Trabajo sobre Economía Regional y Urbana, 238. Banco de la República.

Gaviria Ríos, M. A., Sierra Sierra, H. A., & Buchelli Lozano, G. A. (2007). Características socioeconómicas de los hogares pobres de la ciudad de Pereira. Revista Gestión & Región, (3), 35-98.

Gómez-Segura, A. M. (2018). Brecha salarial y segregación ocupacional en Colombia: Un análisis por género y región. Revista de Economía Institucional, 20(39), 125–148. https://revistas.uexternado.edu.co/index.php/ecoins/article/view/5268

Guataquí Roa, J. C., & García Suaza, A. F. (2009). Efectos de la reforma laboral: ¿más trabajo y menos empleos? Universidad del Rosario. https://repositorio.banrep.gov.co/items/270cff13-8b3a-4783-a231-0e1edc8af18e

Lora, E. (2025). Estructura demográfica, tamaño del hogar y bienestar en América Latina. Revista Desarrollo y Sociedad, 98(2), 45–70.

Mesa, C., Fernández, J., & Steiner, R. (2008). Segmentación del mercado laboral en Colombia: evidencia reciente. Revista de Economía del Rosario, 11(1), 31–58. https://revistas.urosario.edu.co/index.php/economia/article/view/195

Meza Buchely, L. (2020). Educación, movilidad social y desigualdad en Colombia: Un análisis desde la economía del comportamiento. Revista de Estudios Sociales, 73, 50–65. https://doi.org/10.7440/res73.2020.05

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

Muñoz, C. (2004). Determinantes del ingreso y del gasto corriente de los hogares. Revista de Economía Institucional, 6(10), 183-199.

Muñoz, G., & Ramos, X. (2002). Equivalencia y economías de escala en el bienestar de los hogares. Revista Española de Economía, 19(2), 205–227. https://www.researchgate.net/publication/263087623

Muñoz Conde, M. (2004). Determinantes del ingreso de los hogares y del gasto corriente. Revista de Economía Institucional, 6(10), 183–199. https://revistas.uexternado.edu.co/index.php/ecoins/article/view/177

Psacharopoulos, G., & Patrinos, H. A. (2018). Returns to investment in education: A decennial review of the global literature. Education Economics, 26(5), 445–458. https://doi.org/10.1080/09645292.2018.1484426

Sánchez-Torres, R. M. (2024). Pobreza multidimensional en el Pacífico Colombiano: identificación, medición y tendencias recientes. Investigaciones Regionales - Journal of Regional Research, 51, 1-25.

University of Virginia Library. (2018). Interpreting log transformations in a linear model. UVA Library. https://library.virginia.edu/data/articles/interpreting-log-transformations-in-a-linear-model

Vargas, J., Pérez, A., & Pineda, C. (2015). Informalidad laboral y condiciones de empleo en la región Pacífica colombiana. Revista de Economía y Desarrollo Regional, 27(2), 45–67.

Villar, L. A., Forero, D., & Galvis, L. A. (2016). Mercado laboral y envejecimiento en Colombia. Banco de la República de Colombia. https://repositorio.banrep.gov.co/handle/20.500.12134/8445