“El Ahorro de los Hogares Colombianos :Un Desafío de Política Pública”

1. Análisis Aprioris de las Teorías Económicas que hablan del Ahorro.

Teoría Keynesiana: ¿El ahorro depende principalmente del ingreso corriente?

Según la teoría keynesiana, el ahorro depende del ingreso corriente, pero no de manera proporcional. A medida que aumenta el ingreso, las personas tienden a ahorrar más, aunque no en la misma fracción del aumento. La relación entre ahorro e ingreso está influenciada por factores como la propensidad marginal a ahorrar, las expectativas económicas, y elementos institucionales como las políticas fiscales o tasas de interés. Así, aunque el ingreso es un factor clave, el ahorro también está determinado por otros aspectos económicos y psicológicos.

Teoría Ciclo Vital: ¿Varía según la edad y el ingreso permanente?

La teoría del ciclo vital, propuesta por Modigliani y Brumberg en 1954, sugiere que los individuos planifican su consumo y ahorro a lo largo de toda su vida con el objetivo de suavizar su consumo en el tiempo. Según este modelo, el ahorro no depende únicamente del ingreso presente, sino también del ingreso futuro esperado. Se asume que las personas buscan maximizar su utilidad derivada del consumo durante toda su vida, lo que da lugar a una función de consumo que considera la renta actual, las rentas futuras esperadas, la riqueza acumulada o heredada, la edad y otros factores. Una teoría similar fue desarrollada de manera paralela por Milton Friedman en 1957, quien introdujo la hipótesis de la renta permanente. Friedman amplió el enfoque al incluir tanto las rentas derivadas de la riqueza humana (como educación y salud) como la no humana, resultando en una función de consumo parecida a la del ciclo vital. En este caso, se asume que las rentas transitorias se destinan completamente al ahorro.

2. Análisis Descriptivo

Modelo Keynesiano con datos atipicos

library(dplyr)
variables_keynes <- base_GEIH %>% 
  select("ingreso", "ahorro")
options(scipen = 999)
modelo_keynes <- lm(ahorro ~ ingreso, data = variables_keynes)
summary(modelo_keynes)
## 
## Call:
## lm(formula = ahorro ~ ingreso, data = variables_keynes)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -365725   -4027   11349   13331   16502 
## 
## Coefficients:
##                     Estimate       Std. Error t value            Pr(>|t|)    
## (Intercept) -16501.779103006     45.131019488  -365.6 <0.0000000000000002 ***
## ingreso          0.051321214      0.000008195  6262.7 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21530 on 346433 degrees of freedom
## Multiple R-squared:  0.9912, Adjusted R-squared:  0.9912 
## F-statistic: 3.922e+07 on 1 and 346433 DF,  p-value: < 0.00000000000000022
summary(modelo_keynes$model)
##      ahorro            ingreso         
##  Min.   :  -53790   Min.   :        0  
##  1st Qu.:       0   1st Qu.:  1300000  
##  Median :  115000   Median :  2300000  
##  Mean   :  149079   Mean   :  3226356  
##  3rd Qu.:  190000   3rd Qu.:  3800000  
##  Max.   :14465000   Max.   :289300000

El ingreso mínimo registrado es de cero, lo que indica que algunas personas no reportan ingresos, ya sea debido al desempleo, a la informalidad laboral o a la falta de datos en la muestra. En contraste, el ingreso máximo alcanza los 289,300,000, lo que sugiere la presencia de individuos con ingresos extraordinariamente altos, probablemente provenientes del sector empresarial o de inversiones. La media del ingreso se sitúa en 3,226,356, un valor que se ve afectado por la presencia de cifras extremadamente elevadas.

En cuanto al ahorro, el valor mínimo registrado es de -53,790, posiblemente influenciado por los casos en los que el ingreso es igual a cero. Por otro lado, el ahorro máximo alcanza los 14,465,000, lo que refleja que algunos individuos tienen ingresos excepcionalmente altos. La media del ahorro es de 149,079, lo que indica que existen ciertos casos con montos de ahorro significativamente elevados que están impactando el promedio general.

library(ggplot2)
plot(variables_keynes$ingreso, variables_keynes$ahorro, 
     main = "Grafica de Dispersión", 
     xlab = "Ahorro", ylab = "Ingreso", 
     pch = 16, col = "blue")

abline(modelo_keynes, col = "red", lwd = 2)

library(ggplot2)
ggplot(variables_keynes, aes(y = ingreso)) +
  geom_boxplot(fill = "skyblue", color = "black") +
  labs(title = "Boxplot del Ingreso") +
  coord_flip() +  # 📌 Hace que el boxplot sea horizontal
  theme_minimal()

library(ggplot2)
ggplot(variables_keynes, aes(y = ahorro)) +
  geom_boxplot(fill = "lightgreen", color = "black") +
  labs(title = "Boxplot del Ahorro") +
  coord_flip() +  # 📌 Hace que el boxplot sea horizontal
  theme_minimal()

Modelo Keynes sin datos atipicos

library(dplyr)
library(ggplot2)

# Calcular cuartiles y rango intercuartil (IQR)
Q1 <- quantile(base_GEIH$ingreso, 0.25, na.rm = TRUE)  # Primer cuartil (Q1)
Q3 <- quantile(base_GEIH$ingreso, 0.75, na.rm = TRUE)  # Tercer cuartil (Q3)
IQR <- Q3 - Q1  # Rango intercuartil

# Filtrar datos sin valores atípicos
base_sin_atipicos <- base_GEIH %>%
  filter(ingreso >= (Q1 - 1.5 * IQR) & ingreso <= (Q3 + 1.5 * IQR))
variables_keynes_sin_datipicos <- base_sin_atipicos %>% 
  select("ahorro", "ingreso")
