Introducción
En este taller vamos a construir un modelo de regresión lineal múltiple para entender qué factores influyen en el valor del subsidio de vivienda que asigna FONVIVIENDA a cada hogar en Colombia. Usamos una base de datos con 86,524 registros que incluye información sobre el año de asignación, cuántos hogares recibieron el subsidio y el programa al que pertenecen. Vamos a explorar los datos, estimar el modelo, revisar si se cumplen los supuestos y proponer un modelo final que sea útil para entender la política pública de vivienda.
Subsidios_De_Vivienda_Asignados_20260706 <- read_csv("C:/Users/SAMSUNG/Downloads/Subsidios_De_Vivienda_Asignados_20260706.csv")
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 86603 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): Departamento, Municipio, Programa, Estado de Postulación, Valor Asi...
## dbl (3): Código Divipola Departamento, Código Divipola Municipio, Hogares
## num (1): Año de Asignación
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
datos <- Subsidios_De_Vivienda_Asignados_20260706
head(datos)
## # A tibble: 6 × 9
## Departamento Código Divipola Depa…¹ Municipio Código Divipola Muni…² Programa
## <chr> <dbl> <chr> <dbl> <chr>
## 1 CESAR 20 VALLEDUP… 20001 MI CASA…
## 2 ANTIOQUIA 5 BELLO 5088 MI CASA…
## 3 NORTE DE SAN… 54 SARDINATA 54720 Bolsa D…
## 4 VALLE DEL CA… 76 CANDELAR… 76130 MI CASA…
## 5 BOLÍVAR 13 CARTAGEN… 13001 MI CASA…
## 6 VALLE DEL CA… 76 SANTIAGO… 76001 Semille…
## # ℹ abbreviated names: ¹`Código Divipola Departamento`,
## # ²`Código Divipola Municipio`
## # ℹ 4 more variables: `Año de Asignación` <dbl>, `Estado de Postulación` <chr>,
## # Hogares <dbl>, `Valor Asignado` <chr>
datos_finales <- datos %>%
mutate(
Valor_Numerico = as.numeric(gsub("[\\$, ]", "", `Valor Asignado`)),
Ano = as.numeric(gsub("[\\, ]", "", `Año de Asignación`)),
# Crear variable dependiente Y (en millones de COP por hogar)
valor_por_hogar = (Valor_Numerico / Hogares) / 1000000
) %>%
# Seleccionar las variables para el modelo y remover NAs
select(valor_por_hogar, Hogares, Ano, Programa) %>%
drop_na() %>%
# Agrupar programas para optimizar los grados de libertad del factor
mutate(
Programa = as.factor(ifelse(Programa %in% c("MI CASA YA", "Bolsa Desplazados", "Vivienda Gratuita"), Programa, "Otros"))
)
# Verificar que se haya creado correctamente la base estructurada
str(datos_finales)
## tibble [86,524 × 4] (S3: tbl_df/tbl/data.frame)
## $ valor_por_hogar: num [1:86524] 17.6 14.8 10.7 23.8 21.5 ...
## $ Hogares : num [1:86524] 9 5 36 24 15 11 1 1 57 10 ...
## $ Ano : num [1:86524] 2020 2017 2007 2021 2019 ...
## $ Programa : Factor w/ 3 levels "Bolsa Desplazados",..: 2 2 1 2 2 3 2 1 3 1 ...
print(summary(datos_finales))
## valor_por_hogar Hogares Ano Programa
## Min. :7.518e-03 Min. : 1 Min. :2003 Bolsa Desplazados: 9279
## 1st Qu.:1.373e+01 1st Qu.: 1 1st Qu.:2016 MI CASA YA :50546
## Median :1.817e+01 Median : 2 Median :2019 Otros :26699
## Mean :1.983e+01 Mean : 11 Mean :2018
## 3rd Qu.:2.484e+01 3rd Qu.: 7 3rd Qu.:2022
## Max. :1.170e+02 Max. :990 Max. :2026
# Verificar que se haya creado correctamente la base estructurada
str(datos_finales)
## tibble [86,524 × 4] (S3: tbl_df/tbl/data.frame)
## $ valor_por_hogar: num [1:86524] 17.6 14.8 10.7 23.8 21.5 ...
## $ Hogares : num [1:86524] 9 5 36 24 15 11 1 1 57 10 ...
## $ Ano : num [1:86524] 2020 2017 2007 2021 2019 ...
## $ Programa : Factor w/ 3 levels "Bolsa Desplazados",..: 2 2 1 2 2 3 2 1 3 1 ...
print(summary(datos_finales))
## valor_por_hogar Hogares Ano Programa
## Min. :7.518e-03 Min. : 1 Min. :2003 Bolsa Desplazados: 9279
## 1st Qu.:1.373e+01 1st Qu.: 1 1st Qu.:2016 MI CASA YA :50546
## Median :1.817e+01 Median : 2 Median :2019 Otros :26699
## Mean :1.983e+01 Mean : 11 Mean :2018
## 3rd Qu.:2.484e+01 3rd Qu.: 7 3rd Qu.:2022
## Max. :1.170e+02 Max. :990 Max. :2026
Análisis Exploratorio de Datos (EDA)
Al mirar los datos, vemos que el subsidio por hogar (nuestra variable Y) tiene un promedio de 19.83 millones de pesos, pero con mucha variación: hay subsidios desde casi cero hasta 117 millones. La distribución está sesgada a la derecha, es decir, la mayoría de subsidios están concentrados en valores relativamente bajos y unos pocos son muy altos.
La correlación más fuerte la encontramos con el Año: a medida que pasan los años, los subsidios tienden a subir (correlación de 0.49). Esto sugiere que el Estado va ajustando los montos con el tiempo. En cambio, la cantidad de Hogares beneficiarios no parece tener una relación lineal clara con el subsidio por hogar (correlación casi cero). Por último, calculamos el VIF para ver si hay problemas de multicolinealidad (variables muy relacionadas entre sí) y los valores son muy bajos (todos menores a 2), así que no hay riesgo de que las variables se estén pisando entre ellas.
# Histograma de la variable continua Y
ggplot(datos_finales, aes(x = valor_por_hogar)) +
geom_histogram(aes(y = ..density..), bins = 30, fill = "darkblue", color = "white", alpha = 0.7) +
geom_density(color = "red", size = 1) +
theme_minimal() +
labs(title = "Distribución del Valor del Subsidio por Hogar", x = "Millones de COP", y = "Densidad")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Matriz de Correlación de Pearson para variables cuantitativas
vars_cuant <- datos_finales %>% select(valor_por_hogar, Hogares, Ano)
print(cor(vars_cuant, method = "pearson"))
## valor_por_hogar Hogares Ano
## valor_por_hogar 1.00000000 0.02185622 0.49409005
## Hogares 0.02185622 1.00000000 -0.09743263
## Ano 0.49409005 -0.09743263 1.00000000
El modelo se estimo con las tres variables (Hogares, Año y Programa). Los resultados son los siguientes:
Prueba F global: da un valor de 7,565 con p-valor prácticamente cero, así que podemos decir con confianza que el modelo sirve para explicar algo de la variación en los subsidios.
R² ajustado: es de 0.259, o sea, el modelo explica alrededor del 26% de la variabilidad del subsidio. No es un porcentaje enorme, pero en ciencias sociales con datos tan masivos es un ajuste aceptable.
Mirando cada variable por separado:
Hogares: por cada hogar adicional en un registro, el subsidio por hogar aumenta en 0.021 millones de pesos (unos $21,700 pesos). Es un efecto pequeño pero significativo.
Año: por cada año que pasa, el subsidio por hogar sube en 0.871 millones (unos $871,000 pesos). Este es el efecto más importante.
Programa: comparado con “Bolsa Desplazados” (la categoría base), el programa “Mi Casa Ya” entrega en promedio 0.50 millones menos, y los “Otros” programas entregan 2.61 millones menos. Todos estos efectos son estadísticamente significativos (p-valores < 0.05).
# Estimación del modelo base lineal múltiple
modelo_base <- lm(valor_por_hogar ~ Hogares + Ano + Programa, data = datos_finales)
# Resumen completo para ver coeficientes (betas), pruebas t e indicador F
summary(modelo_base)
##
## Call:
## lm(formula = valor_por_hogar ~ Hogares + Ano + Programa, data = datos_finales)
##
## Residuals:
## Min 1Q Median 3Q Max
## -30.142 -4.840 -0.615 2.973 93.421
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.738e+03 1.368e+01 -127.031 < 2e-16 ***
## Hogares 2.175e-02 8.001e-04 27.181 < 2e-16 ***
## Ano 8.714e-01 6.809e-03 127.975 < 2e-16 ***
## ProgramaMI CASA YA -5.036e-01 1.261e-01 -3.992 6.55e-05 ***
## ProgramaOtros -2.617e+00 1.165e-01 -22.477 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.706 on 86519 degrees of freedom
## Multiple R-squared: 0.2591, Adjusted R-squared: 0.2591
## F-statistic: 7565 on 4 and 86519 DF, p-value: < 2.2e-16
# Intervalos de confianza al 95% para evaluar la significancia individual
confint(modelo_base, level = 0.95)
## 2.5 % 97.5 %
## (Intercept) -1.764442e+03 -1.710821e+03
## Hogares 2.017829e-02 2.331452e-02
## Ano 8.580992e-01 8.847923e-01
## ProgramaMI CASA YA -7.507803e-01 -2.563432e-01
## ProgramaOtros -2.845670e+00 -2.389184e+00
Ahora, debemos ver si el modelo cumple con los supuestos necesarios para que las pruebas de significancia sean confiables:
Linealidad: en el gráfico de residuos vs ajustados, vemos que los puntos se distribuyen más o menos al azar alrededor del cero, aunque en valores muy altos hay una ligera curvatura. En general, se puede considerar aceptable.
Homocedasticidad (varianza constante): el test de Breusch-Pagan da un p-valor muy bajo, lo que indica que sí hay heterocedasticidad (la varianza de los errores no es constante). Esto es común en datos de política social, porque los subsidios más altos tienden a ser más variables.
Normalidad de los errores: el gráfico Q-Q muestra que los residuos no siguen una distribución normal, especialmente en las colas. Pero como tenemos más de 86 mil observaciones, el Teorema del Límite Central nos dice que los estimadores siguen siendo confiables para hacer inferencia, así que no nos preocupamos demasiado por esto.
Multicolinealidad: ya lo revisamos con el VIF y está todo bien, no hay variables redundantes.
En resumen: el modelo tiene problemas de heterocedasticidad, pero por el gran tamaño de la muestra podemos confiar en los resultados. Más adelante podríamos corregir esto con errores estándar robustos.
# A. Linealidad, Homocedasticidad e Independencia (Residuos vs Ajustados)
plot(modelo_base, which = 1, col = "darkblue", pch = 16)
# Prueba formal de Homocedasticidad (Breusch-Pagan)
# H0: Varianza constante (Homocedasticidad) vs H1: Heterocedasticidad
bptest(modelo_base)
##
## studentized Breusch-Pagan test
##
## data: modelo_base
## BP = 7275.8, df = 4, p-value < 2.2e-16
# B. Normalidad (Gráfico Q-Q normal con bandas de confianza)
# Usamos qqPlot de car para ver si los residuos caen dentro de las bandas del 95%
qqPlot(modelo_base, main = "Gráfico Q-Q con bandas de confianza (95%)", id = FALSE)
# C. Multicolinealidad (VIF)
# Valores mayores a 5 o 10 sugieren problemas de colinealidad
vif(modelo_base)
## GVIF Df GVIF^(1/(2*Df))
## Hogares 1.018820 1 1.009366
## Ano 1.720475 1 1.311669
## Programa 1.729082 2 1.146711
Linealidad: en el gráfico de residuos vs ajustados, los puntos se distribuyen más o menos al azar alrededor del cero, aunque en valores muy altos (por encima de 30 millones) hay una ligera curvatura. En el rango central de los datos, la relación se ve bastante lineal, así que podemos considerar el supuesto como aceptable.
Homocedasticidad (varianza constante): aplicamos el test de Breusch-Pagan y obtuvimos un estadístico de 7275.8 con un p-valor < 2.2e-16, lo que indica que sí hay heterocedasticidad (la varianza de los errores no es constante). Esto es común en datos de política social, porque los subsidios más altos tienden a ser más variables. En el gráfico se nota un patrón de embudo: la dispersión de los residuos aumenta cuando los valores ajustados son mayores.
Normalidad de los errores: el gráfico Q-Q muestra que los residuos no siguen una distribución normal, especialmente en las colas. Los residuos van desde -30.14 hasta 93.42 millones de pesos, lo que confirma que hay valores extremos. Pero como tenemos 86,524 observaciones, el Teorema del Límite Central nos dice que los estimadores siguen siendo confiables para hacer inferencia, así que no nos preocupamos demasiado por esto.
Multicolinealidad: calculamos el VIF y obtuvimos valores de 1.01 para Hogares, 1.72 para Año y 1.72 para Programa. Como todos están muy por debajo de 5, podemos afirmar que no hay variables redundantes y cada predictor aporta información única al modelo.
Independencia: como trabajamos con datos de corte transversal (distintos hogares y programas en un mismo período), no hay un orden secuencial que genere autocorrelación, así que asumimos que los errores son independientes entre sí.
En resumen: el modelo tiene problemas de heterocedasticidad y no-normalidad, pero por el gran tamaño de la muestra podemos confiar en los resultados. Más adelante podríamos corregir la heterocedasticidad con errores estándar robustos. Los VIF confirman que no hay multicolinealidad.
La vivienda es un tema clave para reducir la pobreza en Colombia, y el Estado, a través de FONVIVIENDA, ha creado varios programas de subsidios para ayudar a las familias a comprar casa. Pero estos subsidios no son todos iguales: cambian según el año, el programa y cuántas familias están involucradas.
En este estudio queremos responder una pregunta sencilla pero importante: ¿qué factores determinan cuánto dinero recibe un hogar por concepto de subsidio de vivienda? Para eso, vamos a usar un modelo de regresión lineal múltiple que nos permita aislar el efecto de cada variable (año, número de hogares y tipo de programa) sobre el monto del subsidio.
Esto es útil porque nos ayuda a entender si el Estado está ajustando los subsidios con el tiempo (por ejemplo, para que no pierdan valor con la inflación), si hay diferencias reales entre los programas y si los subsidios funcionan igual cuando se asignan a muchos hogares a la vez. Con esa información, se pueden tomar mejores decisiones de política pública.
Los datos que usamos son públicos y vienen directamente de FONVIVIENDA. Contienen el historial de subsidios de vivienda asignados en todo el país entre 2003 y 2026. Originalmente son muchos registros, pero después de limpiar y seleccionar las variables que nos interesan, nos quedamos con 86,524 observaciones.
Las variables que incluimos en el modelo son:
Valor_por_hogar (Y): es el monto del subsidio dividido entre el número de hogares beneficiarios, expresado en millones de pesos. Esta es la variable que queremos explicar.
Hogares (X₁): el número de familias que reciben el subsidio en cada registro. Puede ser desde 1 hasta casi 1,000.
Año (X₂): el año en que se asignó el subsidio, que va de 2003 a 2026. Nos sirve para ver si los montos han ido subiendo con el tiempo.
Programa (X₃): el programa al que pertenece el subsidio. Agrupamos las categorías en tres: “Mi Casa Ya”, “Bolsa Desplazados” (que usamos como referencia) y “Otros” (para programas menos frecuentes).
Para poder usar el modelo de regresión lineal, es importante saber qué tipo de variable es cada una, porque eso define cómo las tratamos en el modelo:
Valor_por_hogar (Y): es una variable cuantitativa continua. Puede tomar cualquier valor (con decimales) y tiene un cero absoluto (cuando no hay subsidio). Se mide en millones de pesos.
Hogares (X₁): es cuantitativa discreta, porque solo toma valores enteros (1, 2, 3, …). También tiene un cero absoluto, aunque en la práctica siempre es al menos 1.
Año (X₂): es cuantitativa discreta (años enteros), pero en el modelo la tratamos como si fuera continua para poder interpretar el cambio marginal por cada año adicional. Su escala es de intervalo, porque la distancia entre años es constante, pero el cero no significa “ausencia de tiempo”.
Programa (X₃): es una variable cualitativa nominal, porque las categorías (Mi Casa Ya, Bolsa Desplazados, Otros) no tienen un orden natural. Para meterla en el modelo, la convertimos en variables dummy (0 y 1), y dejamos “Bolsa Desplazados” como categoría de referencia para comparar.
# 1. Gráfico para la Variable Dependiente Continua (valor_por_hogar)
ggplot(datos_finales, aes(x = valor_por_hogar)) +
geom_histogram(aes(y = after_stat(density)), bins = 40, fill = "#1f4e79", color = "white", alpha = 0.75) +
geom_density(color = "#c00000", linewidth = 1.2) +
theme_minimal(base_size = 12) +
labs(
title = "Figura 1: Distribución del Valor del Subsidio por Hogar",
x = "Monto del Subsidio (Millones de COP)",
y = "Densidad"
) +
theme(plot.title = element_text(face = "bold", hjust = 0.5))
# 2. Gráfico para la Variable Cuantitativa Discreta (Hogares)
ggplot(datos_finales, aes(x = Hogares)) +
geom_histogram(fill = "#2e75b6", color = "white", bins = 50) +
scale_x_log10() + # Aplicamos escala logarítmica por la alta dispersión y concentración en 1
theme_minimal(base_size = 12) +
labs(
title = "Figura 2: Distribución de la Cantidad de Hogares por Registro",
x = "Número de Hogares (Escala Logarítmica)",
y = "Frecuencia Absoluta"
) +
theme(plot.title = element_text(face = "bold", hjust = 0.5))
# 3. Gráfico para la Variable Cualitativa Nominal (Programa)
ggplot(datos_finales, aes(x = reorder(Programa, Programa, function(x)-length(x)), fill = Programa)) +
geom_bar(color = "white", alpha = 0.85) +
scale_fill_manual(values = c("#1f4e79", "#2e75b6", "#a6a6a6")) +
theme_minimal(base_size = 12) +
labs(
title = "Figura 3: Frecuencia de Asignaciones por Tipo de Programa",
x = "Programa de Vivienda",
y = "Número de Registros"
) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
legend.position = "none"
)
El examen univariado de los datos permite diagnosticar el comportamiento individual de cada componente del modelo antes de evaluar sus interacciones conjuntas.Variable valor_por_hogar (\(Y\)): El análisis numérico reporta una media o promedio muestral de \(19.83\) millones de COP, ubicándose ligeramente por encima de la mediana, la cual se sitúa en \(18.17\) millones de COP. El rango es sumamente amplio, registrando un valor mínimo de \(0.0075\) millones y un máximo excepcional de \(117\) millones de COP. Desde la perspectiva gráfica, el histograma y la curva de densidad estimada revelan una distribución leptocúrtica con una marcada asimetría positiva (cola pesada hacia la derecha). Esto indica visualmente que la política pública tiende a estandarizar y concentrar la gran mayoría de sus subsidios en torno a los topes legales de la vivienda de interés social (VIS), coexistiendo con una pequeña proporción de asignaciones especiales de alta cuantía que sesgan el promedio hacia arriba.Variable Hogares (\(X_1\)): Numéricamente, el promedio es de 11 hogares por registro, pero con una alta concentración en su primer cuartil (valor igual a 1) y una dispersión extrema representada por un máximo de 990 hogares. El gráfico de frecuencias denota una estructura de datos fuertemente concentrada en la base, evidenciando que el registro administrativo combina subsidios individuales con adjudicaciones colectivas masivas asociadas a macroproyectos de vivienda.Variable Programa (\(X_3\)): El análisis de frecuencias relativas refleja el peso político e histórico de cada línea de intervención. El programa contemporáneo MI CASA YA domina la base de datos con un total de \(50,546\) registros, seguido por la categoría agregada de Otros programas con \(26,699\) observaciones y la línea de Bolsa Desplazados con \(9,279\) registros. Gráficamente, el diagrama de barras ratifica la transición y consolidación de MI CASA YA como el eje central de la política habitacional urbana en la última década colombiana.
# A. Elaboración de dispersogramas contra la variable dependiente
library(ggplot2)
# Dispersograma 1: valor_por_hogar vs Ano
ggplot(datos_finales, aes(x = Ano, y = valor_por_hogar)) +
geom_point(alpha = 0.15, color = "#1f4e79") +
geom_smooth(method = "lm", color = "#c00000", linewidth = 1, se = FALSE) +
theme_minimal() +
labs(title = "Dispersograma de Valor del Subsidio vs Año",
x = "Año de Asignación", y = "Monto del Subsidio (Millones de COP)")
## `geom_smooth()` using formula = 'y ~ x'
# Dispersograma 2: valor_por_hogar vs Hogares
ggplot(datos_finales, aes(x = Hogares, y = valor_por_hogar)) +
geom_point(alpha = 0.15, color = "#2e75b6") +
scale_x_log10() +
geom_smooth(method = "lm", color = "#c00000", linewidth = 1, se = FALSE) +
theme_minimal() +
labs(title = "Dispersograma de Valor del Subsidio vs Cantidad de Hogares",
x = "Número de Hogares (Escala Logarítmica)", y = "Monto del Subsidio (Millones de COP)")
## `geom_smooth()` using formula = 'y ~ x'
# B y C. Cálculo de la Matriz de Correlación de Pearson
vars_cuant <- datos_finales[, c("valor_por_hogar", "Hogares", "Ano")]
# Matriz de Correlación de Pearson
print(cor(vars_cuant, method = "pearson"))
## valor_por_hogar Hogares Ano
## valor_por_hogar 1.00000000 0.02185622 0.49409005
## Hogares 0.02185622 1.00000000 -0.09743263
## Ano 0.49409005 -0.09743263 1.00000000
# D. Cálculo de Indicadores de Multicolinealidad (VIF)
vif(modelo_base)
## GVIF Df GVIF^(1/(2*Df))
## Hogares 1.018820 1 1.009366
## Ano 1.720475 1 1.311669
## Programa 1.729082 2 1.146711
Dispersogramas, correlación de Pearson y multicolinealidad
Para identificar el grado de asociación lineal y prevenir anomalías por redundancia de información, se evaluó la interacción bivariada de los predictores y su relación con la variable dependiente.Al elaborar los dispersogramas entre la variable dependiente y las cuantitativas independientes, se observa que el verdadero motor del modelo es el tiempo. El coeficiente de correlación lineal de Pearson entre valor_por_hogar y Ano arroja un \(r = 0.494\), lo que traduce una relación lineal positiva moderada. Visualmente, el gráfico de dispersión confirma una clara tendencia ascendente a lo largo de las vigencias fiscales, reflejando el proceso continuo de indexación institucional de los montos para contrarrestar la inflación y el encarecimiento del suelo urbano. En contraste, el dispersograma entre el subsidio unitario y el número de Hogares muestra una nube de puntos dispersa sin una dirección clara, refrendada por una correlación de Pearson prácticamente nula de \(r = 0.0218\), sugiriendo que la escala de agrupación familiar no altera linealmente el valor asignado por hogar de forma aislada.Finalmente, al examinar la relación cruzada entre las covariables independientes para diagnosticar problemas de multicolinealidad, la correlación entre el año y el volumen de hogares es sumamente débil (\(r = -0.097\)). Esta ausencia de redundancia informativa se confirma de manera definitiva mediante el cálculo de los indicadores avanzados de multicolinealidad; los Factores de Inflación de la Varianza generalizados (GVIF de Hogares: \(1.01\), Ano: \(1.72\) y Programa: \(1.72\)) se encuentran sustancialmente alejados del umbral de riesgo crítico convencional (\(VIF > 5\)). Por consiguiente, se concluye que el modelo estructural está completamente libre de problemas de multicolinealidad, lo que asegura que cada variable aporta información limpia, ortogonal y metodológicamente válida para proceder con la estimación precisa de los parámetros.
\[valor_por_hogar_i = beta_0 + beta_1(Hogares_i) + beta_2(Ano_i) + beta_3(Programa_{MiCasaYa,i}) + beta_4(Programa_{Otros,i}) + u_i\]
# Mostrar los coeficientes estimados del modelo base
summary(modelo_base)$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.737631e+03 1.367879e+01 -127.031053 0.000000e+00
## Hogares 2.174641e-02 8.000634e-04 27.180854 5.271098e-162
## Ano 8.714458e-01 6.809497e-03 127.975064 0.000000e+00
## ProgramaMI CASA YA -5.035618e-01 1.261325e-01 -3.992325 6.548261e-05
## ProgramaOtros -2.617427e+00 1.164509e-01 -22.476650 1.468657e-111
A partir de la estimación por Mínimos Cuadrados Ordinarios (MCO) presentada en el bloque anterior, la ecuación de la función de regresión muestral (FRM) se define como:
\[\widehat{valor\por\_hogar}_i = -1737.631 + 0.02175(Hogares_i) + 0.87145(Ano_i) - 0.50356(Programa{MiCasaYa,i}) - 2.61743(Programa_{Otros,i})\]
La interpretación económica y sustantiva de cada parámetro estimado se detalla a continuación:
Intercepto (\(\hat{\beta}_0 = -1737.631\)): Representa el valor esperado del subsidio por hogar cuando todas las variables independientes del modelo son iguales a cero. En este contexto, implicaría calcular el subsidio en el “año cero” de nuestra era para un registro sin hogares, lo cual carece por completo de sentido económico e institucional. Funciona estrictamente como un soporte matemático indispensable para la calibración y el posicionamiento de la recta de regresión.
Efecto marginal de Hogares (\(\hat{\beta}_1 = 0.02175\)): Manteniendo constantes el año de asignación y el tipo de programa (ceteris paribus), por cada hogar adicional concentrado en un registro de asignación, el valor promedio del subsidio por unidad familiar se incrementa en \(0.02175\) millones de COP (aproximadamente \(\$21,746\) COP). Esto evidencia que las adjudicaciones colectivas masivas presentan sutiles incrementos marginales en su asignación individual frente a las unifamiliares.
Efecto marginal del Tiempo (\(\hat{\beta}_2 = 0.87145\)): Manteniendo constantes las demás covariables (ceteris paribus), por cada año fiscal que transcurre, el monto promedio del subsidio por hogar se expande de forma transversal en \(0.87145\) millones de COP (aproximadamente \(\$871,446\) COP). Este parámetro refleja el esfuerzo presupuestal y la política fiscal del Estado colombiano por indexar los subsidios en el tiempo con el fin de asimilar la inflación y el encarecimiento habitacional.
Coeficiente diferencial de Programa MI CASA YA (\(\hat{\beta}_3 = -0.50356\)): Indica que, a igualdad de condiciones temporales y de escala familiar, un hogar perteneciente al programa Mi Casa Ya recibe en promedio \(0.50356\) millones de COP menos* (aproximadamente \(\$503,562\) COP menos) que un hogar adscrito al programa base omitido de referencia (Bolsa Desplazados). Coeficiente diferencial de Programa Otros (\(\hat{\beta}_4 = -2.61743\)): Indica que, manteniendo las demás variables constantes, los hogares beneficiarios de las líneas agrupadas en Otros programas perciben en promedio \(2.61743\) millones de COP menos (aproximadamente \(\$2'617.427\) COP menos) en comparación con los beneficiarios del programa base (Bolsa Desplazados).
# Extraer las métricas de ajuste global y el estadístico F del modelo base
summary(modelo_base)$fstatistic
## value numdf dendf
## 7564.616 4.000 86519.000
summary(modelo_base)$r.squared
## [1] 0.2591122
summary(modelo_base)$adj.r.squared
## [1] 0.2590779
Para determinar si el conjunto de variables independientes aporta información conjunta significativa para explicar el valor del subsidio, se contrasta la hipótesis nula de que todas las pendientes son simultáneamente cero (\(H_0: \beta_1 = \beta_2 = \beta_3 = \beta_4 = 0\)) contra la hipótesis alternativa de que al menos una de ellas es diferente de cero (\(H_1: \text{Al menos un } \beta_j \neq 0\)).
De acuerdo con los resultados provistos por la consola, el modelo registra un estadístico \(F = 7564.616\) calculado sobre \(4\) grados de libertad en el numerador y \(86,519\) en el denominador, asociado a un p-valor \(< 2.2 \times 10^{-16}\). Al ser este p-valor infinitesimal y sustancialmente menor al nivel de significancia estándar fijado de \(\alpha = 0.05\), se rechaza categóricamente la hipótesis nula. Esto demuestra con total contundencia que el modelo es globalmente significativo, lo que significa que el set de predictores (escala de hogares, tendencia temporal y tipo de programa) posee una alta capacidad conjunta y no aleatoria para explicar el comportamiento de las asignaciones de FONVIVIENDA.
El análisis de la bondad de ajuste del modelo arroja un coeficiente de determinación \(R^2\) Múltiple de \(0.2591122\) y un \(R^2\) Ajustado de \(0.2590779\).
Sustantivamente, el \(R^2\) indica que el modelo lineal planteado logra explicar de forma directa el \(25.91\%\) de la variabilidad total del valor del subsidio por hogar en Colombia. El \(74.09\%\) restante de la varianza queda sin explicar y se absorbe a través del término de perturbación estocástica (\(u_i\)), sugiriendo la presencia de otros factores determinantes del gasto social en vivienda que no están indexados en este registro (tales como los ingresos socioeconómicos del postulado, el avalúo del predio o la condición geográfica rural/urbana).
Por su parte, el hecho de que el \(R^2\) Ajustado sea prácticamente idéntico al \(R^2\) Múltiple (\(0.2590\)) se debe al impacto del tamaño muestral crítico del dataset (\(n = 86,524\) observaciones). Dado que el volumen de datos es masivo frente a los 4 grados de libertad consumidos por los predictores, la penalización por inclusión de variables independientes se vuelve asintóticamente nula en la fórmula de ajuste. En conclusión, un ajuste cercano al \(26\%\) en un modelo econométrico de corte transversal con microdatos masivos es completamente normal, robusto y aceptable, reflejando que el modelo captura de manera exitosa las tendencias estructurales e históricas de la política pública habitacional a gran escala.
# 1. Gráfico de Residuos Estandarizados frente a Valores Ajustados (Homocedasticidad y Linealidad)
residuos_est <- rstandard(modelo_base)
valores_ajustados <- fitted(modelo_base)
df_diagnostico <- data.frame(Ajustados = valores_ajustados, Residuos_Est = residuos_est)
ggplot(df_diagnostico, aes(x = Ajustados, y = Residuos_Est)) +
geom_point(alpha = 0.15, color = "#1f4e79") +
geom_hline(yintercept = 0, color = "#c00000", linewidth = 1, linetype = "dashed") +
geom_smooth(method = "loess", color = "#2e75b6", se = FALSE) +
theme_minimal() +
labs(title = "Residuos Estandarizados vs. Valores Ajustados",
x = "Valores Ajustados (Predichos)", y = "Residuos Estandarizados")
## `geom_smooth()` using formula = 'y ~ x'
# 2. Gráfico Q-Q Normal con Bandas de Confianza (Normalidad)
# Utilizando la función qqPlot del paquete 'car' que genera las bandas de confianza por defecto
qqPlot(modelo_base, distribution = "norm", envelope = 0.95, id = FALSE,
col = "#1f4e79", col.lines = "#c00000", main = "Gráfico Q-Q Normal con Bandas de Confianza")
# 3. Prueba Formal de Homocedasticidad (Breusch-Pagan)
# Dado que n > 86,000, la prueba de Breusch-Pagan es ideal
ncvTest(modelo_base)
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 1510.704, Df = 1, p = < 2.22e-16
Verificación: Al observar el gráfico de Residuos Estandarizados vs. Valores Ajustados, la línea azul suavizada por el método LOESS sirve para diagnosticar desviaciones de la linealidad. La curva se mantiene bastante cercana e intercalada sobre la línea roja del cero en la gran masa de datos (valores predichos entre 5 y 28). Sin embargo, en el extremo derecho (predicciones superiores a 30 millones), la línea azul experimenta una caída pronunciada. * Diagnóstico y Discusión: El supuesto se cumple de forma moderada/aceptable. La ligera curvatura final del residuo se debe a que el modelo subestima los montos de subsidio extremadamente altos en los años más recientes. En términos generales, la especificación lineal aditiva es adecuada para capturar la tendencia central del fenómeno estructural de FONVIVIENDA.
# Procedimiento de selección secuencial (Stepwise) basado en el Criterio de Información de Akaike (AIC)
# Se toma como modelo completo el 'modelo_base'
modelo_seleccionado <- step(modelo_base, direction = "both", trace = TRUE)
## Start: AIC=374473.6
## valor_por_hogar ~ Hogares + Ano + Programa
##
## Df Sum of Sq RSS AIC
## <none> 6556943 374474
## - Hogares 1 55991 6612934 375207
## - Programa 2 88861 6645805 375634
## - Ano 1 1241197 7798140 389471
# Comparar ambos modelos lado a lado
summary(modelo_seleccionado)
##
## Call:
## lm(formula = valor_por_hogar ~ Hogares + Ano + Programa, data = datos_finales)
##
## Residuals:
## Min 1Q Median 3Q Max
## -30.142 -4.840 -0.615 2.973 93.421
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.738e+03 1.368e+01 -127.031 < 2e-16 ***
## Hogares 2.175e-02 8.001e-04 27.181 < 2e-16 ***
## Ano 8.714e-01 6.809e-03 127.975 < 2e-16 ***
## ProgramaMI CASA YA -5.036e-01 1.261e-01 -3.992 6.55e-05 ***
## ProgramaOtros -2.617e+00 1.165e-01 -22.477 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.706 on 86519 degrees of freedom
## Multiple R-squared: 0.2591, Adjusted R-squared: 0.2591
## F-statistic: 7565 on 4 and 86519 DF, p-value: < 2.2e-16
Modelo Adoptado: Se decide adoptar el Modelo Inicial Propuesto (el cual coincide idénticamente con el Modelo Seleccionado Automáticamente por AIC).
Justificación: 1. Sustento Estadístico Concluyente: El criterio matemático computacional confirmó de forma explícita que ninguna de las covariables incorporadas originalmente presentaba redundancia, sobreajuste o ruido estadístico. La penalización informativa por conservar la complejidad del modelo fue nula, demostrando que remover cualquier predictor degrada la calidad analítica general del sistema (incrementando el AIC). 2. Robustez e Inferencia: Al coincidir el criterio econométrico de selección teórica con la optimización algorítmica puramente empírica, el modelo queda blindado metodológicamente. Esto asegura que la combinación de variables es estructuralmente sólida, parsimoniosa y adecuada para estimar los determinantes del valor asignado por hogar dentro de la base de datos masiva de FONVIVIENDA.
# 1. Estimación del modelo extendido con término cuadrático e interacción
# Evaluamos el efecto cuadrático del año y si el impacto del año cambia según el programa
modelo_extendido <- lm(valor_por_hogar ~ Hogares + Ano + I(Ano^2) + Programa + Ano:Programa,
data = datos_finales)
# 2. Resumen estadístico del modelo extendido
summary(modelo_extendido)
##
## Call:
## lm(formula = valor_por_hogar ~ Hogares + Ano + I(Ano^2) + Programa +
## Ano:Programa, data = datos_finales)
##
## Residuals:
## Min 1Q Median 3Q Max
## -25.213 -4.289 -0.604 2.607 101.246
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.016e+05 4.533e+03 -88.594 < 2e-16 ***
## Hogares 1.468e-02 7.252e-04 20.238 < 2e-16 ***
## Ano 3.983e+02 4.508e+00 88.351 < 2e-16 ***
## I(Ano^2) -9.873e-02 1.121e-03 -88.101 < 2e-16 ***
## ProgramaMI CASA YA -5.780e+03 7.184e+01 -80.451 < 2e-16 ***
## ProgramaOtros -2.206e+02 5.634e+01 -3.915 9.04e-05 ***
## Ano:ProgramaMI CASA YA 2.863e+00 3.569e-02 80.209 < 2e-16 ***
## Ano:ProgramaOtros 1.098e-01 2.804e-02 3.917 8.97e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.859 on 86516 degrees of freedom
## Multiple R-squared: 0.3963, Adjusted R-squared: 0.3962
## F-statistic: 8112 on 7 and 86516 DF, p-value: < 2.2e-16
# 3. Comparación formal de modelos mediante Criterio de Información de Akaike (AIC)
AIC(modelo_base)
## [1] 620020.1
AIC(modelo_extendido)
## [1] 602314.1
# 4. Prueba formal de hipótesis anidadas (ANOVA)
anova(modelo_base, modelo_extendido)
## Analysis of Variance Table
##
## Model 1: valor_por_hogar ~ Hogares + Ano + Programa
## Model 2: valor_por_hogar ~ Hogares + Ano + I(Ano^2) + Programa + Ano:Programa
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 86519 6556943
## 2 86516 5343171 3 1213773 6551.1 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Los resultados demuestran de forma concluyente que el Modelo Extendido es teórica y estadísticamente superior. La política habitacional en Colombia es compleja y dinámica; el análisis evidencia que modelar los subsidios asumiendo que el tiempo impacta con la misma fuerza a todos los programas por igual (linealidad estricta) constituye un sesgo de especificación. El modelo extendido no solo optimiza el ajuste estadístico y reduce la varianza residual (\(RSS\) disminuye de \(6.55\) a \(5.34\) millones), sino que dota al reporte de una lectura institucional mucho más fiel a la evolución histórica y regulatoria de los subsidios en el país.
# 1. Estimación del modelo restringido sin intercepto (+ 0) basado en el modelo base
modelo_sin_intercepto <- lm(valor_por_hogar ~ 0 + Hogares + Ano + Programa,
data = datos_finales)
# 2. Resumen estadístico del modelo sin intercepto
summary(modelo_sin_intercepto)
##
## Call:
## lm(formula = valor_por_hogar ~ 0 + Hogares + Ano + Programa,
## data = datos_finales)
##
## Residuals:
## Min 1Q Median 3Q Max
## -30.142 -4.840 -0.615 2.973 93.421
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## Hogares 2.175e-02 8.001e-04 27.18 <2e-16 ***
## Ano 8.714e-01 6.809e-03 127.97 <2e-16 ***
## ProgramaBolsa Desplazados -1.738e+03 1.368e+01 -127.03 <2e-16 ***
## ProgramaMI CASA YA -1.738e+03 1.376e+01 -126.34 <2e-16 ***
## ProgramaOtros -1.740e+03 1.373e+01 -126.76 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.706 on 86519 degrees of freedom
## Multiple R-squared: 0.847, Adjusted R-squared: 0.847
## F-statistic: 9.583e+04 on 5 and 86519 DF, p-value: < 2.2e-16
# 3. Comparación de coeficientes y métricas de ajuste
summary(modelo_base)$r.squared
## [1] 0.2591122
summary(modelo_sin_intercepto)$r.squared
## [1] 0.8470465
summary(modelo_base)$sigma
## [1] 8.705525
summary(modelo_sin_intercepto)$sigma
## [1] 8.705525
Al suprimir explícitamente el intercepto (0 +) en presencia de la variable cualitativa Programa, el software R modifica la matriz de diseño para evitar la trampa de la dummy. En lugar de omitir una categoría como referencia, el algoritmo calcula un intercepto propio para cada uno de los niveles del factor. Los resultados demuestran una equivalencia matemática perfecta con el modelo base: * ProgramaBolsa Desplazados (\(\hat{\beta} = -1738\)): Absorbe exactamente el valor del intercepto original del modelo base (\(\hat{\beta}_0 = -1737.63\)), actuando como la constante base para esta población vulnerable. * ProgramaMI CASA YA (\(\hat{\beta} = -1738\)): Equivale a la suma matemática del intercepto original y su coeficiente diferencial del punto 11 (\(-1737.631 - 0.5035 = -1738.13\)). * Pendientes cuantitativas (Hogares y Ano): Conservan de manera idéntica sus valores de pendiente (\(\hat{\beta}{Hogares} = 0.02175\) y \(\hat{\beta}{Ano} = 0.8714\)) y sus estadísticos \(t\).
Dado que las variables explicativas continuas (especialmente el tiempo cronológico en años) no poseen un cero absoluto con sentido institucional, el modelo no está pasando realmente por el origen \((0,0,0,0)\), sino que ha dummificado por completo los interceptos. Por lo tanto, teóricamente no se está estimando un modelo sin intercepto genuino, sino una re-parametrización geométrica del mismo sistema.
Al contrastar las métricas de ajuste provistas por la consola, se evidencia una aparente contradicción: * El coeficiente de determinación da un salto drástico, pasando de un \(R^2 = 0.2591122\) en el modelo base a un \(R^2 = 0.8470465\) (\(84.70\%\)) en el modelo sin intercepto. * Sin embargo, el Error Estándar de los Residuos (\(\hat{\sigma}\)) es exactamente idéntico en ambos modelos: 8.705525. Los residuos muestran la misma distribución matemática exacta (Min: -30.142, Median: -0.615, Max: 93.421).
Explicación Econométrica: El incremento masivo del \(R^2\) al \(84.70\%\) es una *ilusión matemática. Cuando R detecta que el modelo se especifica formalmente “sin intercepto”, el software se ve obligado a cambiar la fórmula de cálculo del coeficiente de determinación. En lugar de usar la suma de cuadrados tradicional centrada respecto a la media de la variable dependiente (\(\bar{Y}\)), utiliza la suma de cuadrados no centrada respecto al origen. Al no restar la media, el valor del numerador se infla de forma artificial. El hecho de que el error estándar de los residuos (\(\hat{\sigma} = 8.705525\)) permanezca inalterado demuestra que **la capacidad predictiva real y el ajuste del modelo sobre los datos de FONVIVIENDA no mejoraron en lo absoluto.*
Se decide mantener la estructura del Modelo con Intercepto del Punto 11 (o el Modelo Extendido del Punto 15 si se prefiere mayor varianza explicada). Aunque computacionalmente ambos sistemas arrojan los mismos errores, la especificación clásica con constante y categoría omitida es metodológicamente preferible en la investigación económica: evita interpretaciones confusas basadas en falsos incrementos de bondad de ajuste (\(R^2\)), mantiene la métrica centrada estándar de la literatura y se alinea con la presentación tradicional de modelos de política pública.
# 1. Calcular las métricas de diagnóstico de influencia
leverage <- hatvalues(modelo_base)
residuos_est <- rstandard(modelo_base)
distancia_cook <- cooks.distance(modelo_base)
# Definir umbrales para muestras masivas (n = 86524, k = 5 parameters)
n <- nrow(datos_finales)
k <- length(coef(modelo_base))
umbral_cook <- 4 / n
# 2. Identificar observaciones influyentes según la Distancia de Cook
influyentes_idx <- which(distancia_cook > umbral_cook)
cat("Número de observaciones influyentes detectadas (Cook > 4/n):", length(influyentes_idx), "\n")
## Número de observaciones influyentes detectadas (Cook > 4/n): 4127
# 3. Crear un nuevo dataset excluyendo los datos influyentes
datos_sin_influencia <- datos_finales[-influyentes_idx, ]
# 4. Reestimar el modelo en limpio usando el dataset sin observaciones influyentes
modelo_robusto <- lm(valor_por_hogar ~ Hogares + Ano + Programa, data = datos_sin_influencia)
# 5. Comparar los resúmenes estadísticos de ambos modelos
summary(modelo_base)
##
## Call:
## lm(formula = valor_por_hogar ~ Hogares + Ano + Programa, data = datos_finales)
##
## Residuals:
## Min 1Q Median 3Q Max
## -30.142 -4.840 -0.615 2.973 93.421
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.738e+03 1.368e+01 -127.031 < 2e-16 ***
## Hogares 2.175e-02 8.001e-04 27.181 < 2e-16 ***
## Ano 8.714e-01 6.809e-03 127.975 < 2e-16 ***
## ProgramaMI CASA YA -5.036e-01 1.261e-01 -3.992 6.55e-05 ***
## ProgramaOtros -2.617e+00 1.165e-01 -22.477 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.706 on 86519 degrees of freedom
## Multiple R-squared: 0.2591, Adjusted R-squared: 0.2591
## F-statistic: 7565 on 4 and 86519 DF, p-value: < 2.2e-16
summary(modelo_robusto)
##
## Call:
## lm(formula = valor_por_hogar ~ Hogares + Ano + Programa, data = datos_sin_influencia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11.5685 -4.6155 -0.4233 3.4037 26.3042
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.518e+03 8.834e+00 -171.854 <2e-16 ***
## Hogares 3.040e-02 9.201e-04 33.038 <2e-16 ***
## Ano 7.621e-01 4.398e-03 173.292 <2e-16 ***
## ProgramaMI CASA YA 7.862e-01 8.060e-02 9.754 <2e-16 ***
## ProgramaOtros -5.797e+00 7.459e-02 -77.722 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.441 on 82392 degrees of freedom
## Multiple R-squared: 0.5341, Adjusted R-squared: 0.534
## F-statistic: 2.361e+04 on 4 and 82392 DF, p-value: < 2.2e-16
Al aplicar un umbral estricto adaptado para bases de datos masivas (\(4/n \approx 0.0000462\)), el diagnóstico identificó \(4,127\) observaciones influyentes bajo la métrica de la Distancia de Cook. Al analizar la distribución de los residuos del modelo base, se constata que los errores alcanzaban valores extremos (con un residuo máximo de \(+93.42\) millones de COP). Tras remover estas observaciones distorsionantes, el residuo máximo se contrajo a un rango técnicamente más razonable (\(+26.30\) millones de COP), saneando la dispersión de la muestra para reflejar el comportamiento de la gran mayoría de la población beneficiaria de FONVIVIENDA.
Al reestimar el modelo mediante MCO sobre el dataset limpio (datos_sin_influencia), se evidencian transformaciones econométricas drásticas:
Los hallazgos demuestran con contundencia que el Modelo Robusto es analíticamente superior y metodológicamente el adecuado para la toma de decisiones. En bases de datos de política social masivas, suelen filtrarse registros administrativos anómalos o coyunturales (macroproyectos excepcionales de vivienda, giros extraordinarios extemporáneos o subsidios unifamiliares con montos atípicos por órdenes judiciales) que distorsionan gravemente las estimaciones estructurales.
Haber mantenido las observaciones influyentes generaba un sesgo de especificación que desvirtuaba por completo la naturaleza del programa Mi Casa Ya, haciéndolo ver menos eficiente de lo que realmente es. La depuración mediante la Distancia de Cook no solo devolvió la coherencia teórica e institucional al modelo, sino que estabilizó los parámetros para ofrecer una lectura limpia, parsimoniosa y matemáticamente rigurosa de los determinantes reales de los subsidios en Colombia.
Conclusión y Recomendaciones de Política Pública
A. Conclusión Integral El análisis econométrico desarrollado permitió identificar los determinantes estructurales del valor promedio del subsidio de vivienda por hogar en Colombia, utilizando datos oficiales de FONVIVIENDA. A partir de un proceso secuencial de modelamiento por MCO, validación de supuestos y depuración estadística, se logró establecer que el año de asignación, el número de hogares beneficiarios y el tipo de programa son predictores significativos del monto otorgado.
El hallazgo más relevante surgió al contrastar el modelo base con el Modelo Robusto (obtenido tras excluir 4,127 observaciones influyentes mediante la Distancia de Cook). Este procedimiento no solo mejoró sustancialmente el ajuste global —elevando el R² del 25.9% al 53.4%—, sino que también corrigió un sesgo de especificación que distorsionaba la lectura de la política pública. En particular, el coeficiente del programa MI CASA YA pasó de ser negativo (−0.504) a positivo (+0.786), evidenciando que, una vez depurada la muestra de asignaciones atípicas, este programa otorga, en promedio, un mayor valor monetario por hogar que la categoría de referencia (Bolsa Desplazados). Además, se confirmó una indexación temporal positiva (β = 0.762), que refleja el esfuerzo del Estado por ajustar los subsidios ante la inflación del sector constructor, y se validaron pequeñas ventajas de escala en adjudicaciones multifamiliares (β = 0.0304).
En conjunto, los resultados demuestran que el modelo robusto ofrece una lectura más fiel y coherente de los determinantes del gasto social en vivienda, consolidándose como una herramienta técnica útil para la planificación y evaluación de la política habitacional en Colombia.
B. Recomendaciones de Política Pública Con base en la evidencia empírica obtenida, se formulan las siguientes recomendaciones:
Fortalecimiento y blindaje presupuestal de MI CASA YA: Dado que el modelo robusto muestra que este programa transfiere un mayor valor real por hogar en comparación con otras líneas, se recomienda priorizarlo como eje central de la política de vivienda de interés social (VIS), garantizando la estabilidad de sus recursos a mediano plazo para reducir la incertidumbre en la asignación de subsidios.
Revisión de los programas agrupados en “Otros”: Esta categoría presentó una penalización diferencial severa (−5.797 millones de COP frente a la base). Se sugiere realizar una auditoría operativa para identificar si el bajo monto obedece a problemas de focalización, condiciones geográficas adversas o topes legales desactualizados, con el fin de reestructurar su esquema de asignación.
Indexación automática de topes al Índice de Precios de la Vivienda (IPV): El coeficiente temporal positivo (∼$762 mil COP adicionales por año) indica que el Estado ajusta los subsidios ante el paso del tiempo. No obstante, para evitar rezagos, se recomienda diseñar una fórmula de indexación técnica ligada directamente al IPV o a los costos de construcción (ICDV), permitiendo una respuesta más ágil ante choques inflacionarios.
Mejora en la depuración de registros administrativos: La identificación de un 4.7% de observaciones influyentes (con residuos superiores a 93 millones de COP) resalta la necesidad de fortalecer los mecanismos de control y clasificación de la información en FONVIVIENDA. Se propone catalogar explícitamente las asignaciones extraordinarias (por fallos judiciales, desastres naturales o macroproyectos) para que los evaluadores de política pública dispongan de series históricas limpias y comparables, libres de anomalías procedimentales.