# Base completa filtrada: solo casas de la zona norte
base1 <- vivienda %>%
filter(tipo == "Casa", zona == "Zona Norte")
# Mostrar cantidad de registros
nrow(base1)
La base de datos original vivienda corresponde a una tabla con 8.322 registros y 13 variables, que contiene información sobre ofertas inmobiliarias en Cali, incluyendo características físicas de los inmuebles, localización, precio y coordenadas geográficas.
Para atender el primer requerimiento del análisis, se aplicó un filtro orientado a seleccionar exclusivamente las viviendas de tipo Casa ubicadas en la Zona Norte, obteniéndose como resultado una subbase denominada base1 con 722 registros. Esta depuración permite concentrar el análisis en un segmento específico del mercado inmobiliario, coherente con las condiciones planteadas en el caso, y constituye la base de trabajo para las estimaciones y validaciones posteriores.
La revisión de los tres primeros registros permite observar que esta subbase conserva variables clave para el análisis, como estrato, precio, área construida, número de parqueaderos, baños, habitaciones, barrio y coordenadas geográficas. Adicionalmente, las tablas de comprobación confirman la validez de la consulta realizada, evidenciando que el 100% de los registros de base1 pertenece a la categoría Casa y se encuentra clasificado en la Zona Norte, lo que garantiza la consistencia del filtro aplicado y la pertinencia de esta base para el desarrollo de los siguientes pasos del ejercicio (Ver Tabla 1).
# Primeros 3 registros
base1 %>%
head(3) %>%
knitr::kable(
caption = "Tabla 1. Primeros 3 registros de viviendas tipo casa en la zona norte",
col.names = c(
"ID", "Zona", "Piso", "Estrato", "Precio (millones)",
"Área construida", "Parqueaderos", "Baños", "Habitaciones",
"Tipo", "Barrio", "Longitud", "Latitud"
),
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| ID | Zona | Piso | Estrato | Precio (millones) | Área construida | Parqueaderos | Baños | Habitaciones | Tipo | Barrio | Longitud | Latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1209 | Zona Norte | 02 | 5 | 320 | 150 | 2 | 4 | 6 | Casa | acopi | -76.51341 | 3.47968 |
| 1592 | Zona Norte | 02 | 5 | 780 | 380 | 2 | 3 | 3 | Casa | acopi | -76.51674 | 3.48721 |
| 4057 | Zona Norte | 02 | 6 | 750 | 445 | NA | 7 | 6 | Casa | acopi | -76.52950 | 3.38527 |
La tabla de comprobación confirma que, tras aplicar los criterios de filtrado, la base de análisis quedó conformada exclusivamente por 722 registros correspondientes a viviendas de tipo casa ubicadas en la Zona Norte, lo que evidencia consistencia entre las condiciones definidas para la selección y la estructura final de los datos utilizados en el análisis (Ver Tabla 2).
# Tablas de comprobación
tabla_comprobacion <- data.frame(
Variable = c("Tipo", "Zona"),
Categoria = c(unique(base1$tipo), unique(base1$zona)),
Frecuencia = c(sum(!is.na(base1$tipo)), sum(!is.na(base1$zona)))
)
tabla_comprobacion %>%
knitr::kable(
caption = "Tabla 2. Comprobación de los filtros aplicados",
col.names = c("Variable", "Categoría", "Frecuencia"),
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| Variable | Categoría | Frecuencia |
|---|---|---|
| Tipo | Casa | 722 |
| Zona | Zona Norte | 722 |
El mapa de dispersión de las viviendas filtradas como casas en la Zona Norte muestra una concentración importante de puntos en un sector espacial relativamente compacto, lo que respalda en términos generales la consistencia del filtro aplicado.
No obstante, también se observan varios registros dispersos por fuera del núcleo principal, especialmente en latitudes más bajas, lo que sugiere que no todos los inmuebles se ubican visualmente en una misma área homogénea. Esta situación puede explicarse por diferencias entre la zonificación comercial y la delimitación geográfica real, por posibles errores en el registro de coordenadas o por la inclusión de sectores limítrofes clasificados administrativamente dentro de la Zona Norte. En consecuencia, aunque el filtro por categoría es correcto según la base, la validación espacial sugiere revisar algunos registros atípicos si se requiere mayor precisión territorial (ver gráfico 1).
# Mapa de puntos
library(leaflet)
leaflet(base1) %>%
addTiles() %>%
setView(
lng = mean(base1$longitud, na.rm = TRUE),
lat = mean(base1$latitud, na.rm = TRUE),
zoom = 12
) %>%
addCircleMarkers(
lng = ~longitud,
lat = ~latitud,
radius = 4,
color = "blue",
stroke = FALSE,
fillOpacity = 0.5,
popup = ~paste0(
"<b>Barrio:</b> ", barrio, "<br>",
"<b>Precio:</b> ", preciom, " millones<br>",
"<b>Área:</b> ", areaconst, " m²<br>",
"<b>Estrato:</b> ", estrato, "<br>",
"<b>Habitaciones:</b> ", habitaciones, "<br>",
"<b>Baños:</b> ", banios, "<br>",
"<b>Parqueaderos:</b> ", parqueaderos
)
)
La Tabla 3, evidencia una alta heterogeneidad en las características de las viviendas analizadas. En términos de precio, se observa un rango amplio entre 89 y 1.940 millones de pesos, con una mediana de 390 millones y una media de 445,9 millones, lo que sugiere la presencia de inmuebles de mayor valor que elevan el promedio.
De manera similar, el área construida presenta una variabilidad considerable, con valores entre 30 m² y 1.440 m², una mediana de 240 m² y una media de 264,9 m², indicando también una distribución sesgada hacia viviendas de mayor tamaño.
En cuanto a las características físicas, predominan viviendas de estrato 4, con una concentración entre los estratos 3 y 5, mientras que el número típico de baños y habitaciones se sitúa en 3 baños y 4 habitaciones, respectivamente.
En conjunto, estos resultados muestran que la base está compuesta principalmente por casas de tamaño medio a grande, ubicadas en estratos medios y altos, aunque con presencia de casos extremos que reflejan diversidad en la oferta inmobiliaria de la Zona Norte.
tabla_resumen <- data.frame(
Estadistico = c("Mínimo", "1er cuartil", "Mediana", "Media", "3er cuartil", "Máximo"),
`Precio (millones)` = as.numeric(summary(base1$preciom)),
`Área construida` = as.numeric(summary(base1$areaconst)),
Estrato = as.numeric(summary(base1$estrato)),
Baños = as.numeric(summary(base1$banios)),
Habitaciones = as.numeric(summary(base1$habitaciones))
)
tabla_resumen %>%
knitr::kable(
caption = "Tabla 3. Resumen descriptivo de las variables numéricas seleccionadas",
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| Estadistico | Precio..millones. | Área.construida | Estrato | Baños | Habitaciones |
|---|---|---|---|---|---|
| Mínimo | 89.0000 | 30.0000 | 3.000000 | 0.000000 | 0.000000 |
| 1er cuartil | 261.2500 | 140.0000 | 3.000000 | 2.000000 | 3.000000 |
| Mediana | 390.0000 | 240.0000 | 4.000000 | 3.000000 | 4.000000 |
| Media | 445.9058 | 264.8505 | 4.202216 | 3.555402 | 4.506925 |
| 3er cuartil | 550.0000 | 336.7500 | 5.000000 | 4.000000 | 5.000000 |
| Máximo | 1940.0000 | 1440.0000 | 6.000000 | 10.000000 | 10.000000 |
La matriz de correlaciones, presentada en la Tabla 4, muestra que la variable con mayor asociación lineal con el precio de la vivienda es el área construida (r = 0,731), lo que indica una relación positiva fuerte: en general, a mayor tamaño de la vivienda, mayor es su precio. También se observa una correlación positiva importante entre precio y estrato (r = 0,612), lo que sugiere que las viviendas ubicadas en estratos más altos tienden a tener mayor valor. En menor medida, el precio también se relaciona con el número de baños (r = 0,523) y de habitaciones (r = 0,323), aunque estas asociaciones son moderadas y débiles, respectivamente.
Por otra parte, entre las variables explicativas se destaca la relación entre baños y habitaciones (r = 0,576), lo que resulta coherente dado que las viviendas con más habitaciones suelen requerir también más baños. Asimismo, el área construida presenta asociaciones moderadas con estrato (r = 0,457) y baños (r = 0,463).
En conjunto, estos resultados sugieren que el precio de las casas en la Zona Norte está explicado principalmente por características estructurales, especialmente el tamaño del inmueble, seguido por factores de calidad del entorno socioeconómico, como el estrato.
base_cor <- base1 %>%
select(preciom, areaconst, estrato, banios, habitaciones) %>%
drop_na()
matriz_cor <- cor(base_cor)
matriz_cor %>%
round(3) %>%
as.data.frame() %>%
tibble::rownames_to_column("Variable") %>%
knitr::kable(
caption = "Tabla 4. Matriz de correlación entre variables numéricas seleccionadas",
col.names = c(
"Variable", "Precio (millones)", "Área construida",
"Estrato", "Baños", "Habitaciones"
),
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| Variable | Precio (millones) | Área construida | Estrato | Baños | Habitaciones |
|---|---|---|---|---|---|
| preciom | 1.000 | 0.731 | 0.612 | 0.523 | 0.323 |
| areaconst | 0.731 | 1.000 | 0.457 | 0.463 | 0.375 |
| estrato | 0.612 | 0.457 | 1.000 | 0.408 | 0.107 |
| banios | 0.523 | 0.463 | 0.408 | 1.000 | 0.576 |
| habitaciones | 0.323 | 0.375 | 0.107 | 0.576 | 1.000 |
El gráfico 2, muestra una relación positiva clara entre el área construida y el precio de las viviendas en la subbase de casas de la Zona Norte: en términos generales, a mayor área, mayor tiende a ser el valor de oferta. Sin embargo, la nube de puntos también evidencia que esta relación no es perfectamente lineal, ya que para áreas similares existen diferencias importantes en el precio, lo que indica que intervienen otros factores adicionales en la valoración del inmueble.
Al observar el color de los puntos, se aprecia que las viviendas de estratos más altos (5 y 6) se concentran con mayor frecuencia en los rangos superiores de precio, mientras que los estratos 3 y 4 aparecen más asociados a valores intermedios y bajos.
Asimismo, el tamaño de los puntos sugiere que un mayor número de habitaciones también suele estar vinculado con precios más elevados, aunque este efecto se presenta de forma conjunta con el área y el estrato.
Finalmente, se identifican algunos valores atípicos, correspondientes a viviendas con áreas muy grandes o precios excepcionalmente altos, lo que confirma la existencia de heterogeneidad dentro del mercado inmobiliario de la Zona Norte y respalda la necesidad de emplear modelos multivariados en los siguientes pasos del análisis.
g6 <- plot_ly(
data = base1,
x = ~areaconst,
y = ~preciom,
type = "scatter",
mode = "markers",
color = ~as.factor(estrato),
size = ~habitaciones,
sizes = c(8, 25),
text = ~paste("Barrio:", barrio,
"<br>Área:", areaconst,
"<br>Precio:", preciom,
"<br>Estrato:", estrato,
"<br>Habitaciones:", habitaciones,
"<br>Baños:", banios),
hoverinfo = "text"
) %>%
layout(
title = list(
text = "Gráfico 2. Precio vs área construida, coloreado por estrato y tamaño por habitaciones",
x = 0.02
),
margin = list(t = 90),
xaxis = list(title = "Área construida"),
yaxis = list(title = "Precio (millones)")
)
g6
\[ \hat{Precio} = -238.17 + 0.6767(\text{Área construida}) + 80.63(\text{Estrato}) + 7.65(\text{Habitaciones}) + 24.01(\text{Parqueaderos}) + 18.90(\text{Baños}) \] Los resultados muestran que, manteniendo constantes las demás variables, el área construida, el estrato, el número de parqueaderos y el número de baños presentan coeficientes positivos y estadísticamente significativos, mientras que el número de habitaciones no resulta significativo al 5%.
En particular, el coeficiente de área construida fue de 0,6767, con un valor p menor a 0,001, lo que indica que por cada unidad adicional de área construida, el precio de la vivienda aumenta en promedio 0,68 millones de pesos, manteniendo fijas las demás variables. Este resultado es plenamente lógico, ya que el tamaño del inmueble es uno de los principales determinantes de su valor de mercado.
Por su parte, el coeficiente del estrato fue de 80,63, también altamente significativo, lo que significa que aumentar en un nivel de estrato se asocia con un incremento promedio de 80,63 millones de pesos en el precio de la vivienda, ceteris paribus. Este resultado también es coherente con la dinámica inmobiliaria, dado que un mayor estrato suele reflejar mejores condiciones del entorno urbano, mayor valorización y mejor percepción del sector.
El coeficiente del número de parqueaderos fue de 24,01 y resultó estadísticamente significativo, lo que sugiere que cada parqueadero adicional incrementa en promedio el precio de la casa en 24 millones de pesos, manteniendo constantes las demás características. Este hallazgo es razonable en un segmento residencial de zona norte, donde disponer de espacios de estacionamiento constituye un atributo valorado.
De igual forma, el coeficiente del número de baños fue de 18,90, significativo al 5%, lo que indica que cada baño adicional se asocia con un aumento promedio de 18,9 millones de pesos en el valor de la vivienda. Este resultado también es consistente con la lógica del mercado, ya que una mayor cantidad de baños suele relacionarse con mayor comodidad, tamaño y nivel de equipamiento del inmueble.
En contraste, el coeficiente del número de habitaciones fue de 7,65, pero su valor p de 0,1774 indica que no es estadísticamente significativo al nivel del 5%. Esto significa que, una vez controlado el efecto del área construida, el estrato, los baños y los parqueaderos, no hay evidencia suficiente para afirmar que una habitación adicional produzca un cambio sistemático en el precio. Este resultado también puede considerarse lógico, ya que el efecto del número de habitaciones podría estar siendo absorbido por variables como el área construida y el número de baños, que reflejan de forma más completa la amplitud y calidad de la vivienda.
El intercepto estimado fue de -238,17 y resultó significativo. Sin embargo, su interpretación práctica es limitada, porque representa el precio esperado de una vivienda cuando todas las variables explicativas toman valor cero, una situación que no tiene sentido real en este contexto. Por tanto, el intercepto se entiende principalmente como un parámetro de ajuste matemático del modelo y no como un resultado sustantivo.
El modelo de regresión lineal múltiple evidencia que el precio de las casas en la Zona Norte está explicado principalmente por el área construida, el estrato, el número de parqueaderos y el número de baños, variables que presentan efectos positivos y estadísticamente significativos. En particular, el área construida y el estrato destacan como los factores de mayor peso explicativo, lo que resulta consistente con la lógica del mercado inmobiliario. En contraste, el número de habitaciones no mostró significancia estadística, lo que sugiere que su efecto está parcialmente capturado por otras variables estructurales del inmueble, especialmente el área construida. En términos generales, los resultados son lógicos y muestran que las características físicas y socioeconómicas del entorno inciden de manera importante en la formación del precio de la vivienda.
# Seleccionar variables del modelo y quitar faltantes
base_modelo <- base1 %>%
select(preciom, areaconst, estrato, habitaciones, parqueaderos, banios) %>%
na.omit()
# Estimar modelo de regresión lineal múltiple
modelo_m1 <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios,
data = base_modelo)
summary(modelo_m1)
resumen_modelo <- as.data.frame(summary(modelo_m1)$coefficients) %>%
tibble::rownames_to_column("Variable")
colnames(resumen_modelo) <- c(
"Variable",
"Estimación",
"Error estándar",
"Valor t",
"Valor p"
)
resumen_modelo %>%
knitr::kable(
caption = "Tabla 5. Resultados del modelo de regresión lineal múltiple",
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| Variable | Estimación | Error estándar | Valor t | Valor p |
|---|---|---|---|---|
| (Intercept) | -238.1708979 | 44.4055069 | -5.363544 | 0.0000001 |
| areaconst | 0.6767346 | 0.0528121 | 12.814001 | 0.0000000 |
| estrato | 80.6349477 | 9.8263227 | 8.206015 | 0.0000000 |
| habitaciones | 7.6451100 | 5.6587338 | 1.351028 | 0.1773984 |
| parqueaderos | 24.0059798 | 5.8688857 | 4.090381 | 0.0000514 |
| banios | 18.8993776 | 7.4880029 | 2.523954 | 0.0119643 |
El modelo estimado presenta un R² de 0,6041 y un R² ajustado de 0,5995, lo que indica que aproximadamente el 60,4% de la variación observada en el precio de las casas de la Zona Norte es explicada de manera conjunta por las variables incluidas en el modelo: área construida, estrato, número de habitaciones, número de parqueaderos y número de baños. En términos prácticos, este resultado sugiere que el modelo tiene una capacidad explicativa moderadamente alta, pues logra capturar una proporción importante del comportamiento del precio de las viviendas. Sin embargo, también implica que cerca del 39,6% de la variabilidad permanece sin explicar, lo que puede atribuirse a otros factores no incorporados en la estimación, como el barrio específico, la antigüedad del inmueble, el estado de conservación, los acabados, la ubicación exacta dentro de la zona, la seguridad del sector, la cercanía a servicios y otros atributos del entorno.
El hecho de que el R² ajustado (0,5995) sea muy cercano al R² (0,6041) indica que las variables incluidas en el modelo, en conjunto, aportan información relevante y que no se está inflando artificialmente la capacidad explicativa por exceso de predictores. Además, la prueba F global del modelo fue altamente significativa (F = 130,9; p < 2,2e-16), lo que permite concluir que, como conjunto, las variables explicativas sí contribuyen de manera significativa a explicar el precio de la vivienda. Esto respalda la pertinencia estadística del modelo y confirma que existe una relación sistemática entre el precio y las características estructurales consideradas.
No obstante, el ajuste del modelo no debe considerarse perfecto. El error estándar residual de 155,1 millones de pesos sugiere que, aunque el modelo explica bien la tendencia general, todavía existen diferencias importantes entre los precios observados y los precios estimados. Esto es razonable en el mercado inmobiliario, donde el valor de una vivienda no depende solo de variables cuantitativas básicas, sino también de factores cualitativos y espaciales difíciles de capturar con un modelo lineal simple. Por tanto, el modelo puede considerarse adecuado como aproximación inicial, útil para entender los determinantes principales del precio, pero con espacio de mejora si se busca una predicción más precisa.
El ajuste del modelo podría mejorarse, en primer lugar, incorporando variables que ya están disponibles en la base de datos, como el barrio, el piso y la ubicación geográfica exacta mediante longitud y latitud, ya que estas pueden capturar mejor la heterogeneidad espacial del mercado inmobiliario.
Asimismo, si se trabajara con una base más amplia, la variable zona también podría aportar capacidad explicativa.Por otra parte, variables potencialmente relevantes como la antigüedad de la vivienda, el estado de conservación, los acabados y otras características del entorno no se encuentran en la base disponible, por lo que su incorporación requeriría información complementaria.
También sería conveniente explorar relaciones no lineales, especialmente en el área construida, ya que el efecto marginal del tamaño sobre el precio podría no ser constante. De igual forma, podrían evaluarse interacciones entre variables, por ejemplo entre estrato y área, o entre baños y habitaciones.
Finalmente, sería importante revisar los supuestos del modelo, en particular la homocedasticidad, normalidad de residuos y presencia de observaciones atípicas o influyentes, dado que el resumen de residuos muestra amplitudes considerables entre valores mínimos y máximos.
La validación gráfica de supuestos del modelo evidencia que el ajuste lineal es razonable, pero no perfecto. En el gráfico de residuos versus valores ajustados se observa una dispersión alrededor de cero sin una curvatura muy marcada, lo que sugiere que la forma lineal del modelo puede considerarse aceptable; sin embargo, la variabilidad de los residuos aumenta a medida que crecen los valores ajustados. Esta situación se confirma en el gráfico Scale-Location, donde se aprecia una tendencia ascendente clara, indicando heterocedasticidad, es decir, que el error no es constante y tiende a ser mayor en las viviendas de precio más alto.
Por su parte, el gráfico Q-Q muestra desviaciones importantes respecto a la línea teórica en los extremos, lo que sugiere que los residuos no siguen una distribución normal estricta, especialmente por la presencia de valores atípicos.
Finalmente, el gráfico de residuos versus leverage permite identificar algunas observaciones potencialmente influyentes, como los casos 309, 393 y 71, que podrían estar afectando parcialmente las estimaciones.
En conjunto, estos resultados indican que el modelo ofrece una aproximación útil para explicar el precio de las viviendas, pero presenta incumplimientos en los supuestos de normalidad y homocedasticidad, por lo que en futuros análisis sería recomendable explorar transformaciones de la variable respuesta, utilizar errores estándar robustos y revisar de manera particular las observaciones atípicas o de alta influencia.
Gráfico 3. Diagnóstico gráfico de los supuestos del Modelo
par(mfrow = c(2, 2))
plot(modelo_m1)
par(mfrow = c(1, 1))
Complementariamente a la inspección visual de los gráficos de diagnóstico, se procede a realizar pruebas estadísticas formales con el fin de evaluar de manera más precisa el cumplimiento de los supuestos del modelo. En particular, se aplican pruebas para examinar la normalidad de los residuos, la homocedasticidad, la independencia y la posible presencia de multicolinealidad entre las variables explicativas. Estas pruebas permiten respaldar con evidencia cuantitativa la interpretación gráfica previa y ofrecen una base más sólida para discutir la validez del modelo estimado.
La prueba de Shapiro-Wilk arrojó un estadístico W = 0,85246 con un valor p inferior a 2,2e-16, por lo que se rechaza la hipótesis nula de normalidad de los residuos. En consecuencia, existe evidencia estadística de que los errores del modelo no siguen una distribución normal.
Este resultado es consistente con lo observado previamente en el gráfico Q-Q, donde se identificaban desviaciones importantes respecto a la línea teórica, especialmente en los extremos de la distribución. Lo anterior sugiere la presencia de valores atípicos o colas más pesadas de lo esperado bajo normalidad.
No obstante, dado que se trabaja con una muestra relativamente amplia, este incumplimiento no invalida completamente el modelo para fines explicativos, aunque sí indica que en futuros análisis sería conveniente considerar alternativas como transformaciones de la variable respuesta o métodos más robustos frente a desviaciones de normalidad.
# Normalidad
shapiro.test(residuals(modelo_m1))
La prueba de Breusch-Pagan arrojó un estadístico BP = 80,281 con 5 grados de libertad y un valor p = 7,33e-16, por lo que se rechaza la hipótesis nula de homocedasticidad. Esto indica que los residuos del modelo presentan heterocedasticidad, es decir, la varianza del error no es constante a lo largo de los valores ajustados.
Este hallazgo coincide con lo observado en los gráficos de diagnóstico, especialmente en Residuals vs Fitted y Scale-Location, donde se evidenciaba un aumento en la dispersión de los residuos para viviendas con precios estimados más altos. En términos sustantivos, esto sugiere que el modelo tiende a cometer errores más grandes en inmuebles de mayor valor, algo que resulta plausible en el mercado inmobiliario, dado que las viviendas más costosas suelen presentar mayor heterogeneidad en atributos no observados.
Como recomendación metodológica futura podrían emplearse errores estándar robustos o explorar una transformación logarítmica del precio, con el fin de estabilizar la varianza y mejorar la inferencia del modelo.
# Homocedasticidad
bptest(modelo_m1)
Los valores del Factor de Inflación de la Varianza (VIF) para las variables explicativas del modelo fueron bajos: área construida = 1,46, estrato = 1,31, habitaciones = 1,72, parqueaderos = 1,23 y baños = 1,97. Dado que todos se encuentran muy por debajo de los umbrales comúnmente utilizados para señalar problemas de multicolinealidad, se concluye que no existe evidencia de colinealidad severa entre las variables independientes. Esto indica que los predictores no presentan una redundancia excesiva entre sí y que, en consecuencia, los coeficientes estimados del modelo pueden interpretarse con relativa estabilidad.
# Multicolinealidad
vif(modelo_m1)
La prueba de Durbin-Watson arrojó un estadístico DW = 1,7615 con un valor p = 0,005472, lo que indica evidencia estadística para rechazar la hipótesis nula de ausencia de autocorrelación y sugiere la presencia de autocorrelación positiva en los residuos del modelo.
Aunque el valor del estadístico se encuentra relativamente cercano a 2, el resultado de la prueba señala que los errores no serían completamente independientes. No obstante, este hallazgo debe interpretarse con cautela, ya que la prueba de Durbin-Watson es más habitual en contextos de series de tiempo, mientras que en este caso se trabaja con datos de corte transversal correspondientes a viviendas.
En este tipo de bases, una aparente dependencia en los residuos puede estar asociada a factores espaciales no incorporados en el modelo, como características compartidas entre inmuebles del mismo barrio o sectores cercanos. Por ello, más que una autocorrelación temporal en sentido estricto, el resultado podría reflejar dependencia espacial o agrupamientos no modelados.
Como sugerencia para futuros análisis, sería conveniente incorporar variables de localización más detalladas, como barrio, longitud y latitud, o incluso explorar enfoques de modelación espacial.
# Independencia
dwtest(modelo_m1)
El gráfico 4, de Distancia de Cook evidencia la presencia de algunas observaciones influyentes dentro de la muestra, ya que varios registros superan claramente el umbral de referencia y uno de ellos destaca de manera muy marcada sobre el resto. En particular, se observa un caso con una distancia de Cook superior a 1, lo que sugiere una influencia considerable sobre los coeficientes estimados del modelo.
Esto indica que ciertas viviendas, probablemente por presentar combinaciones atípicas de área, precio, baños o parqueaderos, están afectando de forma importante el ajuste general de la regresión. Aunque no se requiere corregir este aspecto en el presente ejercicio, estos resultados sugieren que en un análisis posterior sería conveniente revisar individualmente dichas observaciones para determinar si corresponden a errores de registro, inmuebles atípicos del mercado o casos válidos pero extremos.
En caso de confirmarse su influencia sustancial, podrían explorarse alternativas como análisis de sensibilidad, modelos robustos o estimaciones comparativas con y sin estos registros.
# Observaciones influyentes
cooksd <- cooks.distance(modelo_m1)
plot(cooksd, type = "h", main = "Gráfico 4. Distancia de Cook")
abline(h = 4/length(cooksd), lty = 2, col = "red")
A partir del modelo de regresión lineal múltiple estimado para casas ubicadas en la Zona Norte, se realizó la predicción del precio de la primera vivienda solicitada, caracterizada por un área construida de 200 m², 1 parqueadero, 2 baños y 4 habitaciones. La ecuación de predicción obtenida fue:
\[ \hat{Precio} = -238.1709 + 0.6767(\text{Área construida}) + 80.6349(\text{Estrato}) + 7.6451(\text{Habitaciones}) + 24.0060(\text{Parqueaderos}) + 18.8994(\text{Baños}) \]
Dado que el requerimiento establece que el inmueble puede pertenecer a estrato 4 o 5, se evaluaron dos escenarios. En el primer caso, suponiendo estrato 4, el precio estimado fue de 312,1 millones de pesos.
En el segundo caso, suponiendo estrato 5, el precio estimado fue de 392,7 millones de pesos. Estos resultados indican que la condición del estrato tiene un impacto importante sobre la valoración del inmueble, generando una diferencia cercana a 80,6 millones de pesos entre ambos escenarios, lo que coincide con el coeficiente estimado en el modelo.
Al comparar las predicciones con el crédito preaprobado de 350 millones de pesos, se observa que una vivienda con estas características sería financieramente viable si corresponde a estrato 4, ya que el valor estimado se ubica por debajo del monto disponible.
En cambio, si el inmueble pertenece a estrato 5, el precio esperado superaría el presupuesto estimado, lo que sugiere una menor viabilidad financiera bajo las condiciones actuales. En consecuencia, desde la perspectiva del modelo, la búsqueda debería priorizar viviendas de estrato 4 o, en caso de insistir en estrato 5, considerar ajustes en área o características del inmueble.
# Escenario 1: estrato 4
nueva_viv1_e4 <- data.frame(
areaconst = 200,
estrato = 4,
habitaciones = 4,
parqueaderos = 1,
banios = 2
)
predict(modelo_m1, newdata = nueva_viv1_e4)
# Escenario 2: estrato 5
nueva_viv1_e5 <- data.frame(
areaconst = 200,
estrato = 5,
habitaciones = 4,
parqueaderos = 1,
banios = 2
)
predict(modelo_m1, newdata = nueva_viv1_e5)
Al aplicar los criterios de búsqueda sobre la subbase de casas ubicadas en la Zona Norte, se identificaron 30 ofertas potenciales que cumplen con condiciones cercanas a la solicitud de la Vivienda 1 y, además, se mantienen dentro del límite presupuestal de 350 millones de pesos. Este resultado indica que existe una oferta suficiente en el mercado para atender el requerimiento planteado, permitiendo no solo seleccionar inmuebles viables desde el punto de vista financiero, sino también priorizar aquellos con mayor similitud respecto al perfil solicitado en términos de área construida, estrato, número de habitaciones, baños y parqueaderos.
# Ofertas potenciales para la Vivienda 1
ofertas_viv1 <- base1 %>%
filter(
estrato %in% c(4, 5),
preciom <= 350,
areaconst >= 150, areaconst <= 250,
habitaciones >= 3, habitaciones <= 5,
banios >= 2, banios <= 4,
parqueaderos >= 1
)
nrow(ofertas_viv1)
Se seleccionaron cinco ofertas que muestran un ajuste favorable frente al perfil de la Vivienda 1. El puntaje total se interpreta como una medida de distancia respecto al perfil de vivienda definido; por tanto, valores más bajos indican mayor cercanía al perfil deseado, mientras que valores más altos reflejan una mayor divergencia frente a las características objetivo (Ver Tabla 6).
top5_viv1 <- ofertas_viv1 %>%
mutate(
dist_area = abs(areaconst - 200),
dist_hab = abs(habitaciones - 4),
dist_banios = abs(banios - 2),
dist_parq = abs(parqueaderos - 1),
score_total = dist_area + 10 * dist_hab + 10 * dist_banios + 10 * dist_parq
) %>%
arrange(score_total, preciom) %>%
slice_head(n = 5)
top5_viv1 %>%
select(
id, barrio, estrato, preciom, areaconst,
parqueaderos, banios, habitaciones,
longitud, latitud, score_total
) %>%
knitr::kable(
caption = "Tabla 6. Cinco viviendas más cercanas al perfil de búsqueda definido",
col.names = c(
"ID", "Barrio", "Estrato", "Precio (millones)", "Área construida",
"Parqueaderos", "Baños", "Habitaciones",
"Longitud", "Latitud", "Puntaje total"
),
align = "c",
digits = 3
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| ID | Barrio | Estrato | Precio (millones) | Área construida | Parqueaderos | Baños | Habitaciones | Longitud | Latitud | Puntaje total |
|---|---|---|---|---|---|---|---|---|---|---|
| 1887 | vipasa | 5 | 340 | 203 | 2 | 3 | 4 | -76.518 | 3.483 | 23 |
| 1270 | el bosque | 5 | 350 | 203 | 2 | 2 | 5 | -76.514 | 3.485 | 23 |
| 1163 | la merced | 5 | 350 | 216 | 2 | 2 | 4 | -76.512 | 3.482 | 26 |
| 1343 | la flora | 5 | 320 | 200 | 2 | 4 | 4 | -76.515 | 3.489 | 30 |
| 1144 | la merced | 4 | 320 | 200 | 2 | 4 | 4 | -76.512 | 3.480 | 30 |
Con el fin de complementar el análisis de las ofertas seleccionadas, a continuación se presenta un mapa con la ubicación geográfica de las cinco viviendas potenciales identificadas para responder a la solicitud de la Vivienda 1. En esta visualización se muestran los inmuebles recomendados dentro de la Zona Norte de Cali, permitiendo observar su distribución espacial y su localización relativa en barrios como Vipasa, El Bosque, La Merced y La Flora. Esta representación facilita no solo la comparación de las opciones en términos de precio y características físicas, sino también su valoración desde una perspectiva territorial, elemento clave en la decisión final de compra (Ver gráfico 5).
Gráfico 5. Mapa de puntos: Top 5 viviendas potenciales
leaflet(top5_viv1) %>%
addTiles() %>%
setView(
lng = mean(top5_viv1$longitud),
lat = mean(top5_viv1$latitud),
zoom = 14
) %>%
addCircleMarkers(
lng = ~longitud,
lat = ~latitud,
radius = 7,
color = "red",
stroke = TRUE,
fillOpacity = 0.8,
popup = ~paste0(
"<b>Barrio:</b> ", barrio, "<br>",
"<b>Precio:</b> ", preciom, " millones<br>",
"<b>Área:</b> ", areaconst, " m²<br>",
"<b>Estrato:</b> ", estrato, "<br>",
"<b>Habitaciones:</b> ", habitaciones, "<br>",
"<b>Baños:</b> ", banios, "<br>",
"<b>Parqueaderos:</b> ", parqueaderos
)
)
Para atender el segundo requerimiento del análisis, se aplicó un filtro orientado a seleccionar exclusivamente las viviendas de tipo Apartamento ubicadas en la Zona Sur, obteniéndose como resultado una subbase denominada base2 con 2787 registros. Esta depuración permite concentrar el análisis en un segmento específico del mercado inmobiliario, coherente con las condiciones planteadas en el caso, y constituye la base de trabajo para las estimaciones y validaciones posteriores.
La revisión de los tres primeros registros permite observar que esta subbase conserva variables clave para el análisis, como estrato, precio, área construida, número de parqueaderos, baños, habitaciones, barrio y coordenadas geográficas. Adicionalmente, las tablas de comprobación confirman la validez de la consulta realizada, evidenciando que el 100% de los registros de esta subbase corresponde a viviendas de tipo Apartamento y se encuentra clasificado en la Zona Sur, lo que garantiza la consistencia del filtro aplicado y la pertinencia de esta base para el desarrollo de los siguientes pasos del ejercicio en relación con la Solicitud 2 (ver Tabla 7).
# Base completa filtrada: solo casas de la zona Sur
base2 <- vivienda %>%
filter(tipo == "Apartamento", zona == "Zona Sur")
# Mostrar cantidad de registros
nrow(base2)
# Primeros 3 registros
base2 %>%
head(3) %>%
knitr::kable(
caption = "Tabla 7. Primeros 3 registros de viviendas tipo Apartamento en la zona Sur",
col.names = c(
"ID", "Zona", "Piso", "Estrato", "Precio (millones)",
"Área construida", "Parqueaderos", "Baños", "Habitaciones",
"Tipo", "Barrio", "Longitud", "Latitud"
),
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| ID | Zona | Piso | Estrato | Precio (millones) | Área construida | Parqueaderos | Baños | Habitaciones | Tipo | Barrio | Longitud | Latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 5098 | Zona Sur | 05 | 4 | 290 | 96 | 1 | 2 | 3 | Apartamento | acopi | -76.53464 | 3.44987 |
| 698 | Zona Sur | 02 | 3 | 78 | 40 | 1 | 1 | 2 | Apartamento | aguablanca | -76.50100 | 3.40000 |
| 8199 | Zona Sur | NA | 6 | 875 | 194 | 2 | 5 | 3 | Apartamento | aguacatal | -76.55700 | 3.45900 |
La tabla de comprobación confirma que, tras aplicar los criterios de filtrado, la base de análisis quedó conformada exclusivamente por 2.787 registros correspondientes a viviendas de tipo Apartamento ubicadas en la Zona Sur, lo que evidencia consistencia entre las condiciones definidas para la selección y la estructura final de los datos utilizados en el análisis de la Solicitud 2 (ver Tabla 8).
# Tablas de comprobación
tabla_comprobacion <- data.frame(
Variable = c("Tipo", "Zona"),
Categoria = c(unique(base2$tipo), unique(base2$zona)),
Frecuencia = c(sum(!is.na(base2$tipo)), sum(!is.na(base2$zona)))
)
tabla_comprobacion %>%
knitr::kable(
caption = "Tabla 8. Comprobación de los filtros aplicados",
col.names = c("Variable", "Categoría", "Frecuencia"),
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| Variable | Categoría | Frecuencia |
|---|---|---|
| Tipo | Apartamento | 2787 |
| Zona | Zona Sur | 2787 |
El mapa de dispersión de las viviendas filtradas como apartamentos en la Zona Sur muestra una concentración amplia de puntos en el sector centro-sur de la ciudad, lo que respalda en términos generales la consistencia del filtro aplicado para la Solicitud 2. La distribución observada sugiere una presencia importante de oferta inmobiliaria en esta zona, con una densidad mayor en áreas urbanas consolidadas del sur de Cali.
No obstante, también se identifican algunos registros dispersos por fuera del núcleo principal de concentración, incluyendo puntos ubicados hacia sectores que visualmente podrían no corresponder de forma estricta con el sur geográfico de la ciudad. Esta situación puede explicarse por diferencias entre la clasificación comercial o administrativa de la variable zona y la delimitación espacial real del territorio, así como por posibles inconsistencias en el registro de coordenadas o por la inclusión de barrios limítrofes que, aunque se clasifican dentro de la Zona Sur, presentan ubicaciones cercanas a otros sectores urbanos. En consecuencia, aunque el filtro aplicado es consistente según la categorización de la base de datos, la validación espacial sugiere que algunos registros podrían revisarse con mayor detalle si se requiere una delimitación territorial más precisa (ver Gráfico 6).
Gráfico 6. Mapa de puntos: Apartamentos clasificados Zona Sur
# Mapa de puntos
library(leaflet)
leaflet(base2) %>%
addTiles() %>%
setView(
lng = mean(base2$longitud, na.rm = TRUE),
lat = mean(base2$latitud, na.rm = TRUE),
zoom = 12
) %>%
addCircleMarkers(
lng = ~longitud,
lat = ~latitud,
radius = 4,
color = "orange",
stroke = FALSE,
fillOpacity = 0.5,
popup = ~paste0(
"<b>Barrio:</b> ", barrio, "<br>",
"<b>Precio:</b> ", preciom, " millones<br>",
"<b>Área:</b> ", areaconst, " m²<br>",
"<b>Estrato:</b> ", estrato, "<br>",
"<b>Habitaciones:</b> ", habitaciones, "<br>",
"<b>Baños:</b> ", banios, "<br>",
"<b>Parqueaderos:</b> ", parqueaderos
)
)
La Tabla 9 evidencia una alta heterogeneidad en las características de las viviendas analizadas para la Solicitud 2. En términos de precio, se observa un rango amplio entre 75 y 1.750 millones de pesos, con una mediana de 245 millones y una media de 297,3 millones, lo que sugiere la presencia de apartamentos de mayor valor que elevan el promedio.
De manera similar, el área construida presenta una variabilidad considerable, con valores entre 40 m² y 932 m², una mediana de 85 m² y una media de 97,5 m², lo que indica una distribución con sesgo hacia inmuebles de mayor tamaño, aunque predominan apartamentos de dimensiones medias.
En cuanto a las características físicas, la base se concentra en estratos medios y altos, con una mediana de estrato 5 y una media de 4,63. Por su parte, el número típico de baños se sitúa en 2, aunque existen casos que alcanzan hasta 8 baños, mientras que el número de habitaciones presenta una mediana de 3 y un máximo de 6, lo que refleja una oferta mayoritariamente compuesta por apartamentos familiares de tamaño intermedio.
En conjunto, estos resultados muestran que la base está compuesta principalmente por apartamentos de tamaño medio, ubicados en estratos medios y altos de la Zona Sur, aunque con presencia de casos extremos en precio, área y número de baños, lo que confirma la diversidad de la oferta inmobiliaria disponible para este segmento del mercado.
tabla_resumen <- data.frame(
Estadistico = c("Mínimo", "1er cuartil", "Mediana", "Media", "3er cuartil", "Máximo"),
`Precio (millones)` = as.numeric(summary(base2$preciom)),
`Área construida` = as.numeric(summary(base2$areaconst)),
Estrato = as.numeric(summary(base2$estrato)),
Baños = as.numeric(summary(base2$banios)),
Habitaciones = as.numeric(summary(base2$habitaciones))
)
tabla_resumen %>%
knitr::kable(
caption = "Tabla 9. Resumen descriptivo de las variables numéricas seleccionadas, solicitud 2",
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| Estadistico | Precio..millones. | Área.construida | Estrato | Baños | Habitaciones |
|---|---|---|---|---|---|
| Mínimo | 75.0000 | 40.00000 | 3.000000 | 0.000000 | 0.000000 |
| 1er cuartil | 175.0000 | 65.00000 | 4.000000 | 2.000000 | 3.000000 |
| Mediana | 245.0000 | 85.00000 | 5.000000 | 2.000000 | 3.000000 |
| Media | 297.2917 | 97.47028 | 4.630068 | 2.488339 | 2.965554 |
| 3er cuartil | 335.0000 | 110.00000 | 5.000000 | 3.000000 | 3.000000 |
| Máximo | 1750.0000 | 932.00000 | 6.000000 | 8.000000 | 6.000000 |
La matriz de correlaciones presentada en la Tabla 10 muestra que la variable con mayor asociación lineal con el precio del apartamento es el área construida (r = 0,758), lo que indica una relación positiva fuerte: en general, a mayor tamaño del inmueble, mayor tiende a ser su valor de oferta. También se observa una correlación positiva importante entre precio y número de baños (r = 0,720) y entre precio y estrato (r = 0,673), lo que sugiere que los apartamentos con mejores condiciones físicas y ubicados en estratos más altos suelen alcanzar precios superiores. En cambio, la relación entre precio y número de habitaciones es más baja (r = 0,332), lo que indica una asociación positiva pero débil a moderada.
Por otra parte, entre las variables explicativas se destaca la relación entre área construida y baños (r = 0,662), así como entre baños y habitaciones (r = 0,515), resultados coherentes con la lógica inmobiliaria, ya que los apartamentos de mayor tamaño suelen contar con una mayor dotación de baños y una distribución interna más amplia. Asimismo, el estrato presenta correlaciones moderadas con área construida (r = 0,482) y baños (r = 0,569), lo que sugiere que el nivel socioeconómico del entorno también está asociado con mejores características del inmueble.
En conjunto, estos resultados indican que el precio de los apartamentos en la Zona Sur está explicado principalmente por variables estructurales, especialmente el área construida y el número de baños, seguidas por factores asociados a la calidad del entorno, como el estrato. Esto sugiere que, para la Solicitud 2, los atributos físicos y el contexto socioeconómico del inmueble juegan un papel determinante en la formación del precio.
base_cor <- base2 %>%
select(preciom, areaconst, estrato, banios, habitaciones) %>%
drop_na()
matriz_cor <- cor(base_cor)
matriz_cor %>%
round(3) %>%
as.data.frame() %>%
tibble::rownames_to_column("Variable") %>%
knitr::kable(
caption = "Tabla 10. Matriz de correlación entre variables numéricas seleccionadas",
col.names = c(
"Variable", "Precio (millones)", "Área construida",
"Estrato", "Baños", "Habitaciones"
),
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| Variable | Precio (millones) | Área construida | Estrato | Baños | Habitaciones |
|---|---|---|---|---|---|
| preciom | 1.000 | 0.758 | 0.673 | 0.720 | 0.332 |
| areaconst | 0.758 | 1.000 | 0.482 | 0.662 | 0.434 |
| estrato | 0.673 | 0.482 | 1.000 | 0.569 | 0.213 |
| banios | 0.720 | 0.662 | 0.569 | 1.000 | 0.515 |
| habitaciones | 0.332 | 0.434 | 0.213 | 0.515 | 1.000 |
Se estimó un modelo de regresión lineal múltiple para explicar el precio de oferta de los apartamentos en la Zona Sur en función del área construida, estrato, número de habitaciones, número de parqueaderos y número de baños.La ecuación se define como: \[ \widehat{preciom} = -261.63 + 1.2850(areaconst) + 60.90(estrato) - 24.84(habitaciones) + 72.91(parqueaderos) + 50.70(banios) \]
Los resultados muestran que, manteniendo constantes las demás variables, todas las variables incluidas en el modelo resultan estadísticamente significativas al 5%, aunque no todas presentan el signo esperado. En particular, el área construida, el estrato, el número de parqueaderos y el número de baños tienen coeficientes positivos, mientras que el número de habitaciones presenta un coeficiente negativo.
En primer lugar, el coeficiente de área construida fue de 1,2851, con un valor p menor a 0,001, lo que indica que por cada metro cuadrado adicional de área construida, el precio del apartamento aumenta en promedio 1,29 millones de pesos, manteniendo constantes las demás variables. Este resultado es coherente con la lógica del mercado inmobiliario, dado que el tamaño del inmueble constituye uno de los principales determinantes de su valor.
Por su parte, el coeficiente del estrato fue de 60,90, también altamente significativo, lo que significa que aumentar en un nivel el estrato se asocia con un incremento promedio de 60,9 millones de pesos en el precio del apartamento, ceteris paribus. Este hallazgo resulta razonable, ya que un mayor estrato suele reflejar mejores condiciones urbanas, mayor valorización del entorno y una percepción de mayor calidad del sector.
El coeficiente del número de parqueaderos fue de 72,91, siendo igualmente significativo, lo que indica que cada parqueadero adicional incrementa en promedio el precio del apartamento en 72,9 millones de pesos, manteniendo constantes las demás variables. Este efecto es bastante alto, pero resulta plausible en el segmento de apartamentos de la Zona Sur, donde la disponibilidad de parqueaderos puede representar un atributo altamente valorado, especialmente en inmuebles de estratos medios y altos.
De manera similar, el coeficiente del número de baños fue de 50,70, también significativo, lo que implica que cada baño adicional se asocia con un aumento promedio de 50,7 millones de pesos en el valor del apartamento. Este resultado es lógico, ya que una mayor cantidad de baños suele relacionarse con mejores estándares de comodidad, amplitud y nivel de equipamiento del inmueble.
En contraste, el coeficiente del número de habitaciones fue de -24,84 y resultó estadísticamente significativo, lo que indica que, manteniendo fijas las demás variables, una habitación adicional se asocia con una disminución promedio de 24,8 millones de pesos en el precio del apartamento. Aunque este signo negativo puede parecer contraintuitivo en una primera lectura, no necesariamente es ilógico. Una posible explicación es que, al controlar por área construida, baños, estrato y parqueaderos, un mayor número de habitaciones podría estar reflejando una distribución interna más subdividida del espacio, es decir, apartamentos con más habitaciones pero de menor amplitud o menor nivel de confort relativo. En ese sentido, el resultado podría sugerir que, para un mismo tamaño total, los apartamentos con menos habitaciones pero espacios más amplios y mejor dotados tienden a valorizarse más.
El intercepto estimado fue de -261,63 y resultó significativo. Sin embargo, su interpretación práctica es limitada, ya que representa el precio esperado cuando todas las variables explicativas toman valor cero, una situación que no tiene sentido real en este contexto. Por ello, el intercepto debe entenderse principalmente como un parámetro de ajuste matemático del modelo.
En conjunto, el modelo de regresión lineal múltiple evidencia que el precio de los apartamentos en la Zona Sur está explicado principalmente por el área construida, el estrato, el número de parqueaderos y el número de baños, todas con efectos positivos y estadísticamente significativos. El resultado del número de habitaciones, aunque significativo, muestra una relación negativa que sugiere una dinámica más compleja en la distribución interna del espacio. En términos generales, los resultados son consistentes con la lógica del mercado inmobiliario y muestran que tanto las características físicas del inmueble como las condiciones del entorno socioeconómico inciden de manera importante en la formación del precio.
# Seleccionar variables del modelo y quitar faltantes
base_modelo2 <- base2 %>%
select(preciom, areaconst, estrato, habitaciones, parqueaderos, banios) %>%
na.omit()
# Estimar modelo de regresión lineal múltiple
modelo_m2 <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios,
data = base_modelo2)
summary(modelo_m2)
resumen_modelo <- as.data.frame(summary(modelo_m2)$coefficients) %>%
tibble::rownames_to_column("Variable")
colnames(resumen_modelo) <- c(
"Variable",
"Estimación",
"Error estándar",
"Valor t",
"Valor p"
)
resumen_modelo %>%
knitr::kable(
caption = "Tabla 11. Resultados del modelo de regresión lineal múltiple: Solicitud 2",
align = "c"
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| Variable | Estimación | Error estándar | Valor t | Valor p |
|---|---|---|---|---|
| (Intercept) | -261.625007 | 15.632196 | -16.736292 | 0 |
| areaconst | 1.285049 | 0.054027 | 23.785327 | 0 |
| estrato | 60.897089 | 3.084076 | 19.745652 | 0 |
| habitaciones | -24.836930 | 3.892286 | -6.381064 | 0 |
| parqueaderos | 72.914680 | 3.957968 | 18.422252 | 0 |
| banios | 50.696747 | 3.396374 | 14.926725 | 0 |
El modelo estimado para la Solicitud 2 presenta un R² de 0,7485 y un R² ajustado de 0,7480, lo que indica que aproximadamente el 74,9% de la variación observada en el precio de los apartamentos de la Zona Sur es explicada de manera conjunta por las variables incluidas en el modelo: área construida, estrato, número de habitaciones, número de parqueaderos y número de baños.
En términos prácticos, este resultado sugiere que el modelo tiene una capacidad explicativa alta, pues logra capturar una proporción importante del comportamiento del precio de los inmuebles en este segmento del mercado. Sin embargo, también implica que cerca del 25,1% de la variabilidad permanece sin explicar, lo que puede atribuirse a otros factores no incorporados en la estimación, como el barrio específico, el piso, la ubicación exacta dentro de la zona, la antigüedad del inmueble, el estado de conservación, los acabados y otros atributos del entorno residencial.
El hecho de que el R² ajustado (0,7480) sea prácticamente igual al R² (0,7485) indica que las variables incluidas en el modelo aportan información relevante y que la capacidad explicativa no se encuentra inflada artificialmente por la inclusión de predictores innecesarios. Además, la prueba F global del modelo fue altamente significativa (F = 1414; p < 2,2e-16), lo que permite concluir que, como conjunto, las variables explicativas sí contribuyen de manera significativa a explicar el precio de los apartamentos. Esto respalda la pertinencia estadística del modelo y confirma que existe una relación sistemática entre el precio y las características estructurales consideradas.
No obstante, el ajuste del modelo no debe considerarse perfecto. El error estándar residual de 98,02 millones de pesos sugiere que, aunque el modelo explica de forma sólida la tendencia general del precio, todavía existen diferencias relevantes entre los valores observados y los estimados. Esto resulta razonable en el mercado inmobiliario, donde el valor de un apartamento no depende exclusivamente de variables cuantitativas básicas, sino también de factores cualitativos, espaciales y de mercado que no siempre están disponibles en la base de datos.
En consecuencia, el modelo puede considerarse adecuado y robusto como aproximación explicativa y predictiva inicial, aunque conserva margen de mejora si se busca una estimación más precisa.
El ajuste del modelo podría mejorarse, en primer lugar, incorporando variables que ya están disponibles en la base de datos, como el barrio, el piso y la ubicación geográfica exacta mediante longitud y latitud, ya que estas pueden capturar con mayor precisión la heterogeneidad espacial del mercado de apartamentos en la Zona Sur.
Asimismo, si se trabajara con una base más amplia, la variable zona también podría aportar capacidad explicativa adicional al permitir comparar diferentes sectores de la ciudad. Por otra parte, variables potencialmente relevantes como la antigüedad del apartamento, el estado de conservación, los acabados, la administración, las zonas comunes y otras características del entorno residencial no se encuentran en la base disponible, por lo que su incorporación requeriría información complementaria.
También sería conveniente explorar relaciones no lineales, especialmente en el área construida, dado que el efecto marginal del tamaño sobre el precio podría no ser constante en apartamentos pequeños, medianos y de alta gama. De igual forma, podrían evaluarse interacciones entre variables, por ejemplo entre estrato y área, o entre baños y parqueaderos, para identificar combinaciones de atributos que potencien el valor del inmueble.
Finalmente, sería importante revisar los supuestos del modelo, en particular la homocedasticidad, la normalidad de los residuos y la presencia de observaciones atípicas o influyentes, dado que el comportamiento del mercado inmobiliario puede incluir inmuebles extremos que alteren el ajuste global del modelo.
La validación gráfica de supuestos del modelo para la Solicitud 2 evidencia que el ajuste lineal es aceptable, aunque no perfecto. En el gráfico de residuos versus valores ajustados se observa una dispersión alrededor de cero sin una curvatura extremadamente marcada, lo que sugiere que la especificación lineal del modelo puede considerarse razonable para explicar el precio de los apartamentos en la Zona Sur. No obstante, también se aprecia que la dispersión de los residuos aumenta conforme crecen los valores ajustados, especialmente en los apartamentos de mayor precio, lo que sugiere una posible pérdida de homogeneidad en la varianza.
Esta situación se confirma en el gráfico Scale-Location, donde la línea de tendencia presenta una trayectoria ascendente, indicando heterocedasticidad. En otras palabras, el error del modelo no es constante y tiende a ser mayor en los inmuebles con precios estimados más altos. Este comportamiento es consistente con la lógica del mercado inmobiliario, donde los apartamentos de mayor valor suelen presentar una mayor heterogeneidad en atributos no observados.
Por su parte, el gráfico Q-Q muestra desviaciones importantes respecto a la línea teórica en ambos extremos de la distribución, lo que sugiere que los residuos no siguen una distribución normal estricta, especialmente debido a la presencia de valores atípicos. Esta evidencia coincide con la existencia de apartamentos extremos en precio o características físicas, que afectan la forma de la distribución residual.
Finalmente, el gráfico de residuos versus leverage permite identificar algunas observaciones potencialmente influyentes, entre las que destacan los casos 2042, 2206 y 831, así como otros registros con residuos estandarizados elevados. Estos casos podrían estar afectando parcialmente las estimaciones del modelo, ya sea por corresponder a inmuebles atípicos del mercado o por presentar combinaciones inusuales de atributos.
En conjunto, estos resultados indican que el modelo ofrece una aproximación útil para explicar el precio de los apartamentos en la Zona Sur, pero presenta incumplimientos en los supuestos de normalidad y homocedasticidad, además de algunas observaciones influyentes. Por ello, en futuros análisis sería recomendable explorar transformaciones de la variable respuesta, utilizar errores estándar robustos y revisar de manera particular los casos atípicos o de alta influencia.
Gráfico 7. Diagnóstico gráfico de los supuestos del Modelo: Solicitud 2
par(mfrow = c(2, 2))
plot(modelo_m2)
par(mfrow = c(1, 1))
Complementariamente a la inspección visual de los gráficos de diagnóstico, se procede a realizar pruebas estadísticas formales con el fin de evaluar de manera más precisa el cumplimiento de los supuestos del modelo para la Solicitud 2. En particular, se aplican pruebas para examinar la normalidad de los residuos, la homocedasticidad, la independencia y la posible presencia de multicolinealidad entre las variables explicativas. Estas pruebas permiten respaldar con evidencia cuantitativa la interpretación gráfica previa y ofrecen una base más sólida para discutir la validez del modelo estimado.
La prueba de Shapiro-Wilk aplicada a los residuos del modelo de la Solicitud 2 arrojó un estadístico W = 0,79118 con un valor p inferior a 2,2e-16, por lo que se rechaza la hipótesis nula de normalidad. Esto indica que los residuos del modelo no siguen una distribución normal, resultado que coincide con lo observado en el gráfico Q-Q, donde se evidencian desviaciones importantes respecto a la línea teórica, especialmente en los extremos. En términos prácticos, este hallazgo sugiere la presencia de valores atípicos o colas más pesadas de lo esperado bajo normalidad, probablemente asociadas a apartamentos con precios o características físicas extremas. Aunque este incumplimiento no invalida por sí mismo el modelo para fines explicativos, sí sugiere que en análisis posteriores podría ser conveniente considerar transformaciones de la variable respuesta o métodos de estimación más robustos.
# Normalidad
shapiro.test(residuals(modelo_m2))
La prueba de Breusch-Pagan aplicada al modelo de la Solicitud 2 arrojó un estadístico BP = 754,81 con 5 grados de libertad y un valor p inferior a 2,2e-16, por lo que se rechaza la hipótesis nula de homocedasticidad. Esto indica que los residuos del modelo presentan heterocedasticidad, es decir, que la varianza del error no es constante a lo largo de los valores ajustados.
Este resultado es consistente con lo observado en los gráficos diagnósticos, especialmente en Residuals vs Fitted y Scale-Location, donde se evidenciaba un aumento de la dispersión residual para apartamentos con precios estimados más altos. En términos sustantivos, esto sugiere que el modelo comete errores de mayor magnitud en los inmuebles de mayor valor, algo plausible en el mercado inmobiliario, dado que los apartamentos más costosos suelen presentar mayor heterogeneidad en atributos no observados.
Aunque en este ejercicio no se requiere corregir este problema, como recomendación metodológica futura sería conveniente considerar el uso de errores estándar robustos o explorar una transformación logarítmica del precio, con el fin de estabilizar la varianza y mejorar la calidad de la inferencia.
# Homocedasticidad
bptest(modelo_m2)
Los valores del Factor de Inflación de la Varianza (VIF) obtenidos para el modelo de la Solicitud 2 fueron bajos: área construida = 2,067, estrato = 1,545, habitaciones = 1,429, parqueaderos = 1,738 y baños = 2,529. Dado que todos se encuentran muy por debajo de los umbrales comúnmente utilizados para identificar problemas de multicolinealidad, se concluye que no existe evidencia de colinealidad severa entre las variables explicativas.
Esto indica que los predictores incluidos en el modelo aportan información diferenciada para explicar el precio de los apartamentos y que sus coeficientes pueden interpretarse con relativa estabilidad. En términos prácticos, el resultado sugiere que las asociaciones estimadas entre el precio y cada característica del inmueble no están distorsionadas de manera importante por una correlación excesiva entre los predictores.
# Multicolinealidad
vif(modelo_m2)
La prueba de Durbin-Watson aplicada al modelo de la Solicitud 2 arrojó un estadístico DW = 1,5333 con un valor p inferior a 2,2e-16, lo que indica evidencia estadística para rechazar la hipótesis nula de ausencia de autocorrelación y sugiere la presencia de autocorrelación positiva en los residuos. Aunque este tipo de prueba se utiliza con mayor frecuencia en series de tiempo, en este caso su resultado puede interpretarse como un indicio de dependencia no capturada por el modelo, posiblemente asociada a factores espaciales o a similitudes entre apartamentos cercanos dentro de la Zona Sur. En otras palabras, más que una autocorrelación temporal en sentido estricto, el resultado podría estar reflejando la existencia de agrupamientos espaciales o atributos compartidos entre inmuebles ubicados en barrios o sectores similares. Por ello, como recomendación metodológica para futuros análisis, sería pertinente incorporar variables de localización más detalladas, como barrio, longitud y latitud, e incluso considerar enfoques de modelación espacial que permitan capturar de mejor manera esta estructura de dependencia residual.
# Independencia
dwtest(modelo_m2)
El gráfico 8 de Distancia de Cook correspondiente al modelo de la Solicitud 2 evidencia la presencia de algunas observaciones influyentes dentro de la muestra, ya que varios registros superan claramente el umbral de referencia y uno de ellos destaca de forma muy marcada sobre el resto, con una distancia de Cook cercana a 7. Esto sugiere que existen apartamentos cuya combinación de precio y características físicas ejerce una influencia considerable sobre los coeficientes estimados del modelo. Asimismo, se observan otros casos con valores superiores a 1, lo que refuerza la existencia de registros potencialmente influyentes. En términos sustantivos, estos casos podrían corresponder a inmuebles atípicos del mercado, ya sea por presentar áreas, precios o configuraciones internas poco comunes frente al conjunto general de apartamentos de la Zona Sur. Aunque en este ejercicio no se requiere corregir este aspecto, el resultado sugiere que en análisis posteriores sería conveniente revisar individualmente estas observaciones, con el fin de determinar si se trata de errores de registro, casos extremos válidos o apartamentos que ameritan un tratamiento especial dentro de la modelación.
# Observaciones influyentes
cooksd <- cooks.distance(modelo_m2)
plot(cooksd, type = "h", main = "Gráfico 8. Distancia de Cook. Modelo Solicitud 2")
abline(h = 4/length(cooksd), lty = 2, col = "darkgreen")
A partir del modelo de regresión lineal múltiple estimado para casas ubicadas en la Zona Norte, se realizó la predicción del precio de la primera vivienda solicitada, caracterizada por un área construida de 200 m², 1 parqueadero, 2 baños y 4 habitaciones. La ecuación de predicción obtenida fue:
\[ \hat{Precio} = -261.63 + 1.2850(\text{Área construida}) + 60.90(\text{Estrato}) - 24.84(\text{Habitaciones}) + 72.91(\text{Parqueaderos}) + 50.70(\text{Baños}) \] Dado que el requerimiento de la Solicitud 2 establece que el inmueble puede pertenecer a estrato 5 o 6, se evaluaron dos escenarios de predicción con base en el modelo estimado para apartamentos en la Zona Sur. En el primer caso, suponiendo estrato 5, el precio estimado fue de 675,0 millones de pesos. En el segundo caso, suponiendo estrato 6, el precio estimado fue de 735,9 millones de pesos. Estos resultados muestran que la condición del estrato tiene un efecto importante sobre la valoración del inmueble, generando una diferencia cercana a 60,9 millones de pesos entre ambos escenarios, valor que coincide con el coeficiente estimado para esta variable en el modelo.
Al comparar estas predicciones con el crédito preaprobado de 850 millones de pesos, se observa que una vivienda con estas características sería financieramente viable en ambos casos, ya que tanto la estimación para estrato 5 como la de estrato 6 se ubican por debajo del monto disponible. No obstante, desde una perspectiva de optimización del presupuesto, la alternativa en estrato 5 ofrece un mayor margen financiero, mientras que la opción en estrato 6 sigue siendo accesible pero con un nivel de precio más alto. En consecuencia, desde la perspectiva del modelo, la búsqueda puede orientarse tanto a apartamentos de estrato 5 como de estrato 6, priorizando la decisión final según atributos adicionales del inmueble, ubicación específica y preferencias de la empresa.
# Escenario 1: estrato 5
nueva_apto_e5 <- data.frame(
areaconst = 300,
estrato = 5,
habitaciones = 5,
parqueaderos = 3,
banios = 3
)
predict(modelo_m2, newdata = nueva_apto_e5)
# Escenario 2: estrato 6
nueva_apto_e6 <- data.frame(
areaconst = 300,
estrato = 6,
habitaciones = 5,
parqueaderos = 3,
banios = 3
)
predict(modelo_m2, newdata = nueva_apto_e6)
Al aplicar los criterios de búsqueda sobre la subbase de apartamentos ubicados en la Zona Sur, se identificaron 7 ofertas potenciales que cumplen con condiciones cercanas a la solicitud de la Vivienda 2 y, además, se mantienen dentro del límite presupuestal de 850 millones de pesos. Este resultado muestra que existe una oferta suficiente en el mercado para atender el requerimiento planteado, permitiendo no solo identificar inmuebles viables desde el punto de vista financiero, sino también priorizar aquellos con mayor similitud respecto al perfil solicitado en términos de área construida, estrato, número de habitaciones, baños y parqueaderos.
# Ofertas potenciales para la Vivienda 2
ofertas_viv2 <- base2 %>%
filter(
estrato %in% c(5, 6),
preciom <= 850,
areaconst >= 250, areaconst <= 350,
habitaciones >= 4, habitaciones <= 6,
banios >= 3, banios <= 4,
parqueaderos >= 2
)
nrow(ofertas_viv2)
Se seleccionaron cinco ofertas que muestran un ajuste favorable frente al perfil requerido para la Solicitud 2. El puntaje total se interpreta como una medida de distancia respecto al perfil de apartamento definido; por tanto, valores más bajos indican mayor cercanía al perfil deseado, mientras que valores más altos reflejan una mayor divergencia frente a las características objetivo (Ver Tabla 10).
top5_viv2 <- ofertas_viv2 %>%
mutate(
dist_area = abs(areaconst - 300),
dist_hab = abs(habitaciones - 5),
dist_banios = abs(banios - 3),
dist_parq = abs(parqueaderos - 3),
score_total = dist_area + 10 * dist_hab + 10 * dist_banios + 10 * dist_parq
) %>%
arrange(score_total, preciom) %>%
slice_head(n = 5)
top5_viv2 %>%
select(
id, barrio, estrato, preciom, areaconst,
parqueaderos, banios, habitaciones,
longitud, latitud, score_total
) %>%
knitr::kable(
caption = "Tabla 12. Cinco apartamentos más cercanos al perfil de búsqueda definido para la Solicitud 2",
col.names = c(
"ID", "Barrio", "Estrato", "Precio (millones)", "Área construida",
"Parqueaderos", "Baños", "Habitaciones",
"Longitud", "Latitud", "Puntaje total"
),
align = "c",
digits = 3
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed", "responsive")
)
| ID | Barrio | Estrato | Precio (millones) | Área construida | Parqueaderos | Baños | Habitaciones | Longitud | Latitud | Puntaje total |
|---|---|---|---|---|---|---|---|---|---|---|
| 8113 | cuarto de legua | 5 | 410 | 295.55 | 2 | 4 | 4 | -76.555 | 3.408 | 34.45 |
| 6175 | capri | 5 | 350 | 270.00 | 3 | 3 | 4 | -76.541 | 3.392 | 40.00 |
| 7658 | cuarto de legua | 5 | 520 | 320.00 | 2 | 4 | 4 | -76.551 | 3.409 | 50.00 |
| 6932 | san fernando | 5 | 500 | 330.00 | 2 | 4 | 4 | -76.546 | 3.435 | 60.00 |
| 2308 | San Fernando | 5 | 350 | 258.00 | 2 | 4 | 5 | -76.520 | 3.440 | 62.00 |
Con el fin de complementar el análisis de las ofertas seleccionadas, a continuación se presenta un mapa con la ubicación geográfica de los cinco apartamentos potenciales identificados para responder a la solicitud de la Vivienda 2. En esta visualización se muestran los inmuebles recomendados dentro de la Zona Sur de Cali, permitiendo observar su distribución espacial y su localización relativa en barrios como Cuarto de Legua, Capri y San Fernando. Esta representación facilita no solo la comparación de las opciones en términos de precio y características físicas, sino también su valoración desde una perspectiva territorial, elemento clave en la decisión final de compra (ver Gráfico 9).
Gráfico 9. Mapa de puntos: Top 5 viviendas potenciales para Solicitud 2
leaflet(top5_viv2) %>%
addTiles() %>%
setView(
lng = mean(top5_viv2$longitud),
lat = mean(top5_viv2$latitud),
zoom = 14
) %>%
addCircleMarkers(
lng = ~longitud,
lat = ~latitud,
radius = 7,
color = "green",
stroke = TRUE,
fillOpacity = 0.8,
popup = ~paste0(
"<b>Barrio:</b> ", barrio, "<br>",
"<b>Precio:</b> ", preciom, " millones<br>",
"<b>Área:</b> ", areaconst, " m²<br>",
"<b>Estrato:</b> ", estrato, "<br>",
"<b>Habitaciones:</b> ", habitaciones, "<br>",
"<b>Baños:</b> ", banios, "<br>",
"<b>Parqueaderos:</b> ", parqueaderos
)
)