modelo_keynes_sin_datipicos <- lm(ahorro ~ ingreso, data = variables_keynes_sin_datipicos)
  summary(modelo_keynes_sin_datipicos)
## 
## Call:
## lm(formula = ahorro ~ ingreso, data = variables_keynes_sin_datipicos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -105902  -10783    6939   15134   30544 
## 
## Coefficients:
##                   Estimate     Std. Error t value            Pr(>|t|)    
## (Intercept) -30544.3982874     63.6551831  -479.8 <0.0000000000000002 ***
## ingreso          0.0570046      0.0000214  2663.9 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 19800 on 323699 degrees of freedom
## Multiple R-squared:  0.9564, Adjusted R-squared:  0.9564 
## F-statistic: 7.096e+06 on 1 and 323699 DF,  p-value: < 0.00000000000000022
summary(modelo_keynes_sin_datipicos$model)
##      ahorro          ingreso       
##  Min.   :-53790   Min.   :      0  
##  1st Qu.:     0   1st Qu.:1300000  
##  Median :105000   Median :2100000  
##  Mean   :111432   Mean   :2490605  
##  3rd Qu.:168500   3rd Qu.:3370000  
##  Max.   :377500   Max.   :7550000

El ingreso mínimo registrado es cero, lo que sugiere que algunas personas no reportan ingresos, ya sea debido al desempleo, al trabajo informal o a la falta de información en la muestra. En contraste, el ingreso máximo es de 7,550,000, lo que indica la presencia de individuos con niveles de ingreso elevados. La media del ingreso es de 2,490,605, un valor que se ve afectado por la presencia de cifras altas.

En cuanto al ahorro, el valor mínimo registrado es de -53,790, posiblemente influenciado por los casos en los que el ingreso es igual a cero. Por otro lado, el ahorro máximo registrado alcanza los 377,500. La media del ahorro es de 111,432.

library(ggplot2)
plot(variables_keynes_sin_datipicos$ingreso, variables_keynes_sin_datipicos$ahorro, 
     main = "GRAFICA DE DISPERSIÓN", 
     xlab = "Ahorro", ylab = "Ingreso", 
     pch = 16, col = "violet")

abline(modelo_keynes, col = "green", lwd = 2)

``

library(ggplot2)
library(gridExtra)

# Boxplot de Ahorro
p1 <- ggplot(variables_keynes_sin_datipicos, aes(x = "", y = ahorro)) +
  geom_boxplot(fill = "pink", color = "red") +
  coord_flip() +  # Hace el boxplot horizontal
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.05))) +
  labs(title = "Distribución del Ahorro sin valores atípicos", 
       y = "Ahorro", 
       x = "") +
  theme_minimal()

# Boxplot de Ingreso
p2 <- ggplot(variables_keynes_sin_datipicos, aes(x = "", y = ingreso)) +
  geom_boxplot(fill = "pink", color = "red") +
  coord_flip() +  # Hace el boxplot horizontal
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.05))) +
  labs(title = "Distribución del Ingreso sin valores atípicos", 
       y = "Ingreso", 
       x = "") +
  theme_minimal()

# Mostrar ambos gráficos juntos en una misma figura
grid.arrange(p1, p2, ncol = 2)  # Los pone en la misma fila (horizontal)

library(ggplot2)
ggplot(variables_keynes_sin_datipicos, aes(x = ahorro, y = ingreso)) +
  geom_point(color = "violet") +  
  geom_smooth(method = "lm", color = "green", se = FALSE) +  
  labs(title = "Relación entre Ahorro e Ingreso",
       x = "Ahorro", y = "Ingreso") +
  theme_minimal()

Modelo Ciclo Vital con datos atipicos

variables_ciclo_vital <- base_GEIH %>%
  select("ingreso", "ahorro", "edad", "edad2", "nivel_educ", "años_educ")
options(scipen = 999)
modelo_ciclo_vital <- lm(ahorro ~ ingreso + edad + edad2 + nivel_educ + años_educ, data = variables_ciclo_vital)
summary(modelo_ciclo_vital)
## 
## Call:
## lm(formula = ahorro ~ ingreso + edad + edad2 + nivel_educ + años_educ, 
##     data = variables_ciclo_vital)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -340743   -3626   10475   13871   19860 
## 
## Coefficients:
##                     Estimate       Std. Error  t value             Pr(>|t|)    
## (Intercept) -19687.765213070    124.982718632 -157.524 < 0.0000000000000002 ***
## ingreso          0.051219889      0.000008382 6110.765 < 0.0000000000000002 ***
## edad           -47.156835344      7.437939231   -6.340   0.0000000002299861 ***
## edad2            0.684913900      0.089574124    7.646   0.0000000000000207 ***
## nivel_educ     619.022888024     17.402126781   35.572 < 0.0000000000000002 ***
## años_educ      178.926174696     16.997231677   10.527 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21440 on 346429 degrees of freedom
## Multiple R-squared:  0.9913, Adjusted R-squared:  0.9913 
## F-statistic: 7.912e+06 on 5 and 346429 DF,  p-value: < 0.00000000000000022
summary(modelo_ciclo_vital$model)
##      ahorro            ingreso               edad            edad2      
##  Min.   :  -53790   Min.   :        0   Min.   :  3.00   Min.   :    9  
##  1st Qu.:       0   1st Qu.:  1300000   1st Qu.: 19.00   1st Qu.:  361  
##  Median :  115000   Median :  2300000   Median : 34.00   Median : 1156  
##  Mean   :  149079   Mean   :  3226356   Mean   : 35.91   Mean   : 1703  
##  3rd Qu.:  190000   3rd Qu.:  3800000   3rd Qu.: 51.00   3rd Qu.: 2601  
##  Max.   :14465000   Max.   :289300000   Max.   :104.00   Max.   :10816  
##    nivel_educ       años_educ     
##  Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 3.000   1st Qu.: 2.000  
##  Median : 5.000   Median : 2.000  
##  Mean   : 5.561   Mean   : 3.339  
##  3rd Qu.: 8.000   3rd Qu.: 4.000  
##  Max.   :99.000   Max.   :99.000

