El presente informe tiene como objetivo dar respuesta a la solicitud realizada por María, mediante la aplicación de técnicas de modelación estadística y analítica de datos. En este documento se analizan detalladamente los dos casos planteados, utilizando metodologías cuantitativas que permitan evaluar su comportamiento, identificar patrones relevantes y generar conclusiones fundamentadas.
library(dplyr)
library(leaflet)
library(ggplot2)
library(summarytools)
library(knitr)
library(mice)
# devtools::install_github("centromagis/paqueteMODELOS", force = TRUE)
library(paqueteMODELOS)
library(corrplot)
library(tidyverse)
library(GGally)
library(lmtest)
data("vivienda")
Selección de casas ubicadas en la zona norte de la ciudad
base1 <- vivienda %>%
filter(tipo == "Casa",
zona == "Zona Norte")
base1 <- as.data.frame(base1)
head(base1, 3)
## id zona piso estrato preciom areaconst parqueaderos banios
## 1 1209 Zona Norte 02 5 320 150 2 4
## 2 1592 Zona Norte 02 5 780 380 2 3
## 3 4057 Zona Norte 02 6 750 445 NA 7
## habitaciones tipo barrio longitud latitud
## 1 6 Casa acopi -76.51341 3.47968
## 2 3 Casa acopi -76.51674 3.48721
## 3 6 Casa acopi -76.52950 3.38527
En general, la mayoría de los puntos se concentran en el Zona Norte, lo cual valida el filtro aplicado. No obstante, se identifican algunos registros en zonas periféricas, lo que podría explicarse por:
Definición administrativa de zona, es decir, el registro puede estar catalogado como “Zona Norte” aunque sus coordenadas estén en el límite.
Errores en coordenadas, Coordenadas aproximadas
Registros atípicos, podrían existir registros mal clasificados en la base de datos.
library(leaflet)
map <- leaflet(base1) %>%
addTiles() %>%
addCircleMarkers(
lng = ~longitud,
lat = ~latitud,
radius = 2,
color = "blue")
map
Tipo de datos de cada atributo y estructura general
Se identifican valores faltantes (NA) en el atributo categórico parqueaderos Adicional, la variable estrato está clasificada como dato numérico.
# se filtra la base1 para hacer análisis exploraratorio con las varibles de interés
base1 <- base1 %>%
select(preciom, areaconst, estrato, habitaciones, parqueaderos, banios)
str(base1, give.attr = FALSE)
## 'data.frame': 722 obs. of 6 variables:
## $ preciom : num 320 780 750 625 750 600 420 490 230 190 ...
## $ areaconst : num 150 380 445 355 237 160 200 118 160 435 ...
## $ estrato : num 5 5 6 4 5 4 5 5 3 3 ...
## $ habitaciones: num 6 3 6 5 6 5 5 4 3 0 ...
## $ parqueaderos: num 2 2 NA 3 2 1 4 2 NA NA ...
## $ banios : num 4 3 7 5 6 4 4 4 2 0 ...
Medidas de dispersión y centralidad
Se identifica que hay inmubles con 0 habitaciones o 0 baños, lo cual no es común en la realidad.
descr(base1,
stats = c("mean", "med", "sd", "min", "q1", "q3", "max", "IQR", "cv"),
transpose = TRUE)
## Descriptive Statistics
## base1
## N: 722
##
## Mean Median Std.Dev Min Q1 Q3 Max IQR CV
## ------------------ -------- -------- --------- ------- -------- -------- --------- -------- ------
## areaconst 264.85 240.00 167.17 30.00 140.00 337.00 1440.00 196.75 0.63
## banios 3.56 3.00 1.52 0.00 2.00 4.00 10.00 2.00 0.43
## estrato 4.20 4.00 0.98 3.00 3.00 5.00 6.00 2.00 0.23
## habitaciones 4.51 4.00 1.83 0.00 3.00 5.00 10.00 2.00 0.41
## parqueaderos 2.18 2.00 1.40 1.00 1.00 3.00 10.00 2.00 0.64
## preciom 445.91 390.00 268.36 89.00 260.00 550.00 1940.00 288.75 0.60
Datos faltantes por atributo
data.frame(
NAN = colSums(is.na(base1)),
Percent = round(colSums(is.na(base1)) / nrow(base1) * 100, 2)
)
## NAN Percent
## preciom 0 0.00
## areaconst 0 0.00
## estrato 0 0.00
## habitaciones 0 0.00
## parqueaderos 287 39.75
## banios 0 0.00
Valores atípicos de atributos
Los boxplots muestran una alta dispersión y presencia de valores atípicos en las variables precio y área construida, lo cual es totalmente factible y esperado en el mercado inmobiliario. Los inmuebles no son bienes homogéneo.
par(mar = c(8,4,4,2))
boxplot(base1,
las = 2,
main = "Boxplots de atributos",
col = "blue",
ylim = c(0, 2000))
Resgistros duplicados en el conjunto de datos
sum(duplicated(base1))
## [1] 17
Se remplazan con la mediana los valores en 0 de los atributos banios y habitaciones, no es comun encontrar inmubles sin estas característica. En ambos casos la mediana de los atributos es equivalente a 3
base1$habitaciones[base1$habitaciones == 0] <- 3
base1$banios[base1$banios == 0] <- 3
Los datos faltantes de el atributo parqueadero se remplazan con la mediana
# Reemplazar NA en la variable parqueadero por la mediana
base1$parqueaderos[is.na(base1$parqueaderos)] <-
median(base1$parqueaderos, na.rm = TRUE)
Se eliminan registros duplicados
base1 <- base1[!duplicated(base1), ]
La relación entre Precio y Estrato se justifica como numérica dado que la línea de ajuste local (LOESS) sigue de cerca la trayectoria de la regresión lineal, validando una tendencia ascendente proporcional sin curvaturas complejas. Este enfoque simplifica el modelo al utilizar un solo coeficiente para capturar el orden jerárquico natural de los datos, evitando la dispersión de grados de libertad que implicaría categorizarlos.
ggplot(base1, aes(x = estrato, y = preciom)) +
geom_point(alpha = 0.4) +
geom_smooth(method = "lm", se = FALSE, color = "blue") + # línea lineal
geom_smooth(method = "loess", se = FALSE, color = "red") + # línea flexible
labs(title = "Precio vs Estrato",
x = "Estrato",
y = "Precio")
Asociación entre las variables cuantitativas
Los gráficos de correlación y distribución revelan que el precio de las viviendas tiene una relación lineal positiva muy fuerte con el área construida (\(0.731\)) y moderada con el estrato (\(0.612\)), mientras que todas las variables presentan una asimetría positiva marcada, concentrando la mayoría de las unidades en rangos de precios y tamaños bajos con una “cola” de propiedades de lujo. Se observa una correlación significativa entre los predictores, especialmente entre habitaciones y baños (\(0.576\)), lo que sugiere una posible multicolinealidad que debe vigilarse en el modelo de regresión múltiple. Finalmente, las gráficas de densidad confirman que los datos no siguen una distribución normal, validando la necesidad de evaluar transformaciones para estabilizar la varianza del modelo.
ggpairs(base1[,1:6], title=" ")
El modelo muestra que área construida (β=0.7828; p<2e-16), estrato (β=83.27; p<2e-16), parqueaderos (β=16.01; p=0.0057) y baños (β=28.05; p=1.55e-06) son estadísticamente significativos, mientras que habitaciones no lo es (β=3.19; p=0.495). Esto implica que, manteniendo constantes las demás variables, un aumento de 1 unidad en área incrementa el precio en 0.78 unidades, un nivel adicional de estrato aumenta el precio en 83.27, un parqueadero adicional en 16.01 y un baño adicional en 28.05, resultados lógicos en el mercado inmobiliario; la no significancia de habitaciones podría deberse a colinealidad con área. El modelo tiene un R²=0.6536 (R² ajustado=0.6511), por lo que explica el 65.36% de la variación del precio, lo que indica un buen ajuste para datos sociales; podría mejorarse incluyendo variables como ubicación, antigüedad o transformaciones logarítmicas para capturar no linealidades.
mod1 <-lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base1)
summary(mod1)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = base1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -905.80 -77.01 -17.02 46.58 1082.84
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -260.48369 32.04457 -8.129 1.98e-15 ***
## areaconst 0.78216 0.04545 17.211 < 2e-16 ***
## estrato 83.27302 7.39915 11.254 < 2e-16 ***
## habitaciones 3.19498 4.67920 0.683 0.4950
## parqueaderos 16.00927 5.77287 2.773 0.0057 **
## banios 28.05011 5.78712 4.847 1.55e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 158.9 on 696 degrees of freedom
## Multiple R-squared: 0.6536, Adjusted R-squared: 0.6511
## F-statistic: 262.6 on 5 and 696 DF, p-value: < 2.2e-16
Normalidad: En el gráfico Q-Q los residuos se apartan de la línea en las colas (especialmente la derecha), lo que indica que no hay normalidad perfecta y existen valores atípicos
Varianza constante (Homoscedasticidad): En Residuals vs Fitted y Scale-Location se observa una ligera forma de embudo creciente; la dispersión aumenta cuando crecen los valores ajustados, lo que sugiere posible heterocedasticidad leve (la varianza no parece completamente constante).
Independecia El estadístico Durbin-Watson = 1.6243 es menor que 2 y el p-value = 2.528e-07 (< 0.05), por lo que se rechaza la hipótesis nula de independencia.
Sería recomendable usar errores estándar robustos o considerar una transformación (por ejemplo log del precio) para mejorar el ajuste del modelo.
par(mfrow = c(2,2))
plot(mod1)
dwtest(mod1)
##
## Durbin-Watson test
##
## data: mod1
## DW = 1.6243, p-value = 2.528e-07
## alternative hypothesis: true autocorrelation is greater than 0
Oferta 1 = 313.93 → Precio estimado si la vivienda es estrato 4
Ofertad 2 = 397.20 → Precio estimado si la vivienda es estrato 5
(Suponiendo que preciom está en millones, serían $314 millones y $397 millones).
Con base en el modelo, la vivienda en estrato 4 tiene un precio estimado de 314 millones, por lo que se ajusta al crédito máximo de 350 millones. En cambio, en estrato 5 el precio estimado es 397 millones, superando el límite aprobado. Por tanto, se recomienda optar por estrato 4 o reducir características como área o número de baños si se desea mantener estrato 5.
precio <- data.frame(
areaconst = c(200, 200),
estrato = c(4, 5),
habitaciones = c(4, 4),
parqueaderos = c(1, 1),
banios = c(2, 2)
)
predict(mod1, newdata = precio)
## 1 2
## 313.9295 397.2025
Identificación de inmuebles para oferta real.
Para responder a la solicitud de compra, el análisis determinó que el enfoque debe centrarse en viviendas de Estrato 4 en la Zona Norte, ya que el modelo estadístico estima para estas un precio de $313.92 millones, lo que se ajusta perfectamente al crédito preaprobado de $350 millones, a diferencia del Estrato 5 que excede el presupuesto con una valoración de $397.20 millones. Bajo este criterio, se identificaron 5 ofertas potenciales en los barrios El Bosque, La Merced y Álamos, destacando especialmente las propiedades en El Bosque por ofrecer hasta 4 baños y metrajes superiores a los 160 \(m^2\), posicionándose como las opciones que mejor equilibran el confort deseado y la viabilidad financiera; estas viviendas representan una oportunidad estratégica de negociación, dado que sus precios de mercado son competitivos frente a la predicción del modelo y aseguran que la inversión del cliente esté respaldada por las dinámicas reales de valorización de la zona norte de Cali.
ofertas_viables <- vivienda %>%
filter( tipo == "Casa",
areaconst <= 200,
parqueaderos == 1,
banios >= 2,
habitaciones == 4,
estrato == 4,
zona == "Zona Norte",
preciom <= 350
)
ofertas_viables <- as.data.frame(ofertas_viables)
head(ofertas_viables, 5)
## id zona piso estrato preciom areaconst parqueaderos banios
## 1 1666 Zona Norte 02 4 275 120 1 2
## 2 464 Zona Norte 02 4 330 165 1 4
## 3 4471 Zona Norte 02 4 340 162 1 4
## 4 1055 Zona Norte <NA> 4 280 147 1 3
## 5 1107 Zona Norte <NA> 4 330 140 1 3
## habitaciones tipo barrio longitud latitud
## 1 4 Casa alamos -76.51700 3.47500
## 2 4 Casa el bosque -76.49657 3.45140
## 3 4 Casa el bosque -76.53188 3.48770
## 4 4 Casa la merced -76.50880 3.48699
## 5 4 Casa la merced -76.51057 3.48113
oferta <- data.frame(
lat = c(3.47500, 3.45140, 3.48770, 3.48699, 3.48113),
long = c(-76.51700, -76.49657, -76.53188 , -76.50880 , -76.51057)
)
# Crea un mapa
map1 <- leaflet(oferta) %>%
addTiles() %>%
addMarkers(
lng = ~long,
lat = ~lat,
)
map1 # Muestra el mapa
Selección de apartamentos ubicados en la zona sur de la ciudad Santiago de Cali
base2 <- vivienda %>%
filter(tipo == "Apartamento",
zona == "Zona Sur")
base2 <- as.data.frame(base2)
head(base2, 3)
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 1 5098 Zona Sur 05 4 290 96 1 2 3
## 2 698 Zona Sur 02 3 78 40 1 1 2
## 3 8199 Zona Sur <NA> 6 875 194 2 5 3
## tipo barrio longitud latitud
## 1 Apartamento acopi -76.53464 3.44987
## 2 Apartamento aguablanca -76.50100 3.40000
## 3 Apartamento aguacatal -76.55700 3.45900
En general, la mayoría de los puntos se concentran en el Zona sur, lo cual valida el filtro aplicado. No obstante, se identifican algunos registros en zonas periféricas, lo que podría explicarse por:
Definición administrativa de zona, es decir, el registro puede estar catalogado como “Zona Norte” aunque sus coordenadas estén en el límite.
Errores en coordenadas, Coordenadas aproximadas
Registros atípicos, podrían existir registros mal clasificados en la base de datos.
mapA <- leaflet(base2) %>%
addTiles() %>%
addCircleMarkers(
lng = ~longitud,
lat = ~latitud,
radius = 2,
color = "red"
)
mapA
Tipo de datos de cada atributo y estructura general
Se identifican valores faltantes (NA) en el atributo categórico parqueaderos Adicional, la variable estrato está clasificada como dato numérico.
# se filtra la base1 para hacer análisis exploraratorio con las varibles de interés
base2 <- base2 %>%
select(preciom, areaconst, estrato, habitaciones, parqueaderos, banios)
str(base2, give.attr = FALSE)
## 'data.frame': 2787 obs. of 6 variables:
## $ preciom : num 290 78 875 135 135 220 210 105 115 220 ...
## $ areaconst : num 96 40 194 117 78 75 72 68 58 84 ...
## $ estrato : num 4 3 6 3 3 4 3 3 3 4 ...
## $ habitaciones: num 3 2 3 3 3 3 3 3 2 3 ...
## $ parqueaderos: num 1 1 2 NA NA 1 2 NA 1 NA ...
## $ banios : num 2 1 5 2 1 2 2 2 2 2 ...
Medidas de dispersión y centralidad
Se identifica que hay inmubles con 0 habitaciones o 0 baños, lo cual no es común en la realidad.
descr(base2,
stats = c("mean", "med", "sd", "min", "q1", "q3", "max", "IQR", "cv"),
transpose = TRUE)
## Descriptive Statistics
## base2
## N: 2787
##
## Mean Median Std.Dev Min Q1 Q3 Max IQR CV
## ------------------ -------- -------- --------- ------- -------- -------- --------- -------- ------
## areaconst 97.47 85.00 52.57 40.00 65.00 110.00 932.00 45.00 0.54
## banios 2.49 2.00 0.93 0.00 2.00 3.00 8.00 1.00 0.38
## estrato 4.63 5.00 0.84 3.00 4.00 5.00 6.00 1.00 0.18
## habitaciones 2.97 3.00 0.63 0.00 3.00 3.00 6.00 0.00 0.21
## parqueaderos 1.41 1.00 0.67 1.00 1.00 2.00 10.00 1.00 0.47
## preciom 297.29 245.00 191.55 75.00 175.00 335.00 1750.00 160.00 0.64
Datos faltantes por atributo
El 14% de los datos del atributo parqueaderos son faltantes
data.frame(
NAN = colSums(is.na(base2)),
Percent = round(colSums(is.na(base2)) / nrow(base2) * 100, 2)
)
## NAN Percent
## preciom 0 0.00
## areaconst 0 0.00
## estrato 0 0.00
## habitaciones 0 0.00
## parqueaderos 406 14.57
## banios 0 0.00
Valores atípicos de atributos
Los boxplots muestran una alta dispersión y presencia de valores atípicos en las variable área construida, se evidencian apartamentos con ares cercana a los 1000 metros cuadrados. En cuanto al atributo preciom se evidencian valores atípicos, apartamentos con precio superior a 1.500 millones, estos datos son plausibes por la zona donde se ubican los inmubles.
par(mar = c(8,4,4,2))
boxplot(base2,
las = 2,
main = "Boxplots de atributos",
col = "red",
ylim = c(0, 2000))
Resgistros duplicados en el conjunto de datos
sum(duplicated(base2))
## [1] 398
Se remplazan con la mediana los valores en 0 de los atributos banios y habitaciones, no es comun encontrar inmubles sin estas característica.
base2$habitaciones[base2$habitaciones == 0] <- 3
base2$banios[base2$banios == 0] <- 2
Los datos faltantes de el atributo parqueadero se remplazan con la mediana
# Reemplazar NA en la variable parqueadero por la mediana
base2$parqueaderos[is.na(base2$parqueaderos)] <-
median(base2$parqueaderos, na.rm = TRUE)
Se realizó un tratamiento de los valores atípicos en el atributo área construida para los apartamentos. Considerando que el promedio del área construida es de 98 m², se identificaron valores extremos que podían afectar el análisis. Por ello, se aplicó un proceso de depuración de datos con el fin de conservar únicamente valores representativos del mercado, dejando en la base apartamentos con áreas construidas aproximadas entre 40 y 500 m².
En cuanto al atributo preciom, no se hizo trataiento a los datos atípicos por ser valores reales.
base2 <- base2[base2$areaconst >= 40 & base2$areaconst <= 500, ]
Se eliminan registros duplicados
base2 <- base2[!duplicated(base2), ]
La variable estrato, aunque originalmente se encuentra en formato numérico, representa una variable categórica, ya que cada valor corresponde a una categoría socioeconómica y no a una escala numérica continua. Por esta razón, se decidió crear manualmente variables dummy (binarias) a partir de dicha variable, con el fin de representar adecuadamente cada categoría dentro del modelo de regresión lineal múltiple.
ESTRATO 3 = categoría queda como referencia (la base del modelo). D1 = ESTRATO 4 D2 = ESTRATO 5 D3 = ESTRATO 6
base2$D1 <- as.numeric(base2$estrato == 4)
base2$D2 <- as.numeric(base2$estrato == 5)
base2$D3 <- as.numeric(base2$estrato == 6)
Asociación entre las variables cuantitativas
La matriz de correlaciones muestra que el precio del apartamento (preciom) tiene una relación positiva fuerte con área construida (0.822), baños (0.723) y parqueaderos (0.686), lo que indica que viviendas más grandes y con más comodidades tienden a tener mayor valor. También se observa una correlación moderada con habitaciones (0.328). Entre las variables explicativas destaca la relación entre área y baños (0.731) y área y parqueaderos (0.627), lo que sugiere que las viviendas de mayor tamaño concentran más servicios. En cuanto a las variables dummy, D3 presenta una correlación positiva con el precio (0.684) mientras D1 muestra una relación negativa (-0.363), indicando diferencias de precio según la categoría representada.
ggpairs(base2[, c(1,2,4,5,6,7,8,9)], title = " ")
El modelo de regresión lineal muestra que el precio de la vivienda se explica principalmente por el área construida, cuyo coeficiente es 2.05, indicando que por cada unidad adicional de área el precio aumenta en promedio 2.05 millones, manteniendo constantes las demás variables. También se observa que cada baño adicional incrementa el precio en 28.15 millones y cada parqueadero en 46.10 millones, mientras que una habitación adicional reduce el precio en 25.55 millones, posiblemente porque viviendas con muchas habitaciones suelen tener menor área por espacio. En cuanto a las variables de estrato representadas por dummies, D1 aumenta el precio en 29.53 millones, D2 en 49.66 millones y D3 en 192.76 millones respecto a la categoría base, lo que evidencia una fuerte diferencia de valor según el estrato. Todos los coeficientes son estadísticamente significativos (p < 0.05). El modelo presenta un R² de 0.8142 y un R² ajustado de 0.8137, lo que indica que aproximadamente el 81.4% de la variación del precio de la vivienda es explicada por las variables incluidas, mostrando un muy buen nivel de ajuste del modelo.
El modelo presenta un buen desempeño (R² = 0.814), pero puede mejorarse incorporando variables adicionales y revisando algunos supuestos del modelo. En primer lugar, se podrían incluir variables estructurales del inmueble como antigüedad, tipo de vivienda, área del lote o presencia de zonas comunes
mod2 <-lm(formula = preciom ~ areaconst + habitaciones + banios + parqueaderos + D1 + D2 + D3, data = base2)
summary(mod2)
##
## Call:
## lm(formula = preciom ~ areaconst + habitaciones + banios + parqueaderos +
## D1 + D2 + D3, data = base2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -438.93 -37.67 1.29 35.90 808.76
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -21.19521 10.79747 -1.963 0.0498 *
## areaconst 2.05320 0.05981 34.329 < 2e-16 ***
## habitaciones -25.55160 3.49696 -7.307 3.75e-13 ***
## banios 28.15407 3.13070 8.993 < 2e-16 ***
## parqueaderos 46.09713 3.65563 12.610 < 2e-16 ***
## D1 29.53274 7.25876 4.069 4.89e-05 ***
## D2 49.66236 7.39936 6.712 2.41e-11 ***
## D3 192.75856 9.20155 20.948 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 86.41 on 2313 degrees of freedom
## Multiple R-squared: 0.8142, Adjusted R-squared: 0.8137
## F-statistic: 1448 on 7 and 2313 DF, p-value: < 2.2e-16
Los supuestos del modelo de regresión no se cumplen satisfactoriamente: la Normalidad se rechaza visualmente en el gráfico Q-Q Residuals, donde los puntos se alejan drásticamente de la diagonal en los extremos, indicando colas pesadas. La varianza constante (homocedasticidad) falla, ya que los gráficos Residuals vs Fitted y Scale-Location muestran un patrón de “embudo” con una dispersión que aumenta junto a los valores ajustados. La independencia no se cumple, pues la prueba de Durbin-Watson arroja un estadístico DW=1.6981 con un p-value=1.247×10−13, lo que evidencia una autocorrelación positiva estadísticamente significativa que invalida el supuesto de errores aleatorios independientes
par(mfrow = c(2,2))
plot(mod2)
dwtest(mod2)
##
## Durbin-Watson test
##
## data: mod2
## DW = 1.6981, p-value = 1.247e-13
## alternative hypothesis: true autocorrelation is greater than 0
La predicción del modelo indica que el precio estimado varía según el estrato. Para la oferta 1, donde D2 = (estrato 5) el modelo estima un precio de 739.42 millones de pesos. En la oferta 2, donde D3 = (estrato 6), el precio estimado aumenta a 882.52 millones de pesos. Esto muestra que, manteniendo constantes las características físicas del inmueble, el estrato influye significativamente en el valor de la vivienda, generando una diferencia aproximada de 143 millones de pesos entre un apartamento de estrato 5 y uno de estrato 6 con las mismas características.
precio2 <- data.frame(
areaconst = c(300, 300),
habitaciones = c(5, 5),
parqueaderos = c(3, 3),
banios = c(3, 3),
D1 = c(0,0), # estrato 4
D2 = c(1,0), # estrato 5
D3 = c(0,1) # estrato 6
)
predict(mod2, newdata = precio2)
## 1 2
## 739.4226 882.5188
Identificación de inmuebles para oferta real.
Para atender la solicitud de compra de la Vivienda 2, el análisis se centró en apartamentos ubicados en la zona sur, con características cercanas a 300 m² de área, alrededor de 5 habitaciones, 3 baños y 3 parqueaderos, considerando que el inmueble podría pertenecer a estrato 5 o 6. Con base en el modelo de regresión, se estimó un precio aproximado de $739.42 millones para estrato 5 y $882.52 millones para estrato 6, por lo que, dado el presupuesto disponible de $850 millones, resulta más viable enfocar la búsqueda en apartamentos de estrato 5. Bajo estos criterios se identificaron dos ofertas potenciales ubicadas en el barrio Seminario (Zona Sur): la primera corresponde a un apartamento de 300 m², 6 habitaciones, 5 baños y 3 parqueaderos con un precio de $670 millones, y la segunda a un apartamento de 256 m², 5 habitaciones, 5 baños y 3 parqueaderos con un precio de $530 millones.
ofertas_viables2 <- vivienda %>%
filter( tipo == "Apartamento",
areaconst <= 300,
parqueaderos >= 3,
banios >= 2,
habitaciones >= 5,
estrato == 5,
zona == "Zona Sur",
preciom <= 850
)
ofertas_viables2 <- as.data.frame(ofertas_viables2)
head(ofertas_viables2, 5)
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 1 7512 Zona Sur <NA> 5 670 300 3 5 6
## 2 8036 Zona Sur <NA> 5 530 256 3 5 5
## tipo barrio longitud latitud
## 1 Apartamento seminario -76.55000 3.40900
## 2 Apartamento seminario -76.55408 3.40748
oferta2 <- data.frame(
lat = c(3.40900, 3.40748),
long = c(-76.55000 , -76.49657)
)
# Crea un mapa
mapA2 <- leaflet(oferta2) %>%
addTiles() %>%
addMarkers(
lng = ~long,
lat = ~lat,
)
mapA2 # Muestra el mapa
El modelo 1 (mod1) para predecir el precio de las casas obtuvo un R² = 0.6536, mientras que el modelo 2 (mod2) para estimar el precio de los apartamentos alcanzó un R² = 0.8142, lo que indica que el segundo modelo presenta una mayor capacidad explicativa y un mejor ajuste, logrando explicar aproximadamente el 81.4 % de la variación del precio, frente al 65.4 % explicado por el primer modelo. Una de las razones que podría explicar este mejor desempeño es la forma en que se incorporó la variable estrato: en el mod2 se construyeron variables dummy para las categorías de estrato (3, 4, 5 y 6), permitiendo capturar diferencias específicas entre cada categoría, mientras que en el mod1 el estrato se trató como una variable numérica continua, asumiendo implícitamente que su efecto sobre el precio sigue una relación lineal creciente y proporcional. Sin embargo, en la realidad del mercado inmobiliario esta relación puede presentar saltos o diferencias no lineales entre estratos, por lo que el uso de variables dummy permite representar mejor estas variaciones, contribuyendo así a una predicción más precisa del precio de los apartamentos en el segundo modelo.
Con referencia a las solicitudes recibidas por María para asesorar la compra de dos viviendas destinadas a empleados de una compañía internacional, el análisis de la base de datos permitió identificar que existe una mayor disponibilidad de ofertas que cumplen con las condiciones en el caso de las casas. En particular, se encontraron cinco inmuebles tipo casa que se ajustan a las características solicitadas, lo que brinda al cliente un mayor margen de elección y posibilidades de negociación dentro del mercado. En contraste, para el caso de apartamentos solo se identificaron dos propiedades que cumplen con los criterios establecidos, lo que reduce las alternativas disponibles y limita la capacidad de comparación entre opciones.