El ahorro muestra una gran variabilidad dentro de la muestra, con un valor mínimo de -53,790 y un máximo de 14,465,000, lo que indica que algunos individuos han logrado acumular cantidades significativas de ahorro. La media, que se sitúa en 149,079, está influenciada por estos valores extremos, dado que el 75% de los individuos presentan un ahorro inferior a 190,000.

El ingreso presenta una distribución altamente dispersa. Su valor mínimo es 0, lo que evidencia la presencia de personas sin ingresos, mientras que el valor máximo alcanza los 289,300,000, reflejando la existencia de individuos con ingresos extraordinariamente altos. La media de ingreso, de 3,226,356, es notablemente superior a la mediana, que se ubica en 2,300,000, lo que confirma que la distribución está sesgada hacia valores elevados.

En cuanto a la edad, la muestra incluye individuos desde los 3 hasta los 104 años, con una media de 35.91 años. La variable “edad2” representa la transformación cuadrática de la edad, lo que enfatiza las diferencias entre edades más bajas y más altas.

Respecto al nivel educativo, el valor mínimo registrado es 1 y el máximo es 99, lo que podría indicar la presencia de valores atípicos. El percentil 75, con un valor de 8, sugiere que la mayoría de las personas tienen un nivel educativo medio-alto. En cuanto a los años de escolaridad, el mínimo registrado es 0, lo que posiblemente corresponde a personas sin educación formal, mientras que el máximo nuevamente es 99, lo que podría señalar errores en la base de datos.

par(mfrow = c(2, 3))  # Divide la ventana en una matriz de 2x3

plot(variables_ciclo_vital$ingreso, variables_ciclo_vital$ahorro, 
     main = "Ingreso vs Ahorro", xlab = "Ingreso", ylab = "Ahorro", pch = 16, col = "orange")

plot(variables_ciclo_vital$edad, variables_ciclo_vital$ahorro, 
     main = "Edad vs Ahorro", xlab = "Edad", ylab = "Ahorro", pch = 16, col = "orange")

plot(variables_ciclo_vital$edad2, variables_ciclo_vital$ahorro, 
     main = "Edad^2 vs Ahorro", xlab = "Edad^2", ylab = "Ahorro", pch = 16, col = "orange")

plot(variables_ciclo_vital$nivel_educ, variables_ciclo_vital$ahorro, 
     main = "Nivel Educativo vs Ahorro", xlab = "Nivel Educ", ylab = "Ahorro", pch = 16, col = "orange")

plot(variables_ciclo_vital$años_educ, variables_ciclo_vital$ahorro, 
     main = "Años de Educación vs Ahorro", xlab = "Años Educ", ylab = "Ahorro", pch = 16, col = "orange")


par(mfrow = c(1, 1))  # Restaurar el layout a 1 gráfico

library(ggplot2)
library(gridExtra)  # Para organizar múltiples gráficos

p1 <- ggplot(variables_ciclo_vital, aes(x = "", y = ingreso)) + 
  geom_boxplot(fill = "blue") + 
  labs(title = "Ingreso") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()  # Hace el boxplot horizontal

p2 <- ggplot(variables_ciclo_vital, aes(x = "", y = edad)) + 
  geom_boxplot(fill = "yellow") + 
  labs(title = "Edad") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()

p3 <- ggplot(variables_ciclo_vital, aes(x = "", y = edad2)) + 
  geom_boxplot(fill = "grey") + 
  labs(title = "Edad²") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()

p4 <- ggplot(variables_ciclo_vital, aes(x = "", y = nivel_educ)) + 
  geom_boxplot(fill = "orange") + 
  labs(title = "Nivel Educativo") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()

p5 <- ggplot(variables_ciclo_vital, aes(x = "", y = años_educ)) + 
  geom_boxplot(fill = "purple") + 
  labs(title = "Años de Educación") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()

p6 <- ggplot(variables_ciclo_vital, aes(x = "", y = ahorro)) + 
  geom_boxplot(fill = "green") + 
  labs(title = "Ahorro") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()



# Organizar todos los gráficos en una sola figura
grid.arrange(p1, p2, p3, p4, p5, p6, ncol = 3)

Modelo Ciclo Vital sin datos atipicos

variables_ciclo_vital_sin_datipicos <- base_sin_atipicos %>% 
  select("ingreso", "ahorro", "edad", "edad2", "nivel_educ", "años_educ")
options(scipen = 999)
modelo_ciclo_vital_sin_datipicos <- lm(ahorro ~ ingreso + edad + edad2 + nivel_educ + años_educ, data = variables_ciclo_vital_sin_datipicos)
summary(modelo_ciclo_vital_sin_datipicos)
## 
## Call:
## lm(formula = ahorro ~ ingreso + edad + edad2 + nivel_educ + años_educ, 
##     data = variables_ciclo_vital_sin_datipicos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -106411  -10902    6980   15007   31132 
## 
## Coefficients:
##                  Estimate    Std. Error  t value             Pr(>|t|)    
## (Intercept) -31154.951041    125.978661 -247.303 < 0.0000000000000002 ***
## ingreso          0.056985      0.000022 2589.687 < 0.0000000000000002 ***
## edad            14.167314      7.038070    2.013               0.0441 *  
## edad2           -0.030829      0.084925   -0.363               0.7166    
## nivel_educ      -9.448692     17.342335   -0.545               0.5859    
## años_educ       78.651458     16.916028    4.650           0.00000333 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 19800 on 323695 degrees of freedom
## Multiple R-squared:  0.9564, Adjusted R-squared:  0.9564 
## F-statistic: 1.42e+06 on 5 and 323695 DF,  p-value: < 0.00000000000000022
summary(modelo_ciclo_vital_sin_datipicos$model)
##      ahorro          ingreso             edad            edad2      
##  Min.   :-53790   Min.   :      0   Min.   :  3.00   Min.   :    9  
##  1st Qu.:     0   1st Qu.:1300000   1st Qu.: 19.00   1st Qu.:  361  
##  Median :105000   Median :2100000   Median : 33.00   Median : 1089  
##  Mean   :111432   Mean   :2490605   Mean   : 35.75   Mean   : 1693  
##  3rd Qu.:168500   3rd Qu.:3370000   3rd Qu.: 51.00   3rd Qu.: 2601  
##  Max.   :377500   Max.   :7550000   Max.   :104.00   Max.   :10816  
##    nivel_educ       años_educ     
##  Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 3.000   1st Qu.: 2.000  
##  Median : 5.000   Median : 2.000  
##  Mean   : 5.392   Mean   : 3.245  
##  3rd Qu.: 8.000   3rd Qu.: 4.000  
##  Max.   :99.000   Max.   :99.000

El ahorro presenta una amplia variabilidad en la muestra. El valor mínimo es -53,790, mientras que el máximo es 377,500, reflejando que otros han acumulado un monto significativo. La media 111,432.

El ingreso muestra una gran dispersión. Su valor mínimo es 0, indicando la presencia de personas sin ingresos, mientras que el máximo alcanza 7,550,000, lo que sugiere la existencia de individuos con ingresos elevados. La media 2,490,60) es superior a la mediana 2,100,000, lo que indica que la distribución está sesgada hacia valores altos.

La edad de los individuos oscila entre 3 y 104 años, con una media de 35.75 años. La variable edad2 simplemente refleja la transformación cuadrática de la edad, aumentando la distancia entre edades más avanzadas.

El nivel educativo mínimo es 1, mientras que el máximo es 99, lo que podría reflejar valores atípicos. La media es 5.39, lo que indica que la mayoría de las personas tienen niveles educativos intermedios. En cuanto a los años de educación, los valores oscilan entre 0 y 99, lo que nuevamente podría sugerir errores en la base de datos.

par(mfrow = c(2, 3))  # Divide la ventana en una matriz de 2x3

plot(variables_ciclo_vital_sin_datipicos$ingreso, variables_ciclo_vital_sin_datipicos$ahorro, 
     main = "Ingreso vs Ahorro", xlab = "Ingreso", ylab = "Ahorro", pch = 16, col = "orange")

plot(variables_ciclo_vital_sin_datipicos$edad, variables_ciclo_vital_sin_datipicos$ahorro, 
     main = "Edad vs Ahorro", xlab = "Edad", ylab = "Ahorro", pch = 16, col = "orange")

plot(variables_ciclo_vital_sin_datipicos$edad2, variables_ciclo_vital_sin_datipicos$ahorro, 
     main = "Edad^2 vs Ahorro", xlab = "Edad^2", ylab = "Ahorro", pch = 16, col = "orange")

plot(variables_ciclo_vital_sin_datipicos$nivel_educ, variables_ciclo_vital_sin_datipicos$ahorro, 
     main = "Nivel Educativo vs Ahorro", xlab = "Nivel Educ", ylab = "Ahorro", pch = 16, col = "orange")

plot(variables_ciclo_vital_sin_datipicos$años_educ, variables_ciclo_vital_sin_datipicos$ahorro, 
     main = "Años de Educación vs Ahorro", xlab = "Años Educ", ylab = "Ahorro", pch = 16, col = "orange")


par(mfrow = c(1, 1))  # Restaurar el layout a 1 gráfico

library(ggplot2)
library(gridExtra)  # Para organizar múltiples gráficos

p1 <- ggplot(variables_ciclo_vital_sin_datipicos, aes(x = "", y = ingreso)) + 
  geom_boxplot(fill = "blue") + 
  labs(title = "Ingreso") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()  # Hace el boxplot horizontal

p2 <- ggplot(variables_ciclo_vital_sin_datipicos, aes(x = "", y = edad)) + 
  geom_boxplot(fill = "pink") + 
  labs(title = "Edad") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()

p3 <- ggplot(variables_ciclo_vital_sin_datipicos, aes(x = "", y = edad2)) + 
  geom_boxplot(fill = "yellow") + 
  labs(title = "Edad²") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()

p4 <- ggplot(variables_ciclo_vital_sin_datipicos, aes(x = "", y = nivel_educ)) + 
  geom_boxplot(fill = "blue") + 
  labs(title = "Nivel Educativo") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()

p5 <- ggplot(variables_ciclo_vital_sin_datipicos, aes(x = "", y = años_educ)) + 
  geom_boxplot(fill = "purple") + 
  labs(title = "Años de Educación") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()

p6 <- ggplot(variables_ciclo_vital_sin_datipicos, aes(x = "", y = ahorro)) + 
  geom_boxplot(fill = "gold") + 
  labs(title = "Ahorro") + 
  theme(axis.text.y = element_blank()) + 
  coord_flip()

# Organizar todos los gráficos en una sola fila horizontal
grid.arrange(p1, p2, p3, p4, p5, p6, ncol = 6)

# Organizar todos los gráficos en una sola figura
grid.arrange(p1, p2, p3, p4, p5, p6, ncol = 3)

3. Planteamiento de la Ecuación

Planteamiento de la ecuación de ahorro según Keynes

Ahorro=B1+B2ingreso+Ui

Planteamiento de la ecuación de ahorro según la teoría del ciclo vital

Ahorro=B1+B2ingreso+B3edad+B4edad2+B5nivel_educ+B6años_educ+Ui

4. Análisis de R2 y Significancia

Análisis R^2

Modelos Keynesianos

Modelo Keynesiano con datos atipicos

options(scipen = 999)
summary(modelo_keynes)
## 
## Call:
## lm(formula = ahorro ~ ingreso, data = variables_keynes)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -365725   -4027   11349   13331   16502 
## 
## Coefficients:
##                     Estimate       Std. Error t value            Pr(>|t|)    
## (Intercept) -16501.779103006     45.131019488  -365.6 <0.0000000000000002 ***
## ingreso          0.051321214      0.000008195  6262.7 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21530 on 346433 degrees of freedom
## Multiple R-squared:  0.9912, Adjusted R-squared:  0.9912 
## F-statistic: 3.922e+07 on 1 and 346433 DF,  p-value: < 0.00000000000000022

En el modelo keynesiano con datos atípicos, el ajuste es prácticamente perfecto. Esto indica que el ahorro depende significativamente del ingreso, ya que el elevado valor de R/^2 sugiere que la mayor parte de la variabilidad en el ahorro es explicada por el ingreso.

Modelo Keynesiano sin datos atipicos

  summary(modelo_keynes_sin_datipicos)
## 
## Call:
## lm(formula = ahorro ~ ingreso, data = variables_keynes_sin_datipicos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -105902  -10783    6939   15134   30544 
## 
## Coefficients:
##                   Estimate     Std. Error t value            Pr(>|t|)    
## (Intercept) -30544.3982874     63.6551831  -479.8 <0.0000000000000002 ***
## ingreso          0.0570046      0.0000214  2663.9 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 19800 on 323699 degrees of freedom
## Multiple R-squared:  0.9564, Adjusted R-squared:  0.9564 
## F-statistic: 7.096e+06 on 1 and 323699 DF,  p-value: < 0.00000000000000022

En el modelo keynesiano, al eliminar los datos atípicos, el ajuste se mantiene, lo que confirma que el ahorro está efectivamente relacionado con el ingreso.

Modelos Ciclo Vital

Modelo Ciclo Vital con datos atipicos

summary(modelo_ciclo_vital)
## 
## Call:
## lm(formula = ahorro ~ ingreso + edad + edad2 + nivel_educ + años_educ, 
##     data = variables_ciclo_vital)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -340743   -3626   10475   13871   19860 
## 
## Coefficients:
##                     Estimate       Std. Error  t value             Pr(>|t|)    
## (Intercept) -19687.765213070    124.982718632 -157.524 < 0.0000000000000002 ***
## ingreso          0.051219889      0.000008382 6110.765 < 0.0000000000000002 ***
## edad           -47.156835344      7.437939231   -6.340   0.0000000002299861 ***
## edad2            0.684913900      0.089574124    7.646   0.0000000000000207 ***
## nivel_educ     619.022888024     17.402126781   35.572 < 0.0000000000000002 ***
## años_educ      178.926174696     16.997231677   10.527 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21440 on 346429 degrees of freedom
## Multiple R-squared:  0.9913, Adjusted R-squared:  0.9913 
## F-statistic: 7.912e+06 on 5 and 346429 DF,  p-value: < 0.00000000000000022

En el modelo de Ciclo Vital, el valor de R/^2 indica que el 99.13% de la variabilidad en el ahorro es explicada por las variables incluidas. Esto sugiere que el modelo posee un gran poder explicativo, lo que podría indicar que las variables seleccionadas son altamente relevantes para predecir el ahorro.

Modelo Ciclo Vital sin datos atipicos

summary(modelo_ciclo_vital_sin_datipicos)
## 
## Call:
## lm(formula = ahorro ~ ingreso + edad + edad2 + nivel_educ + años_educ, 
##     data = variables_ciclo_vital_sin_datipicos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -106411  -10902    6980   15007   31132 
## 
## Coefficients:
##                  Estimate    Std. Error  t value             Pr(>|t|)    
## (Intercept) -31154.951041    125.978661 -247.303 < 0.0000000000000002 ***
## ingreso          0.056985      0.000022 2589.687 < 0.0000000000000002 ***
## edad            14.167314      7.038070    2.013               0.0441 *  
## edad2           -0.030829      0.084925   -0.363               0.7166    
## nivel_educ      -9.448692     17.342335   -0.545               0.5859    
## años_educ       78.651458     16.916028    4.650           0.00000333 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 19800 on 323695 degrees of freedom
## Multiple R-squared:  0.9564, Adjusted R-squared:  0.9564 
## F-statistic: 1.42e+06 on 5 and 323695 DF,  p-value: < 0.00000000000000022

En el modelo Ciclo Vital sin los datos atipicos, el modelo sigue ajustandose confirmandonos que el ahorro si esta relacionado con el ingreso.

5. Interpretación de Coeficientes

Signo y magnitud de los coeficientes / Discusión de significancia estadística (p < 0.05).

Modelos Keynesianos

Modelo Keynesiano con datos atipicos

summary(modelo_keynes)
## 
## Call:
## lm(formula = ahorro ~ ingreso, data = variables_keynes)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -365725   -4027   11349   13331   16502 
## 
## Coefficients:
##                     Estimate       Std. Error t value            Pr(>|t|)    
## (Intercept) -16501.779103006     45.131019488  -365.6 <0.0000000000000002 ***
## ingreso          0.051321214      0.000008195  6262.7 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21530 on 346433 degrees of freedom
## Multiple R-squared:  0.9912, Adjusted R-squared:  0.9912 
## F-statistic: 3.922e+07 on 1 and 346433 DF,  p-value: < 0.00000000000000022

El coeficiente “Intercept” representa el ahorro estimado cuando el ingreso es cero. En este caso, el modelo predice que si una persona no tiene ingresos, su ahorro esperado sería de -16,500. Sin embargo, un intercepto negativo no siempre tiene una interpretación realista, ya que en la práctica, si alguien no percibe ingresos, su capacidad de ahorro sería inexistente, pues no dispone de recursos para destinar al ahorro.

Por otro lado, el coeficiente asociado al “ingreso” indica que por cada unidad adicional de ingreso, el ahorro aumenta en 0.05132 unidades. Esto refleja una relación positiva entre ingreso y ahorro, lo que implica que a mayores ingresos, la capacidad de ahorrar también se incrementa.

Ambos coeficientes presentan un p-valor inferior a 0.05, prácticamente cercano a cero, lo que indica que son estadísticamente significativos. Esto confirma que el ingreso tiene un efecto real sobre el ahorro.

Modelo Keynesiano sin datos atipicos

summary(modelo_keynes_sin_datipicos)
## 
## Call:
## lm(formula = ahorro ~ ingreso, data = variables_keynes_sin_datipicos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -105902  -10783    6939   15134   30544 
## 
## Coefficients:
##                   Estimate     Std. Error t value            Pr(>|t|)    
## (Intercept) -30544.3982874     63.6551831  -479.8 <0.0000000000000002 ***
## ingreso          0.0570046      0.0000214  2663.9 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 19800 on 323699 degrees of freedom
## Multiple R-squared:  0.9564, Adjusted R-squared:  0.9564 
## F-statistic: 7.096e+06 on 1 and 323699 DF,  p-value: < 0.00000000000000022

El coeficiente “Intercept” representa el ahorro estimado cuando el ingreso es cero,en este caso, el modelo predice que si una persona no tiene ingresos, su ahorro esperado sería de -30544.39. Sin embargo un intercepto negativo no siempre tiene una interpretación realista; como sabemos en la practica si una persona tiene como ingresos=cero, su capacidad para ahorrar seria nula ya que no dispone de recursos para destinar al ahorro

El coeficiente “ingreso” nos indica que por cada unidad adicional de ingreso, el ahorro aumenta en 0.0570046 unidades.La relación entre ingreso y ahorro es positiva, lo que significa que a mayor ingreso tendremos una capacidad mayor para ahorrar.

Ambos coeficientes tienen p-valor < 0.05 de hecho, casi 0, lo que significa que son estadísticamente significativos,esto confirma que el ingreso tiene un compactor real sobre el ahorro.

Modelo Ciclo Vital

Modelo Ciclo Vital con datos atipicos

summary(modelo_ciclo_vital)
## 
## Call:
## lm(formula = ahorro ~ ingreso + edad + edad2 + nivel_educ + años_educ, 
##     data = variables_ciclo_vital)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -340743   -3626   10475   13871   19860 
## 
## Coefficients:
##                     Estimate       Std. Error  t value             Pr(>|t|)    
## (Intercept) -19687.765213070    124.982718632 -157.524 < 0.0000000000000002 ***
## ingreso          0.051219889      0.000008382 6110.765 < 0.0000000000000002 ***
## edad           -47.156835344      7.437939231   -6.340   0.0000000002299861 ***
## edad2            0.684913900      0.089574124    7.646   0.0000000000000207 ***
## nivel_educ     619.022888024     17.402126781   35.572 < 0.0000000000000002 ***
## años_educ      178.926174696     16.997231677   10.527 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21440 on 346429 degrees of freedom
## Multiple R-squared:  0.9913, Adjusted R-squared:  0.9913 
## F-statistic: 7.912e+06 on 5 and 346429 DF,  p-value: < 0.00000000000000022

El coeficiente “Intercept” representa el ahorro estimado cuando todas las variables(ingreso,edad,edad2,nivel_edu,años_educ) son cero,en este caso, el modelo predice que si una persona no tiene ingresos, su ahorro esperado sería de -19,690. Sin embargo un intercepto negativo no siempre tiene una interpretación realista; como sabemos en la practica si una persona tiene como ingresos=cero, su capacidad para ahorrar seria nula ya que no dispone de recursos para destinar al ahorro

El coeficiente “ingreso” nos indica que por cada unidad adicional de ingreso, el ahorro aumenta en 0.05122 unidades.La relación entre ingreso y ahorro es positiva, lo que significa que a mayor ingreso tendremos una capacidad mayor para ahorrar.

El coeficiente negativo de la variable “edad” nos indica que a medida que aumenta la edad el ahorro disminuye en 47.16 unidades.

teniendo en cuenta las caracteristicas de la variable anterior(edad),esta tiene una relación no lineal con el ahorro. Inicialmente, el ahorro disminuye con la edad, pero este efecto se atenúa con el tiempo incluso pudiendo llegar a revertirse como lo muestra el coeficiente “edad2”(0.6849). El coeficiente positivo de edad2 refleja un ciclo de acumulación y desacumulación de activos: en la juventud, los gastos elevados(educacion,compra de vivienda o la crianza de hijos) reducen el ahorro, mientras que en la etapa avanzada de la vida, con ingresos más estables y menos obligaciones economicas, el ahorro puede aumentar nuevamente.

El coeficiente “nivel_educ” sugiere que cada nivel adicional de educación se asocia con un aumento de 619 unidades en el ahorro.Esto respalda la idea de que un mayor nivel de educación puede llevar a mejores oportunidades laborales y, por ende, a mayores ingresos y capacidad de ahorro.

El coeficiente “años_educ” nos indica que por cada año adicional de educación formal, el ahorro aumenta en 178.9 unidades. Esto refuerza la importancia de la educación en la capacidad de generar ingresos y, en consecuencia, de ahorrar.

Todos los coeficientes son estadísticamente significativos (p < 2e-16), lo que indica una alta confianza en su relación con el ahorro.Sin embargo, el “intercept” negativo podría indicar que faltan otras variables que afectan el ahorro.

Modelo Ciclo Vital sin datos atipicos

summary(modelo_ciclo_vital_sin_datipicos)
## 
## Call:
## lm(formula = ahorro ~ ingreso + edad + edad2 + nivel_educ + años_educ, 
##     data = variables_ciclo_vital_sin_datipicos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -106411  -10902    6980   15007   31132 
## 
## Coefficients:
##                  Estimate    Std. Error  t value             Pr(>|t|)    
## (Intercept) -31154.951041    125.978661 -247.303 < 0.0000000000000002 ***
## ingreso          0.056985      0.000022 2589.687 < 0.0000000000000002 ***
## edad            14.167314      7.038070    2.013               0.0441 *  
## edad2           -0.030829      0.084925   -0.363               0.7166    
## nivel_educ      -9.448692     17.342335   -0.545               0.5859    
## años_educ       78.651458     16.916028    4.650           0.00000333 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 19800 on 323695 degrees of freedom
## Multiple R-squared:  0.9564, Adjusted R-squared:  0.9564 
## F-statistic: 1.42e+06 on 5 and 323695 DF,  p-value: < 0.00000000000000022

El coeficiente “Intercept” representa el ahorro estimado cuando todas las variables(ingreso,edad,edad2,nivel_edu,años_educ) son cero,en este caso, el modelo predice que si una persona no tiene ingresos, su ahorro esperado sería de -31154.95. Sin embargo un intercepto negativo no siempre tiene una interpretación realista; como sabemos en la practica si una persona tiene como ingresos=cero, su capacidad para ahorrar seria nula ya que no dispone de recursos para destinar al ahorro

El coeficiente “ingreso” nos indica que por cada unidad adicional de ingreso, el ahorro aumenta en 0.056985 unidades.La relación entre ingreso y ahorro es positiva, lo que significa que a mayor ingreso tendremos una capacidad mayor para ahorrar.

En este modelo el coeficiente “edad” indica que, en promedio, cada año adicional de edad aumenta el ahorro en 14.167 unidades

El coeficiente negativo de “edad2” sugiere que el impacto positivo de la edad en el ahorro se desacelera con el tiempo e incluso podría revertirse en edades más avanzadas. Además su p-valor alto (0.7166) indica que no es estadísticamente significativa en este modelo.

El coeficiente “nivel_educ” aunque es negativo, su p-valor alto (0.5859) sugiere que no hay evidencia suficiente para afirmar que el nivel educativo tiene un efecto significativo sobre el ahorro en este modelo.

El coeficiente “años_educ” nos indica que, por cada año adicional de educación, el ahorro aumenta en 78.651 unidades. Su bajo p-valor (<0.001) indica que este efecto es estadísticamente significativo en este modelo.

Teniendo en cuenta los p-valor este modelo sugiere que el ingreso y los años de educación tienen un impacto positivo y significativo sobre el ahorro, mientras que la edad presenta un efecto positivo pero con una relación altamente no lineal. Sin embargo, las variables “edad2” y “nivel educ” no resultan significativos en este análisis, lo que sugiere que su impacto sobre el ahorro no es determinante dentro de este modelo específico.

6. Visualización de Resultados

Modelos Keynesianos

Modelo Keynesiano con datos atipicos

library(ggplot2)
library(gridExtra) 
par(mfrow = c(2, 2))

p0 <- plot(modelo_keynes$residuals, main = "Residuos del Modelo keynes", ylab = "Residuos", xlab = "Índice", col = "orange", pch = 16)
abline(h = 0, col = "green", lwd = 2)

p1 <- plot(variables_keynes$ahorro, modelo_keynes$residuals, 
     main = "Residuos vs ahorro", 
     xlab = "ahorro", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "green", lwd = 2)

p2 <- plot(variables_keynes$ingreso, modelo_keynes$residuals, 
     main = "Residuos vs ingreso", 
     xlab = "ingreso", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "green", lwd = 2)

library(ggplot2)

ggplot(variables_keynes, aes(x = ahorro, y = ingreso)) +
  geom_point(color = "orange", alpha = 0.5) +  # Puntos azules con transparencia
  geom_smooth(method = "lm", color = "green", se = FALSE) +  # Línea de regresión en rojo
  labs(title = "Relación entre Ahorro e Ingreso",
       x = "Ahorro",
       y = "Ingreso") +
  theme_minimal()

Modelo Keynesiano sin datos atipicos

library(ggplot2)
library(gridExtra) 
par(mfrow = c(2, 2))

p0 <- plot(modelo_keynes_sin_datipicos$residuals, main = "Residuos del Modelo keynes sin atipicos", ylab = "Residuos", xlab = "Índice", col = "orange", pch = 16)
abline(h = 0, col = "green", lwd = 2)

p1 <- plot(variables_keynes_sin_datipicos$ahorro, modelo_keynes_sin_datipicos$residuals, 
     main = "Residuos vs ahorro", 
     xlab = "ahorro", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "green", lwd = 2)

p2 <- plot(variables_keynes_sin_datipicos$ingreso, modelo_keynes_sin_datipicos$residuals, 
     main = "Residuos vs ingreso", 
     xlab = "ingreso", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "green", lwd = 2)

library(ggplot2)

ggplot(variables_keynes_sin_datipicos, aes(x = ahorro, y = ingreso)) +
  geom_point(color = "orange", alpha = 0.5) +  # Puntos azules con transparencia
  geom_smooth(method = "lm", color = "purple", se = FALSE) +  # Línea de regresión en rojo
  labs(title = "Relación entre Ahorro e Ingreso",
       x = "Ahorro",
       y = "Ingreso") +
  theme_minimal()

Modelos Ciclo Vital

Modelo Ciclo Vital con datos atipicos

library(ggplot2)
library(gridExtra) 
par(mfrow = c(2, 2))

p0 <- plot(modelo_ciclo_vital$residuals, main = "Residuos del Modelo Ciclo Vital", ylab = "Residuos", xlab = "Índice", col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

p1 <- plot(variables_ciclo_vital$ahorro, modelo_ciclo_vital$residuals, 
     main = "Residuos vs ahorro", 
     xlab = "ahorro", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

p2 <- plot(variables_ciclo_vital$ingreso, modelo_ciclo_vital$residuals, 
     main = "Residuos vs ingreso", 
     xlab = "ingreso", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

p3 <- plot(variables_ciclo_vital$edad, modelo_ciclo_vital$residuals, 
     main = "Residuos vs edad", 
     xlab = "edad", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

library(ggplot2)
library(gridExtra) 
par(mfrow = c(2, 2))

p4 <- plot(variables_ciclo_vital$edad2, modelo_ciclo_vital$residuals, 
     main = "Residuos vs edad2", 
     xlab = "edad2", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

p5 <- plot(variables_ciclo_vital$nivel_educ, modelo_ciclo_vital$residuals, 
     main = "Residuos vs nivel_educ", 
     xlab = "nivel_educ", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

p6 <- plot(variables_ciclo_vital$años_educ, modelo_ciclo_vital$residuals, 
     main = "Residuos vs años_educ", 
     xlab = "años_educ", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

Modelo Ciclo Vital sin datos atipicos

library(ggplot2)
library(gridExtra) 
par(mfrow = c(2, 2))

p0 <- plot(modelo_ciclo_vital_sin_datipicos$residuals, main = "Residuos del Modelo Ciclo Vital sin atipicos", ylab = "Residuos", xlab = "Índice", col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

p1 <- plot(variables_ciclo_vital_sin_datipicos$ahorro, modelo_ciclo_vital_sin_datipicos$residuals, 
     main = "Residuos vs ahorro", 
     xlab = "ahorro", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

p2 <- plot(variables_ciclo_vital_sin_datipicos$ingreso, modelo_ciclo_vital_sin_datipicos$residuals, 
     main = "Residuos vs ingreso", 
     xlab = "ingreso", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

p3 <- plot(variables_ciclo_vital_sin_datipicos$edad, modelo_ciclo_vital_sin_datipicos$residuals, 
     main = "Residuos vs edad", 
     xlab = "edad", ylab = "Residuos", 
     col = "orange", pch = 16)
abline(h = 0, col = "purple", lwd = 2)

library(ggplot2)
library(gridExtra) 
par(mfrow = c(2, 2))

p4 <- plot(variables_ciclo_vital_sin_datipicos$edad2, modelo_ciclo_vital_sin_datipicos$residuals, 
     main = "Residuos vs edad2", 
     xlab = "edad2", ylab = "Residuos", 
     col = "green", pch = 16)
abline(h = 0, col = "yellow", lwd = 2)

p5 <- plot(variables_ciclo_vital_sin_datipicos$nivel_educ, modelo_ciclo_vital_sin_datipicos$residuals, 
     main = "Residuos vs nivel_educ", 
     xlab = "nivel_educ", ylab = "Residuos", 
     col = "green", pch = 16)
abline(h = 0, col = "yellow", lwd = 2)

p6 <- plot(variables_ciclo_vital_sin_datipicos$años_educ, modelo_ciclo_vital_sin_datipicos$residuals, 
     main = "Residuos vs años_educ", 
     xlab = "años_educ", ylab = "Residuos", 
     col = "green", pch = 16)
abline(h = 0, col = "yellow", lwd = 2)

Como funcionarios públicos, deberán proponer:

##¿Qué políticas podrían incrementar el ahorro? (Ej.: incentivos fiscales,educación financiera). ¿Cómo afecta la informalidad laboral (56% en Colombia) estos resultados?

El ahorro es un elemento esencial para la estabilidad financiera de los hogares, ya que permite afrontar imprevistos como emergencias médicas, desempleo o reparaciones inesperadas sin recurrir al endeudamiento. Además, brinda seguridad económica, facilita el cumplimiento de metas, impulsa la inversión y contribuye al crecimiento del patrimonio. No obstante, en Colombia, la elevada tasa de informalidad laboral (56%) dificulta que gran parte de la población pueda generar y mantener hábitos de ahorro. Por ello, es necesario implementar políticas que promuevan el ahorro y reduzcan las barreras que limitan su desarrollo.

Algunas estrategias que podrían fomentar el ahorro incluyen: 1. Implementar incentivos fiscales, como la reducción del impuesto del 4x1000 en cuentas de ahorro, ya que este gravamen se aplica a cada retiro o movimiento bancario, lo que significa que las personas pierden el 0,4% de su dinero en cada transacción. Esta situación desincentiva el ahorro, especialmente entre quienes perciben ingresos bajos. 2. Fortalecer la educación financiera a través de programas en colegios y universidades, lo que permitiría a los ciudadanos desarrollar hábitos de ahorro desde una edad temprana. 3. Promover el uso de cuentas exentas del 4x1000 para incentivar el ahorro formal.

La informalidad laboral limita considerablemente la capacidad de ahorro de la población, pues quienes trabajan en esta condición carecen de acceso a seguridad social, lo que implica la ausencia de pensiones y seguros de desempleo. Esto los obliga a depender de sus ingresos diarios, dificultando la planificación financiera a largo plazo. Además, la inestabilidad de sus ingresos impide la formación de hábitos de ahorro, ya que deben priorizar el consumo inmediato sobre la acumulación de riqueza. Para fortalecer la capacidad de ahorro en Colombia, es crucial reducir la informalidad laboral y mejorar la educación .